Python调用列表index()定位嵌套列表元素时报ValueError 'X' is not in list
报错原因
gBoard是二维嵌套结构,顶层元素是每一行的子列表,而非单个数字字符串- Python的
list.index()方法仅检索当前列表的直接子元素,不会自动深入嵌套的子列表查找值 - 调用
gBoard.index(playeronechoice)时,程序只会在顶层的8个行列表里找是否存在和输入的'60'完全相等的元素,自然匹配失败,抛出ValueError
这个问题和输入值为60无关,任意输入棋盘内的数字都会触发同样的报错
修正方案
需要通过两层遍历定位目标单元格:先找到目标数字所在的行,再在该行内匹配列索引,最后更新对应位置的内容。
可直接替换原有逻辑的参考代码:
playeronechoice = input("Type a number to replace with your token on the board:\n") target_row_idx, target_col_idx = None, None # 遍历定位目标位置 for row_idx, row in enumerate(gBoard): if playeronechoice in row: target_row_idx = row_idx target_col_idx = row.index(playeronechoice) break if target_row_idx is None: print("请输入棋盘范围内的有效数字") else: # 按要求拼接为"数字 标记"的格式 gBoard[target_row_idx][target_col_idx] = f"{playeronechoice} ##" # 打印更新后的棋盘 for row in gBoard: print(" ".join(row))
原有逻辑的其他问题
原代码中gBoard[indexOne] = (playeronechoice, "##")的赋值操作,会把整个行级子列表替换为元组,直接破坏二维棋盘的结构,无法实现"在对应数字后追加玩家标记"的效果,修改为直接更新单个单元格的拼接字符串即可满足展示需求。
内容的提问来源于stack exchange,提问作者E.V.A.
相关产品推荐
相关产品推荐

