Python反向猜数游戏首次运行重复打印数值问题求助
反向猜数字游戏代码重复打印问题解决
问题说明
我编写了一段反向猜数字游戏的Python代码,规则为:输入d表示猜对,b表示需要更大的数,k表示需要更小的数。但代码首次运行时会重复打印随机数,例如输出会出现两次67,我尝试删除第3、7、11行的print(c)语句,但问题仍未解决。原代码及当前输出示例如下:
原代码:
import random c = random.randint(1,99) print(c) a = str(input()) while a != "d": if a == "b": print(c) c = random.randint(c,99) a = str(input()) elif a == "k": print(c) c = random.randint(1,c) a = str(input()) elif a == "d": break
当前输出示例:
67 b 67
问题原因
当前代码逻辑是:先打印初始随机数,输入b/k后又打印一次旧的随机数,才生成新的随机数,这就导致了重复打印。单纯删除某几行的print(c)会要么丢失初始数字,要么看不到后续生成的新数字,核心是打印时机不对。
修正后的代码
import random # 生成初始数字并仅打印一次 c = random.randint(1, 99) print(c) a = input().strip() # input本身就是字符串,无需强制转换,strip处理输入空格 while a != "d": if a == "b": # 先生成更大的新数字,再打印新数字 c = random.randint(c, 99) print(c) elif a == "k": # 先生成更小的新数字,再打印新数字 c = random.randint(1, c) print(c) # 统一在循环末尾获取下一次输入,避免重复代码 a = input().strip()
逻辑说明
- 初始仅打印一次随机数,避免首次重复
- 收到
b/k指令后,先生成符合要求的新数字,再打印这个新数字,彻底避免旧数字重复输出 - 将输入获取统一放到循环末尾,简化代码逻辑,减少冗余
- 用
strip()处理输入,避免误输入空格导致判断失效
内容的提问来源于stack exchange,提问作者mani ch
相关产品推荐
相关产品推荐

