You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 01:57:57