2017-04-17 82 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允许您捕获失败的类型断言并正常处理它们。结束语您int的东西,如注塑以下应该做的伎俩:

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

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!") 

然后你就可以改变你所有的输入,接收整数使用此功能。

请注意,它将保持循环,直到该值有效。

我真的建议你避免在代码递归,请尝试使用一个简单的while循环...