2012-04-01 5 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

+2

まず、複数の引数にどのような減算関数を定義する必要があります。それは 'first_element - sum(rest_of_elements)'ですか?それは 'sum(args [i] *(-1)^ 1'ですか?abs(max(list) - sum(rest_of_elements))'ですか? *あなたの後ろにいますか? – amit

+1

どのように動作するのでしょうか?リストの数字を何から減算したいですか? – tchap

答えて

4

これは、正確に何を意味するかによって異なります。あなたは、単にこのように、最初の1から数字の残りの合計を引くことができます:

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

それは引き算で、それはあなたが引く順序に依存だから伝えることは難しいです。ただし、標準操作順序のように、左から右に引くと、次のようになります。

x0 - x1 - x2 - x3 - ... - xn = x0 - (x1 + x2 + x3 + xn)

diffr()を定義するコードスニペットと同じ解釈です。

それはargsパラメータがxnまでの数字x1を表すかもしれないが、多分あなたの電卓の文脈で、x0はあなたの、総を実行している可能性がありますように思えます。その場合は、合計から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

+0

@Marcin:noneアンダースコアはセクシーです;)) – georg

関連する問題