代码是使用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
我同意SuperFormer的观点,你应该用一个简单的赋值来替换remove+insert。不过,这不是主要问题
如果mpos==1或2:不会按您的想法执行。那句话永远被认为是真的。您想要的是如果mpos位于(1,2):
通过使用二维数组,您可以从很多if编码中解脱出来,如:[[1,2,3],[4,5,6],[7,8,9]]。决定如下设置哪一个:
主要问题是,例如
if mpos == 1 or 2
不测试值是1还是2。测试应该是
if mpos == 1 or mpos == 2:
,或者更好:if mpos in (1, 2):
remove
按索引而不是值删除。但是,您可以将该行和下一行替换为boardd[mpos-6]="O"
。您还应该使用循环和多维数组而不是3个单独的数组来清理代码相关问题 更多 >
编程相关推荐