2017-10-24 4 views
1

は非常に簡単なプログラムのための私のコードです:ユーザーが0で割り切らないようにするにはどうすればいいですか?だからここ

import math 

valid = True 
oper = input('Please input your operation(+, -, *, /): ') 
int1 = int(input('Please enter your first number: ')) 
int2 = int(input('Please enter your second number: ')) 


while(valid == True): 
    if(oper == '/' and int2 == '0'): 
     print('Error! Cannot divide by zero!') 
     valid = False 
    elif(oper == '/' and int2 != '0'): 
     print(int1/int2) 
    elif(oper == '+'): 
     print(int1 + int2) 
    elif(oper == '-'): 
     print(int1-int2) 
    elif(oper == '*'): 
     print(int1 * int2) 


    else: 
     print('Invalid Operation') 

ときint2の番号0で、これまでユーザ入力、私はプログラムは、彼らがそれを行うことができないことを印刷したいです。

このプログラムでは、ゼロで割り切ってプログラムを終了させたり、最初に戻したりしないようにするのに役立つでしょう。予想通り

+0

'try except blocks'を参照してください – 0TTT0

+0

無効な操作が難しいため、有効な入力を確認するためにできることはたくさんあります。あなたが興味を持っているなら、私はこれについてより長い答えを精緻化しました。 –

答えて

1

これが何をすべき:

import math 

while(True): 
    oper = input('Please input your operation(+, -, *, /): ') 
    int1 = int(input('Please enter your first number: ')) 
    int2 = int(input('Please enter your second number: ')) 

    if(oper == '/' and int2 == 0): 
     print('Error! Cannot divide by zero!') 
    elif(oper == '/'): 
     print(int1/int2) 
    elif(oper == '+'): 
     print(int1 + int2) 
    elif(oper == '-'): 
     print(int1-int2) 
    elif(oper == '*'): 
     print(int1 * int2) 
    else: 
     print('Invalid Operation') 

をあなたは、いくつかの微妙な変化に気づくでしょう:

  • 私は入力外部にループを移動しました。このようにして、プログラムは繰り返し入力を要求します。

  • 私は有効なチェックを削除しました。このプログラムは、ユーザーが分母にゼロを入力しようとすると(質問どおりに)新しい入力を求めて永遠にループします。

  • '0'から引用符を削除しました。あなたが以前に持っていたコードは、入力がstringと等しいかどうかを調べることを試みていました.int 0とは異なります。これはコードの点ではわずかですが、機能面では非常に重要な違いです。

  • 私はint2 != 0の条件を削除しました。 oper == '/'int2 == 0がすでに検出されていたため、oper == '/'の場合は、int2はゼロであってはなりません。

+1

ありがとうございました!私はどれくらい長く私がこれを書き直そうとしたのか信じられません。私がする必要があったのは0から ''を落とすことでした。 – Catz

+0

@Catz問題ありません!プログラミングをしている人々が試してみるのが大好き! –

+0

@Catzドキュメントの目的で、https://stackoverflow.com/help/someone-answersの回答を受け入れるようにしてください。 –

0

おそらく整数を取得する関数を追加します。

辞書を使用して適切な数学関数を取得することもできます。私はこのコードを書き直し、質問への入力に基づいて有効な演算子を渡すことができました。ユーザーは、あなたはもう分裂を行うためのオプションを持っていないINT2として0を入力した場合、基本的に

import math 
import operator 

op_map = { 
      "+":operator.add, 
      "-":operator.sub, 
      "*":operator.mul, 
      "/":operator.truediv #div in python2 
     } 

# Define a function that returns an int 
def return_int(s): 
    i = input('Please enter your {} number: '.format(s)) 
    try: 
     return int(i) 
    except ValueError: 
     print("Not valid. Try again:") 

# Define a function that returns a valid operator 
def return_operator(valid_ops): 
    q = 'Please input your operation({}): '.format(', '.join(valid_ops)) 
    i = input(q) 
    while i not in valid_ops: 
     i = input("Error. "+q) 
    return op_map[i] 

# Create a while loop (infinite) and run program 
while True: 
    valid_ops = list("+-*/") 
    int1 = return_int("first") 
    int2 = return_int("second") 
    if int2 == 0: 
     valid_ops.remove("/") # remove devision for 0 
    op = return_operator(valid_ops) # return the operator function 
    r = op(int1,int2) # calculates the result 
    print("Result: {}".format(r)) 

全スクリプト:私はあなたがこのような何かが欲しいと思います。私たちはコードを書き直して、逆のコードにすることができます。最初に最初の数字を入力し、その後に演算子を入力します。演算子が/の場合、0はもはや有効な数字ではありません。例えば。ここで

0

operator libraryを使用して、より簡潔なバージョンです:

import operator 

operations = {"+": operator.add, "-": operator.sub, "*": operator.mul, "/": operator.div} 

oper = input('Please input your operation(+, -, *, /): ') 
int1 = int(input('Please enter your first number: ')) 
int2 = int(input('Please enter your second number: ')) 

if oper not in operations: 
    print("Inavlid operator") 
    exit(1) 
try: 
    print(operations[oper](int1, int2)) 
except ZeroDivisionError: 
    print("Divide by zero") 

あなたはそれを繰り返したい場合は、whileループで囲むことができます。

関連する問題