Python猜数字游戏Option2循环异常:重复请求输入问题求助
排查并修复猜数字游戏Option 2的循环异常问题
我看到你在Option 2模块里遇到了循环持续请求输入的问题,咱们一步步拆解问题所在:
核心问题分析
- 用户输入被重复请求:你把
my_num = input("请输入一个1到10之间的数字让电脑猜:")放在了while True循环内部,这意味着每次电脑完成一次猜测后,程序都会让你重新输入目标数字,自然会一直重复请求输入。 - 电脑猜测逻辑无效:每次循环都重新调用
random.randint(1,10)生成随机数,电脑没有根据之前的猜测结果缩小范围,完全是无逻辑瞎猜;同时counter变量在循环内每次都被重置为0,导致次数统计永远是1,完全不准确。
修复后的代码
import random def display_menu(): print("欢迎来到猜数字游戏!") print("1. 玩家猜数字") print("2. 玩家设定数字,电脑猜") print("3. 退出") print() def main(): display_menu() option = int(input("请选择菜单选项:")) # 玩家猜测电脑随机生成的数字,直到猜对为止。输出玩家的猜测内容及猜对所用的次数 if option == 1: number = random.randint(1,10) counter = 0 while True: try: guess = input("猜一个1到10之间的数字:") guess = int(guess) print() if guess < 1 or guess > 10: raise ValueError() counter += 1 if guess > number: print("猜大了。") print() elif guess < number: print("猜小了。") print() else: print("猜对了!") print("你用了", counter, "次猜对了数字!") break except ValueError: print(guess, "不是有效的猜测") print() # 玩家输入一个数字让电脑猜测。电脑在指定范围内猜测数字。输出电脑的猜测内容及猜对所用的次数 if option == 2: print("电脑猜我的数字") print() # 把用户输入移到循环外部,只需要输入一次目标数字 while True: try: my_num = input("请输入一个1到10之间的数字让电脑猜:") my_num = int(my_num) if my_num < 1 or my_num > 10: raise ValueError() break # 输入有效就跳出输入验证循环 except ValueError: print(my_num, "不是有效的输入") print() # 初始化电脑猜测的范围和计数器 low = 1 high = 10 counter = 0 while True: counter += 1 # 用范围缩小的逻辑猜测,代替无限制随机 comp = random.randint(low, high) print(f"电脑猜了 {comp},", end="") if comp > my_num: print("猜大了") high = comp - 1 # 猜大了,缩小上限 elif comp < my_num: print("猜小了") low = comp + 1 # 猜小了,提高下限 else: print("猜对了!") print(f"电脑用了 {counter} 次猜对了数字!") break # 结束游戏 if option == 3: print("再见") if __name__ == '__main__': main()
关键修改点说明
- 分离输入与猜测逻辑:增加了专门的输入验证循环,用户只需要输入一次有效的目标数字,之后就进入电脑的猜测流程,不会再重复请求输入。
- 优化电脑猜测逻辑:引入
low和high变量记录当前猜测范围,每次根据结果缩小范围,让电脑的猜测更有逻辑,避免无意义的重复随机。 - 修正计数器统计:把
counter的初始化移到猜测循环外部,每次循环只做递增操作,保证次数统计准确。
这样修改后,Option 2的功能就正常了:用户只需要输入一次目标数字,电脑会逐步缩小范围猜测,直到猜对,同时正确统计猜测次数。
内容的提问来源于stack exchange,提问作者TNieuwenhuis
相关产品推荐
相关产品推荐

