如何确保用户输入超出0-300范围时重输?代码问题求助
问题修复方案
你的代码后续分数的范围校验失效,核心原因是误用了or逻辑运算符。比如((Score1 or Score2)> 300)这种写法在Python中不会逐个判断分数是否超出范围,而是返回第一个非零数值(非零值在布尔判断中为真),导致无法正确检测后续输入的非法分数。
快速修复步骤(无需大幅修改代码)
对每个后续分数的校验逻辑,只针对当前输入的分数做范围判断,完全照搬第一个分数Score1的校验方式:
- 修改Score2的校验:
将
if ((Score1 or Score2)> 300) or ((Score1 or Score2)< 0):
替换为
if (Score2 > 300) or (Score2 < 0):
- 批量修改Score3到Score10的校验:
每个分数的判断都只检查当前的ScoreX,比如Score3的判断改为:
if (Score3 > 300) or (Score3 < 0):
以此类推,直到完成Score10的校验逻辑修改。
可选小优化(不破坏原有结构)
当前代码中如果某个分数不合法,continue会回到循环开头,导致之前输入的有效分数全部丢失。可以给每个分数的输入单独加一个小循环,只重新输入当前非法的分数,以Score2为例:
# 修改后的Score2输入逻辑 while True: Score2=int(input("Enter your 2nd score:")) if (Score2 > 300) or (Score2 < 0): print("Please enter a Number from 0 and 300 included!") continue break
这样用户输入非法分数时,只会重新输入当前项,不会丢失之前的有效输入,且改动幅度极小。
内容的提问来源于stack exchange,提问作者AMOS SODJAHIN
相关产品推荐
相关产品推荐

