井字棋游戏中列表元素值替换问题求助
解决井字棋列表元素替换问题
嘿,我来帮你搞定这个井字棋的问题!先拆解下你代码里的几个关键问题,再给你修正后的版本:
问题核心点
- 输入类型不匹配:
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
相关产品推荐
相关产品推荐

