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
相关产品推荐
相关产品推荐

