Python列表未将变量识别为整数

2024-10-03 06:24:09 发布

您现在位置:Python中文网/ 问答频道 /正文

代码是使用Randint和list的Tic-Tac-Toe。有人能解释一下为什么会有错误吗?我试着把它改成整数和字符串,但还是不行

import random 

boardt = [1, 2, 3]
boardm = [4, 5, 6]
boardd = [7, 8, 9]
print ("This is Tic Tac Toe / Noaughts and Crosses")
print ('(x)Human against (o) "machine"')
print (boardt)
print (boardm)
print (boardd)
hpos = int(input("Pick a position "))
if hpos == 1:
    boardt.remove(1)
    boardt.insert(0,"X")
    mpos = (int(random.randint(1,8)))
    if mpos == 1 or 2:
        boardt.remove(mpos)
        boardt.insert(mpos,"O")

    elif mpos == 3 or 4 or 5:
        boardm.remove(mpos)
        boardm.insert(mpos,"O")

    elif mpos == 6 or 7 or 8:
        boardd.remove(mpos)
        boardd.insert(mpos,"O")

错误:

Traceback (most recent call last):
  File "main.py", line 16, in <module>
    boardt.remove(mpos)
ValueError: list.remove(x): x not in list

Tags: or错误randomticremovelisttactoe
3条回答

我同意SuperFormer的观点,你应该用一个简单的赋值来替换remove+insert。不过,这不是主要问题

如果mpos==1或2:不会按您的想法执行。那句话永远被认为是真的。您想要的是如果mpos位于(1,2):

通过使用二维数组,您可以从很多if编码中解脱出来,如:[[1,2,3],[4,5,6],[7,8,9]]。决定如下设置哪一个:

board = [[1,2,3],[4,5,6],[7,8,9]]
hpos = int(input("Pick a position "))
hpos -= 1  # Humans prefer to start at 1, computers at 0
x = hpos % 3  # Modulo to get column
y = hpos // 3  # Integer division to get row
board[y][x] = 'X'
for row in board:
    print(''.join(map(str, row)))

主要问题是,例如if mpos == 1 or 2不测试值是1还是2。
测试应该是if mpos == 1 or mpos == 2:,或者更好:if mpos in (1, 2):

remove按索引而不是值删除。但是,您可以将该行和下一行替换为boardd[mpos-6]="O"。您还应该使用循环和多维数组而不是3个单独的数组来清理代码

相关问题 更多 >