2017-07-29 14 views
-2

私は、Python 3を使用して、この電卓を作ってるんだ、これは私がこれまで持っているものです。Python 3で単純な電卓を作るにはどうすればいいですか?

print("Welcome to Calculator!") 

class Calculator: 
    def addition(self,x,y): 
     added = x + y 
     return added 
    def subtraction(self,x,y): 
     subtracted = x - y 
     return subtracted 
    def multiplication(self,x,y): 
     multiplied = x * y 
     return multiplied 
    def division(self,x,y): 
     divided = x/y 
     return divided 

calculator = Calculator() 

print("1 \tAddition") 
print("2 \tSubtraction") 
print("3 \tMultiplication") 
print("4 \tDivision") 
operations = int(input("What operation would you like to use?: ")) 

x = int(input("How many numbers would you like to use?: ")) 

if operations == 1: 
    a = 0 
    sum = 0 
    while a < x: 
     number = int(input("Please enter number here: ")) 
     a += 1 
     sum = calculator.addition(number,sum) 
    print("The answer is", sum) 
if operations == 2: 
    s = 0 
    diff = 0 
    while s < x: 
     number = int(input("Please enter number here: ")) 
     s += 1 
     diff = calculator.subtraction(number,diff) 
    print("The answer is", diff) 
if operations == 3: 
    m = 0 
    prod = 1 
    while m < x: 
     number = int(input("Please enter number here: ")) 
     m += 1 
     prod = calculator.multiplication(number, prod) 
    print("The answer is", prod) 
if operations == 4: 
    d = 0 
    quo = 1 
    while d < x: 
     number = int(input("Please enter number here: ")) 
     d += 1 
     quo = calculator.division(number, quo) 
    print("The answer is", quo) 

加算と乗算がうまく、引き算と割り算がここに問題がある動作します。減算の例として、9と3の2つの数字を使ってみると、-6が得られます。間違いは間違いです。分割に関しては、2と10と2の2つの数字に分割しようとすると0.2となり、それも間違っています。分裂のために私はnumberとquoを切り替えようとしましたが、同じ問題(10/2)で、私は0.05を得るでしょう...また、私はpythonの組み込み関数を使いたくないのでこれらのエラーを可能な限り簡単に解決できるようにしてください。

+4

別のアカウントを作成しないでください。私はこの正確な質問が昨日尋ねられたのを見ました。 – ForceBru

+0

@ cricket_007、素晴らしい、それを閉じましょう! – ForceBru

+1

これらは別々の質問であるように見えますが、どちらもどちらも閉鎖に値するものではありません。 –

答えて

0

アルゴリズムは、減算と除算に間違っています。減算を見てみましょう:

s = 0 
diff = 0 
while s < x: 
    number = int(input("Please enter number here: ")) 
    s += 1 
    diff = calculator.subtraction(number,diff) 

このステップを頭でお試しください。 2つの数字(9と3)で操作している場合は、最初の反復ではdiff = 9 - 0 = 9、次の反復ではdiff = 3 - 9 = (-6)となります。それは動作しません。

すべての用語(しかし最初のもの)が否定された場合、減算が追加されます。あなたが考えてみれば、それは非常に簡単ですそのように:

terms = [] 
for _ in range(x): # this is a more idiomatic way to iterate `x` times 
    number = int(input("Please enter number here: ")) 
    terms.append(number) 
head, tail = terms[0], terms[1:] 
result = head 
for term in tail: 
    result -= tail 
return result 

あなたは確かにあなたの頭の中でステップスルー、部門と同様に、この更なる

terms = [int(input("Please enter number here: ")) for _ in range(x)] 
terms[1:] = [x * (-1) for x in terms[1:]] 
return sum(terms) 

を凝縮することができます

d = 0 
quo = 1 
while d < x: 
    number = int(input("Please enter number here: ")) 
    d += 1 
    quo = calculator.division(number, quo) 
print("The answer is", quo) 

10と2の場合は、最初にquo = 10/1 = 10、次にquo = 2/10 = 0.2となります。減算を一般化してテイルネゲート加算とすることができるように、除算をテイル反転乗算に一般化することができます。

24/2/3/4 == 24 * (1/2) * (1/3) * (1/4) 

同様にアルゴリズムを書くことができます。これらのすべてはまたfunctools.reduce

terms = [int(input("Number please! ")) for _ in range(int(input("How many numbers? ")))] 
sum_ = functools.reduce(operator.add, terms) 
diff = functools.reduce(operator.sub, terms) 
prod = functools.reduce(operator.mul, terms) 
diff = functools.reduce(operator.truediv, terms) 
0

は(あなたが質問に供給されるテスト入力付き)減算オプションを考えてみましょうoperator機能の一つで書き込むことができることを

terms = [int(input("Please enter number here: ")) for _ in range(x)] 
head, tail = terms[0], terms[1:] 
result = head 
for term in tail: 
    result /= term 

注: 2つの数字を挙げます。 最初の数字は9です。だからdiff = number - diff = 9 - 0 = 0。 今、私たちは次の数、3、そのためdiff = number - diff = 0 - 3 = -3、それが正常に動作した場合、今、私たちは差分の計算の周りに切り替える必要があり、それはdiff = diff - numberであるべきであり、我々はそれを実行した場合、今、それは私たちに-12を与えると、入力技術的に正しい答えは、我々が-9-3 = -12、今私はあなたが実際に9-3 = 6を見つけることを望んでいると尋ねているように、これに唯一の "単純な"修正は、この場合は9番目の最初の数字としてdiffを設定することです上記で述べたこと(期待される9 - 3 = 6を与える)除算関数が機能しない理由は減算と同じであり、上記と同様のロジックを使用して修正することができます。

これに加えて、加算、減算、乗算、除算方法は、方法の点を敗北作り、それは同じコードを複数回使用して防止することであり、以下で記述することが、この場合には、calculator.addition(a, b)を実行することですより長く、より少ない柔軟性単にそれがBIDMAS、いくつかの演算子、数学関数を(あなたと仮定するとサポートを意味し、a + b

はまたのpythonは、文字列を取り、Pythonコードとして実行されますevalを、内蔵電卓機能と呼ばれています使用するよりも、輸入したもの)など