Python井字棋项目check_win胜负判定函数运行异常问题
问题修复方案
存在的两个核心bug
check_win函数的判断逻辑完全错误
你写的if (p1 and p2 and p3) == 'X' or 'O':存在两个逻辑漏洞:- 末尾的
or 'O'属于恒真条件:Python中非空字符串的布尔值为True,所以不管前面的判断结果是什么,整个if条件永远成立,只要执行check_win()就会打印获胜提示 (p1 and p2 and p3)是逻辑与运算,只会返回最后一个真值,并不是判断三个变量同时等于'X'或者同时等于'O'的逻辑
- 末尾的
- X落子后调用校验函数时语法错误
你写成了check_win,没有加括号,这只会引用函数对象,不会实际执行校验逻辑,所以第一次X落子后没有触发错误的判断,直到O落子后调用check_win()才触发了恒真的判断条件
修正后的代码
p1 = '' p2 = '' p3 = '' p4 = '' p5 = '' p6 = '' p7 = '' p8 = '' p9 = '' # 游戏运行标记 game_running = True def tabla(): print([f'{p1}',f'{p2}',f'{p3}']) print([f'{p4}',f'{p5}',f'{p6}']) print([f'{p7}',f'{p8}',f'{p9}']) def check_win(): global game_running # 判断第一行全X获胜 if p1 == 'X' and p2 == 'X' and p3 == 'X': print('X has won the game!') game_running = False return # 判断第一行全O获胜 if p1 == 'O' and p2 == 'O' and p3 == 'O': print('O has won the game!') game_running = False return # 其余行、列、对角线的判断逻辑可以按相同规则补充 # 比如第二行:p4==p5==p6=='X',第一列:p1==p4==p7=='X',对角线:p1==p5==p9=='X'等 # START OF GAME print('Welcome to my simple game! ') while game_running: answerx = input('X goes first, where to place X (1-9)? ') if answerx == '1': p1 = 'X' elif answerx == '2': p2 = 'X' elif answerx == '3': p3 = 'X' elif answerx == '4': p4 = 'X' elif answerx == '5': p5 = 'X' elif answerx == '6': p6 = 'X' elif answerx == '7': p7 = 'X' elif answerx == '8': p8 = 'X' elif answerx == '9': p9 = 'X' tabla() # 补全括号执行函数 check_win() if not game_running: break answero = input('O goes now, where to place O (1-9)? ') if answero == '1': p1 = 'O' elif answero == '2': p2 = 'O' elif answero == '3': p3 = 'O' elif answero == '4': p4 = 'O' elif answero == '5': p5 = 'O' elif answero == '6': p6 = 'O' elif answero == '7': p7 = 'O' elif answero == '8': p8 = 'O' elif answero == '9': p9 = 'O' tabla() check_win() if not game_running: break
内容的提问来源于stack exchange,提问作者Jovan0000
相关产品推荐
相关产品推荐

