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

Python井字棋项目check_win胜负判定函数运行异常问题

问题修复方案

存在的两个核心bug

  • check_win函数的判断逻辑完全错误
    你写的if (p1 and p2 and p3) == 'X' or 'O':存在两个逻辑漏洞:
    1. 末尾的or 'O'属于恒真条件:Python中非空字符串的布尔值为True,所以不管前面的判断结果是什么,整个if条件永远成立,只要执行check_win()就会打印获胜提示
    2. (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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:39:04