Python while循环逻辑错误:输入合法骰子数值仍提示无效如何解决?
逻辑错误点
- 核心问题是
if判断中逻辑运算符使用错误,误用了逻辑或(or) 代替了需要的逻辑与(and) - 你当前写的
dice !=4 or dice !=6 ...的判断逻辑永远为真:任意输入的数值不可能同时等于所有合法值,只要输入不等于其中任意一个值,整个条件就成立,所以永远会触发invalid打印,无法进入合法分支。 - 隐藏问题:原有代码没有处理非整数输入的异常,用户输入非数字内容时会直接抛出
ValueError报错中断运行。
修正方案
方案1:直接修改逻辑运算符
仅修正判断逻辑的运算符,同时删除冗余的重复判断:
dice = 0 while True: dice = int(input("enter dice: ")) if (dice != 4 and dice != 6 and dice != 8 and dice != 10 and dice != 12 and dice != 20): print("invalid") else: print("valid") break print("Accepted dice")
方案2:更简洁易维护的写法
用合法值列表+成员判断实现,后续新增合法骰子值只需修改列表即可,同时增加异常处理兼容非数字输入:
# 提前定义合法骰子值列表 valid_dices = [4,6,8,10,12,20] while True: # 捕获非整数输入的异常 try: dice = int(input("enter dice: ")) except ValueError: print("invalid") continue # 成员判断逻辑更清晰 if dice in valid_dices: print("valid") break else: print("invalid") print("Accepted dice")
内容的提问来源于stack exchange,提问作者Ahmed Ali
相关产品推荐
相关产品推荐

