首页 > 解决方案 > Python while true Condition 抛出语法错误

问题描述

您能否告知以下代码有什么问题?

def add(x, y):
   return x + y
while True:
    try:
        num1 = float(input('Enter first number: ')
    except:
        print ('num1 is a complex/string. Only Integers or Float is allowed. Please key in again')
    try:
        num2 = float(input("Enter first number: ")
    except:
        print ('num2 is a complex/string. Only Integers or Float is allowed. Please key in again')
    break
print(num1,"+",num2,"=", add(num1,num2))
input("Press enter to exit ;)")

标签: python

解决方案


(除了语法错误 - 缺少括号......)

break语句转义了 while 循环,因此通过将其放在迭代结束时,您将在第一次迭代时中断,因此如果输入无效输入,则不会再次询问它们,因为您将中断。

此外,就只有一个循环而言,逻辑是错误的。如果他们输入一个 validnum1然后一个 invalid num2,他们将(如果您移动break)被要求同时输入-num1num2不是num2再次输入。

要解决这些问题,您可以划分代码 - 将输入逻辑移动到函数:

def get_float(prompt):
    while True:
        try:
            return float(input(prompt))
            break
        except ValueError:
            print('sorry, invalid input')

然后你的主要代码更容易理解:

def add(x, y):
   return x + y

num1 = get_float('Enter first number: ')
num2 = get_float('Enter second number: ')
result = add(num1, num2)
print(num1, '+', num2, '=', result)
input('press enter to exit')

试运行显示了它的好处:

Enter first number: one
sorry, invalid input
Enter first number: bob
sorry, invalid input
Enter first number: 20
Enter second number: nine
sorry, invalid input
Enter second number: 8.89
20.0 + 8.89 = 28.89
press enter to exit

推荐阅读