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

While循环else分支无限打印问题求助

问题分析与修复方案

嘿,我一眼就瞅出问题出在哪啦!咱们来捋一捋:

你的代码逻辑里,当用户输入的位置已经被占用(触发else分支)时,没有让用户重新输入新的位置。这就导致user_input一直停留在那个已经被占用的数值上——下次循环时,内层的合法性检查循环(判断输入是否是1-9)会直接跳过(因为数值本身是合法的),然后再次检查board[block],发现还是被占用,于是又打印提示,就这样无限循环下去了。

修复方案一:把输入放到外层循环里

最简洁的方式是把获取输入的代码移到外层while循环内部,这样每次循环都会重新获取用户输入,从根源上避免重复使用旧值:

board = ["-","-","-","-","-","-","-","-","-"]
i = False
while not i:
    user_input = input("Enter position: ")
    # 检查输入是否合法
    while user_input not in ["1","2","3","4","5","6","7","8","9"]:
        user_input = input("Enter position: ")
    block = int(user_input) - 1
    if board[block] == "-":
        i = True
    else:
        print("Position not available, try again")

修复方案二:在else分支里重新获取输入

如果你不想调整输入的位置,也可以在else分支里主动让用户输入新值,更新user_input:

board = ["-","-","-","-","-","-","-","-","-"]
i = False
user_input = input("Enter position: ")
while not i:
    while user_input not in ["1","2","3","4","5","6","7","8","9"]:
        user_input = input("Enter position: ")
    block = int(user_input) - 1
    if board[block] == "-":
        i = True
    else:
        print("Position not available, try again")
        # 这里添加重新输入,更新user_input
        user_input = input("Enter position: ")

两种方案都能解决无限打印的问题,推荐第一种,逻辑更清晰,也避免了重复写input代码~

内容的提问来源于stack exchange,提问作者Sachin sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 13:57:57