我上网学习python。我正在开发一个编码井字游戏的项目。我围绕一个由3x3井字游戏网格代表的嵌套列表构建了这个游戏。这是嵌套列表:
grid = [[1,2,3],[4,5,6],[7,8,9]]
我想提示用户选择数字1-9,然后用X或O替换嵌套列表中的所选数字,具体取决于哪个玩家进行了选择。
我可以很好地找到列表中的值,它会打印出来,以及用户输入的数字。但是,当我尝试将这两个值与if语句进行比较时,没有任何反应。我想在if语句之后更新嵌套列表值,但我无法弄清楚我做错了什么或为什么if语句不会被激活。我无法获得要更新的值,所以我用print语句替换了该行,只是为了看看它将如何处理但是我试图打印的行被忽略了。这是if语句,其中p =用户输入的数字。
for r in grid:
for c in r:
print str(c) + " / " + str(p) # so I can see the values
if c == p:
print "Winner winner, chicken dinner!"
当我运行代码并输入一个整数(在这种情况下为4)时,我希望看到鸡肉晚餐行打印出来,但我只是得到以下内容:
1 / 4
2 / 4
3 / 4
4 / 4
5 / 4
6 / 4
7 / 4
8 / 4
9 / 4
为什么它不识别4 == 4?
更新:我尝试将变量粘贴在str()中以确保它们是相同的类型,但我得到了相同的结果。到目前为止,这是完整的代码:
grid = [['1','2','3'],['4','5','6'],['7','8','9']]
plyr = ("X","O")
turn = 0
def drw_brd():
i = 1
f = turn
for spc in grid:
print " " + spc[0] + " | " + spc[1] + " | " + spc[2] + " "
if i<=2:
print "-----------"
i+=1
print''
print "Player %s (%s's) it's your turn!" %(str(f+1),plyr[turn])
place = input('Cell number to take:')
place_sym(int(place))
check_win()
def check_win():
switch_plyr()
def switch_plyr():
global turn
"""
if turn == 0:
turn = 1
else:
turn = 0
"""
if turn <= 0:
turn = 1
elif turn >= 1:
turn = 0
#print turn
drw_brd()
def place_sym(p):
global turn
global grid
global plyr
print plyr[turn]
for r in grid:
for c in r:
print str(c) + " / " + str(p)
if c == p:
print "Winner winner, chicken dinner!"
答案 0 :(得分:1)
问题是p是一个字符串,c是一个整数。无论你在哪里获得p的价值(应该看起来像)
p = input("enter a number")
你应该把
p = int(input("enter a number"))
这应该可以解决您的问题
修改强>
并非所有值都属于同一类型。网格将数字定义为字符串,
grid = [['1','2','3'],['4','5','6'],['7','8','9']]
并且输入在输入的数字上运行eval,将其类型更改为int,这意味着检查p == c
返回False
,因为它们是不同的类型