Python猜数字游戏程序异常:循环无法终止且重复输出过低提示
问题排查与修复方案
我帮你梳理下代码里导致无限循环和重复输出的问题,以及对应的修复方法:
核心问题分析
你的程序出现无限循环且重复提示的原因主要有两个:
- 玩家输入没有在循环内更新:你只在
while循环开始前获取了一次玩家输入,之后循环里一直用这个初始值判断,自然会一直输出相同的提示,也没法接收新的输入来终止程序。 - return语句位置错误:你把返回结果的
return放在了while循环内部,这会导致第一次循环结束后直接退出函数,玩家根本没机会继续猜测或者输入exit。
另外还有个小问题:你在函数外调用了print(number_generation()),这会额外生成一个无关的随机数,属于冗余代码,应该删掉。
修复后的完整代码
import random # 生成1-9之间的随机数 def number_generation(): computer_number = random.randint(1,9) return computer_number # 获取玩家输入 def player_number(): player_num = input('Digit your guess between 1 and 9, or type "exit" to quit\n') return player_num def guessing_game(): w_answers = 0 r_answers = 0 cpu_guess = number_generation() # 游戏开始时生成一次随机数 player_guess = player_number() while player_guess != 'exit': # 处理非数字输入的异常情况 try: player_num = int(player_guess) if player_num > cpu_guess: print('You have guessed too high') w_answers += 1 elif player_num < cpu_guess: print('You have guessed too low') w_answers += 1 else: print('You have guessed the correct number') r_answers += 1 # 猜对后生成新的随机数,让玩家继续猜 cpu_guess = number_generation() print("New number generated, keep guessing!") except ValueError: print("Invalid input! Please enter a number between 1-9 or 'exit' to quit.") # 关键:每次循环结束后重新获取玩家的新输入 player_guess = player_number() # 循环结束(输入exit)后再返回统计结果 return w_answers, r_answers print(guessing_game())
关键修改点说明
- 将
player_guess = player_number()移到循环内部:每次循环结束后重新获取玩家的新输入,这样才能接收新的猜测或者exit指令。 - 把
return语句移到while循环外面:确保玩家可以一直猜测直到输入exit,最后再返回统计的对错次数。 - 添加异常处理:避免玩家输入非数字内容时程序崩溃,提升用户体验。
- 猜对后生成新随机数:如果希望玩家猜对后继续玩,可以保留这部分;如果想让玩家一直猜同一个数直到退出,删掉相关代码即可。
- 删除冗余的
print(number_generation()):避免生成无关的随机数干扰游戏逻辑。
内容的提问来源于stack exchange,提问作者Luismaia1994
相关产品推荐
相关产品推荐

