Python while循环无法终止问题求助
问题分析与修复方案
核心问题:checkHorz函数逻辑错误
你的循环无法终止的根本原因是checkHorz函数没有正确检测获胜条件,导致gameOn永远不会被设为False,具体问题如下:
1. 循环提前终止,未完成所有检测
checkHorz函数中,else: return True是和最后一个if语句绑定的,这意味着第一次循环(i=1)时,只要最后一个行检测不满足条件,函数就直接返回True,不会继续检查i=2到i=7的情况,也不会完成所有行的完整检测。
2. 代码笔误导致检测逻辑错误
函数中有两处明显的笔误:
row1[i] == row5[i + 1] == ...应该改为row5[i] == row5[i + 1] == ...row1[i] == row6[i + 1] == ...应该改为row6[i] == row6[i + 1] == ...
这些笔误导致row5和row6的横向获胜条件完全无法被检测到。
3. 主循环的小优化(非致命,但更规范)
主循环中while (gameOn == True)可以简化为while gameOn,Python中布尔值可以直接作为循环条件;另外P1回合结束后如果gameOn已为False,P2的回合会自动跳过,逻辑没问题,但可以更简洁。
修正后的代码
修正后的checkHorz函数
def checkHorz(): # 遍历所有可能的横向四连起始位置 for i in range(1, 8): # i+3最大为10,假设行列表索引到10 # 检查row1的横向四连 if row1[i] == row1[i+1] == row1[i+2] == row1[i+3] and row1[i] != "e": return False # 检查row2 if row2[i] == row2[i+1] == row2[i+2] == row2[i+3] and row2[i] != "e": return False # 检查row3 if row3[i] == row3[i+1] == row3[i+2] == row3[i+3] and row3[i] != "e": return False # 检查row4 if row4[i] == row4[i+1] == row4[i+2] == row4[i+3] and row4[i] != "e": return False # 检查row5(修正笔误) if row5[i] == row5[i+1] == row5[i+2] == row5[i+3] and row5[i] != "e": return False # 检查row6(修正笔误) if row6[i] == row6[i+1] == row6[i+2] == row6[i+3] and row6[i] != "e": return False # 所有情况都检查完,没有获胜则返回True return True
优化后的main函数(可选)
def main(): gameOn = True while gameOn: # P1's turn if gameOn: p1Choice = int(input("P1 move: ")) write(1, p1Choice) if not checkHorz(): gameOn = False print("Player 1 wins!!") # P2's turn if gameOn: p2Choice = int(input("P2 move: ")) write(2, p2Choice) if not checkHorz(): gameOn = False print("Player 2 wins!!") main()
额外提示
- 确保
row1到row6这些列表的索引范围足够(至少到10,因为i最大为7,i+3=10),避免索引越界错误。 - 可以考虑将获胜检测的逻辑封装得更通用,比如用一个列表存储所有行,循环遍历行列表,减少重复代码。
内容的提问来源于stack exchange,提问作者RubberToe06
相关产品推荐
相关产品推荐

