python - 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 ;)")
解决方案
(除了语法错误 - 缺少括号......)
该break
语句转义了 while 循环,因此通过将其放在迭代结束时,您将在第一次迭代时中断,因此如果输入无效输入,则不会再次询问它们,因为您将中断。
此外,就只有一个循环而言,逻辑是错误的。如果他们输入一个 validnum1
然后一个 invalid num2
,他们将(如果您移动break
)被要求同时输入-num1
而num2
不是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
推荐阅读
- python - 读取 csv 文件中的特定单元格
- windows - for循环在Windows .bat文件中不起作用
- javascript - 如何使线框像方形网格但不是连接节点的类型?
- javascript - 如何从多个元素复制属性值并将每个元素复制到不同的元素?
- pandas - 乳胶不能解析“_”下划线符号吗?
- node.js - 上传到应用程序时压缩和减小图像大小的最佳方法是什么?
- flask - 为表单生成可变数量的字段
- ruby-on-rails - 如何在 Ruby 中使用 optimist?
- spring-boot - 用于保存来自外部 API 的数据的 Spring Boot 注册表
- mongodb - mongodb 字母排序翻转