2017-04-17 10 views
0

多重度の計算機を作っていますが、ほとんど問題があります。問題は、ユーザーが文字列入力をしたときに数値を要求するとコードが途切れてエラーがスローされます私はifステートメントのためにelse:を持っています。if/elseステートメントのコードが破損しています

def Start(): 
    numberOneList = [] 
    numberTwoList = [] 
    multiples = 100000 
    iterations = 0 
    multiplicity = int(input("How many common multiplicities you would like to find between two numbers: ")) 

    if multiplicity > 0 and multiplicity < 100001: 
     numberOne = int(input("Input the first number: ")) 
     if numberOne > 0 and numberOne < 100001: 
      numberTwo = int(input("Input the second number: ")) 
      if numberTwo > 0 and numberTwo < 100001: 
       for i in range(multiples): 
        mNumberOne = numberOne * i 
        numberOneList.append(mNumberOne) 
        mNumberTwo = numberTwo * i 
        numberTwoList.append(mNumberTwo) 
       print("") 
       print("Common multiplicities:") 
       print("") 
       print("Calculating...") 
       print("") 
       for i in numberOneList: 
        for a in numberTwoList: 
         if a == i: 
          if a != 0: 
           print(numberOne, "x", i/numberOne, "=", i) 
           print(numberTwo, "x", a/numberTwo, "=", a) 
           print("") 
           iterations += 1 
           if iterations == multiplicity: 
            Again() 
           else: 
            continue 
          else: 
           continue 
         else: 
          continue 
      else: 
       print("Invalid answer, restarting") 
       Start() 
     else: 
      print("Invalid answer, restarting") 
      Start() 
    else: 
     print("Invalid answer, restarting") 
     Start() 

def Again(): 
    calculateAgain = input("Calculate again? [y/n]: ") 
    if calculateAgain == "y": 
     Start() 
    if calculateAgain == "n": 
     quit() 
    else: 
     Again() 

Start() 
+1

'else'文がエラーをキャッチとは何の関係もないためです。 'try/except'を使う必要があります。 – kindall

+4

再帰を使用して関数を再実行することを強くお勧めします。whileループを使用します。 –

答えて

0

あなたはこれが有効な最初のものであることを確認するためにチェックすることなく、ユーザの入力にintタイプを主張しているので、あなたがエラーを取得しています。 @kindallはcommentに記載されているように、try/exceptは、失敗したタイプのアサーションをキャッチして正常に処理できるようにします。

try: 
    multiplicity = int(input("How many common multiplicities you would like to find between two numbers: ")) 
except ValueError as e: 
    print('Please input a valid number') 
    return str(e) 

(。代わりに、エラーテキストを返すので、あなただけの代わりにプロンプ​​トを繰り返しかもしれないことに注意してください)

+0

助けてくれてありがとう、それは魅力のように働いた! –

+0

また、汎用例外を除いてはならないことに注意してください。この場合、ValueErrorを使用します。 – DSLima90

0

あなたの現在の一つの簡単な修正を:あなたのintは、次のようなものでキャストラップすると、トリックを行う必要がありますコードが入力または無効な値を取得する関数を作成する場合は、そのないint型

def input_positive_integer(message): 
    while(True): 
     try: 
      value = int(input(message)) 
      if (value<=0 or value > 100000): 
       raise ValueError("Not in range") 
      break 
     except ValueError as e: 
      print("Value error!! Try again!") 

次にあなたがこの機能を使用するには、整数を受け取り、すべての入力を変更することができます。

値が有効になるまでループを継続することに注意してください。

私は本当にあなたがループしながら、シンプルを使用してみてください、そのコードに再帰を避けるためにお勧め...

関連する問題