Python输入验证问题:无法识别负数,需实现重新问询功能
问题分析
你的代码主要有两个核心问题:
- 条件判断逻辑错误:
if mph or hours < 0:这个写法完全不对。Python会先判断mph是否为“真值”(只要不是0、空值这类就会被视为True),所以哪怕输入的是正数车速,这个条件也会触发提示,反而真正的负数输入可能没被正确识别。正确的写法应该是分别检查两个数值是否小于0:if mph < 0 or hours < 0:。 - 循环和重输入逻辑混乱:原代码里如果检测到负数,重新输入后没有再次验证,直接就计算距离并退出循环了,而且不管验证通不通过,最后都会执行
break,导致循环根本没起到重复询问的作用。
修复后的代码
while True: mph = float(input('What is the speed of the vehicle ')) hours = float(input('How many hours has it traveled ')) # 正确判断是否有负数输入 if mph < 0 or hours < 0: print('That was a negative number, answer the questions again. ') # 直接回到循环开头重新询问,避免重复代码 continue # 验证通过才计算距离并退出 distance = mph * hours print('Miles traveled:', distance) break
关键改动说明
- 修正条件判断语句,确保只有车速或行驶小时数为负数时才触发提示。
- 用
continue替代重复的输入代码,只要验证不通过就回到循环开头重新询问,保证每次输入都会被校验。 - 把计算距离和退出循环的逻辑放在验证通过的分支里,确保只有合法输入才会执行这部分操作。
内容的提问来源于stack exchange,提问作者elizabethgleigh
相关产品推荐
相关产品推荐

