2016-10-18 2 views
1

私は2つの異なる数字で動作する基本的な電卓を書いて​​います。 これまでは動作するプロトタイプを書いていましたが、それを分割して防止していたのですが、多くの問題が発生しましたので、 を別々に投稿しています。Python計算機をフールプルーフする


ユーザーが適格な演算子を提供しない場合は、プログラムで質問を繰り返してください。それは私が今持っているコードです:

def optn_query(): 
    print("Hulk can different things with number!") 
    print("YOU!") 
    optn = input("What Hulk do with number?! ") 
    return optn 

私は入力が正しいかどうかを決定するためにif文を使用していますか?


(優雅hulk_mathと呼ばれる)次の関数が途中で失敗しないように、また、私はそこに戻りOPTNを入れて、それはまだありません:

Traceback (most recent call last): 
    File "hulc.py", line 57, in <module> 
    main() 
    File "hulc.py", line 13, in main 
    hulk_math() 
    File "hulc.py", line 41, in hulk_math 
    if optn == "+": 
NameError: name 'optn' is not defined 

が、私はこれを修正するために何をすべき?

def hulk_math(): 
    optn = optn_query() 
    #The rest of your code 

また、num1num2ない限り、あなたのコード内の他の場所で定義されている、彼らはしているように:あなたが実際にあなたの関数を呼び出す必要があり

def hulk_math(): 
    if optn == "+": 
     result = num1 + num2 
     print("Hulk ADDS!!! Hulk thinks it's {0}!".format(result)) 
    elif optn == "-": 
     result = num1 - num2 
     print("Hulk SUBTRACTS!!! Hulk thinks it's {0}!".format(result)) 
    elif optn == "*": 
     result = num1 * num2 
     print("Hulk MULTIPLIES!!! Hulk thinks it's {0}!".format(result)) 
    elif optn == "/": 
     result = num1/num2 
     print("Hulk DIVIDES!!! Hulk thinks it's {0}!".format(result)) 
    main() 
+0

あなたはプログラムを書く前に基本を学びたいと思うかもしれませんが、あなたは 'optn'が来ると思ったのですか?また、whileループが便利で、戻り値が関数を終了する可能性がありますが、sys.exitは必要ありません。 –

答えて

1

はここhulk_math()そのものですスコープがhulk_mathの場合、プログラムもそこで失敗します。

+0

これらは、また、optnと同じ方法で定義されています。 –

+0

私はmain()のoptn_query()関数を呼び出します。私がhulk_math()で呼び出すと、コードの他のさまざまな関数を永遠にループします。それは実際には本当に奇妙です。 –

+1

なぜ 'main'も投稿しないのですか?それは不思議なセットアップのように聞こえる。もし 'optn'が' main'に値を持っていれば、あなたが明示的にそれをしない限り、その値は 'hulk_math'に渡されません。 'hulk_math'はおそらく' def hulk_math(num1、optn、num2) 'のようなものでしょう。 –

0

私はreturn optnの代わりにglobal optnと書くことで修正しました。そうすることで、変数がグローバルになり、他の関数も変数を使用できます。

0

globalを使用することは、これを行う正しい方法ではありません。戻り値を保存して引数として渡すことによって、ある関数から別の関数に値を渡します。

def main(): 
    intro() 
    num1 = num1_query() 
    optn = optn_query() 
    num2 = num2_query() 
    hulk_math(num1, optn, num2) 

def hulk_math(num1, optn, num2): 
    #Your original code will work as expected