我正在参加在线类(class)来学习Python。我正在开发一个项目来编写井字游戏。我围绕由 3x3 井字棋网格表示的嵌套列表构建了这个游戏。这是嵌套列表:
grid = [[1,2,3],[4,5,6],[7,8,9]]
我想提示用户选择数字 1-9,然后根据做出选择的玩家将嵌套列表中的所选数字替换为 X 或 O。
我可以很好地找到列表中的值,并且它会与用户输入的数字一起打印出来。但是,当我尝试使用 if 语句比较这两个值时,没有任何反应。我只想更新 if 语句之后的嵌套列表值,但我无法弄清楚我做错了什么或为什么 if 语句不会触发。我无法获取要更新的值,因此我用打印语句替换了该行,只是为了看看它如何处理,但我尝试打印的行却被忽略了。这是 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!"
最佳答案
问题在于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
,因为它们是不同的类型
关于python 整数值相等但 if 语句不执行任何操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48081801/