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

井字棋代码报NameError:如何根据x值更新对应row列表?

解决NameError: name 'row' is not defined问题

你代码里的row[x][y] = 'X'会报错,核心原因是你从未定义过名为row的变量——你实际创建的是三个独立的列表row1、row2、row3,直接调用row自然会触发未定义错误。下面提供两种可行的修复方案:

方案一:改用二维列表存储棋盘

把三个行列表整合进一个大的二维列表,这样就能通过索引直接定位目标行,代码更简洁易维护:

# 初始化棋盘为二维列表
row1 = [' ',' ',' ']
row2 = [' ',' ',' ']
row3 = [' ',' ',' ']
board = [row1, row2, row3]

def screen(row1, row2, row3):
    print(row1)
    print(row2)
    print(row3)

def inputter(board):
    acceptable = [0,1,2]
    x = None
    y = None
    # 用循环确保输入有效
    while x not in acceptable or y not in acceptable:
        try:
            x = int(input("enter row number:" ))
            y = int(input("enter position:" ))
        except ValueError:
            print("请输入0-2之间的整数")
    # 通过二维列表索引修改对应位置
    board[x][y] = 'X'
    screen(board[0], board[1], board[2])

inputter(board)

方案二:通过条件判断选择目标行

如果不想调整棋盘的存储结构,直接用if-elif判断x的值,定位到对应的行列表进行修改:

row1 = [' ',' ',' ']
row2 = [' ',' ',' ']
row3 = [' ',' ',' ']

def screen(row1, row2, row3):
    print(row1)
    print(row2)
    print(row3)

def inputter():
    acceptable = [0,1,2]
    x = None
    y = None
    # 修复输入验证逻辑,确保只有合法输入才会继续
    while x not in acceptable or y not in acceptable:
        try:
            x = int(input("enter row number:" ))
            y = int(input("enter position:" ))
        except ValueError:
            print("请输入0-2之间的整数")
    # 根据x的值选择要修改的行
    if x == 0:
        row1[y] = 'X'
    elif x == 1:
        row2[y] = 'X'
    elif x == 2:
        row3[y] = 'X'
    screen(row1, row2, row3)

inputter()

另外补充:你原代码的输入验证逻辑存在漏洞——初始x和y是空字符串,虽然第一次能触发输入,但如果用户输入非整数或超出0-2范围的值,不会重新提示输入。上面的代码用while循环加try-except处理了这个问题,保证只有合法输入才会执行后续操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 04:02:24