2012-04-01 28 views
5

我正在嘗試創建一個計算器,但我無法編寫一個將從列表中減去數字的函數。
例如:什麼是減法函數是類似於sum()用於減去列表中的項目?

class Calculator(object): 
    def __init__(self, args): 
     self.args = args 

    def subtract_numbers(self, *args): 
     return ***here is where I need the subtraction function to be**** 

對於另外,我可以簡單地使用返回sum(args)計算總的,但我不確定我能爲做減法。

+7

你會如何定義一個「減法」函數?總之,它很直觀。你只需添加所有的數字。但是對於減法,你從中減去了什麼以及你在減去什麼? – Squazic 2012-04-01 10:05:59

+2

您首先需要定義多個參數的減法函數。它是'first_element - sum(rest_of_elements)'?它是'sum(args [i] *(-1)^ 1'?是abs(max(list) - sum(rest_of_elements))??正如你所看到的,有無數的可能性 - 究竟是什麼* *你是否在? – amit 2012-04-01 10:06:41

+1

它究竟應該如何工作?你想從哪些中減去列表中的那些數字? – tchap 2012-04-01 10:07:10

回答

4

這完全取決於你的意思。你可以簡單地從第一個減去數字的其餘部分的總和,是這樣的:

def diffr(items): 
    return items[0] - sum(items[1:]) 

這很難說,因爲在減法它取決於在你減去的順序;但是如果你從減去左到右,在操作的標準順序:

X0 - X1 - X2 - X3 - ... - XN = X - (X1 + X2 + X3 + ... + xn)

這與以上代碼片段定義diffr()的解釋相同。

看起來也許在你的計算器的情況下,x0可能是你運行總計,而args參數可能通過xn代表數字x1。在這種情況下,你只需從運行總數中減去sum(args)。也許我正在閱讀你的代碼太多了......我想你明白了,是吧?

11
from functools import reduce # omit on Python 2 
import operator 

a = [1,2,3,4] 

xsum = reduce(operator.__add__, a) # or operator.add 
xdif = reduce(operator.__sub__, a) # or operator.sub 

print(xsum, xdif) 
## 10 -8 

reduce(operator.xxx, list)基本上「插入」了操作符之間的列表元素。

+0

是否有一個原因讓你更喜歡下劃線版本的運算符名稱? – Marcin 2012-04-01 10:36:34

+0

@Marcin:none,除了下劃線很性感;)) – georg 2012-04-01 10:40:03