Python猜球游戏循环问题求助:无法实现预期的重启与终止逻辑
猜球游戏代码异常排查与修复
核心问题梳理及修复方案:
问题1:
player_guess函数循环未生效
原函数中return int(guess)写在while循环内部,导致用户首次输入后直接返回,循环无法重复执行来校验输入合法性。比如输入非0/1/2的数值时,不会触发重新输入,直接返回非法值。
修复后代码:def player_guess(): guess = '' while guess not in ['0', '1', '2']: guess = input("Pick a number: 0, 1, 2 ") return int(guess)问题2:输入合法性判断逻辑错误
repeat函数中,guess是整数类型,但判断条件用了字符串列表['0','1','2'],整数与字符串永远不匹配,导致该判断完全失效,无法拦截非法输入(即使前面函数漏过的情况)。
修复方式:要么将判断条件改为guess not in [0,1,2],要么直接删除该判断——因为修复后的player_guess已经确保返回值只能是0、1、2。问题3:递归重启存在栈溢出风险
多次猜错后,递归调用repeat()会不断堆叠函数栈帧,次数过多会触发RecursionError。建议用while循环替代递归实现游戏重启逻辑,更稳定高效。
修复后的完整代码:
from random import shuffle def shuffle_list(mylist): shuffle(mylist) return mylist def player_guess(): guess = '' while guess not in ['0', '1', '2']: guess = input("Pick a number: 0, 1, 2 ") return int(guess) def check_guess(mylist, guess): return mylist[guess] == 'O' def game(): while True: # 初始化并打乱球的位置 mylist = ['', 'O', ''] mix_list = shuffle_list(mylist) print(mix_list) # 获取用户合法猜测 guess = player_guess() # 验证结果 if check_guess(mix_list, guess): print("congrats") break # 猜错自动进入下一轮游戏 game()
内容的提问来源于stack exchange,提问作者Albert Fredy Rudolph Oppliger
相关产品推荐
相关产品推荐

