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

井字棋游戏中列表元素值替换问题求助

解决井字棋列表元素替换问题

嘿,我来帮你搞定这个井字棋的问题!先拆解下你代码里的几个关键问题,再给你修正后的版本:

问题核心点

  • 输入类型不匹配:input() 返回的是字符串类型,你直接拿它和整数 1 比较,永远不会触发条件里的赋值操作——这才是你觉得「替换失败」的根本原因。
  • 语法小错误:def gameTime () 后面少了冒号 :,Python 会直接报错,函数定义根本不生效。
  • 缩进不规范:嵌套 if 和函数内的 print 语句缩进混乱,Python 靠缩进识别代码块,缩进错了逻辑就乱了。
  • append 用错场景:append() 是给列表新增元素的,而你要替换已有索引的元素,直接用 列表[索引] = 值 就可以,只是之前因为类型问题没执行到这一步。

修正后的代码

row1 = ["","",""]
row2 = ["","",""]
row3 = ["","",""]

def gameTime():  # 补上函数定义的冒号
    print(row1[0], row1[1], row1[2])  # 统一缩进规范
    print(row2[0], row2[1], row2[2])
    print(row3[0], row3[1], row3[2])

while True:
    # 把用户输入转成整数类型,才能和数字条件匹配
    player1Row = int(input("Select a row: "))
    player1Column = int(input("Select a column: "))
    
    # 匹配行列,注意用户输入的1对应列表索引0
    if player1Row == 1 and player1Column == 1:
        if row1[0] != "X" and row1[0] != "O":
            row1[0] = "X"
            gameTime()
    # 可以继续补充其他位置的判断,比如第一行第二列
    elif player1Row == 1 and player1Column == 2:
        if row1[1] != "X" and row1[1] != "O":
            row1[1] = "X"
            gameTime()
    # 剩下的6个位置以此类推即可

额外优化小建议

你可以把三个行列表整合到一个大列表里,比如 board = [row1, row2, row3],这样通过 board[玩家输入行-1][玩家输入列-1] 就能直接定位位置,不用写一堆 if 判断,代码会简洁很多~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:39:25