python 整数值相等但 if 语句不执行任何操作

标签 python

我正在参加在线类(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/

相关文章:

python - 如何参数化通用 Python 模块?

python - 在python中将一个字典值分配给另一个字典值

python - 创建自定义 super 用户 django

python - 你如何在不安装软件包的情况下返回 `pip freeze`?

python - 使用 python 在 Excel 中移动单元格

python - 无法从 Google Colab 外部的 Tensorflow 运行 CycleGan 示例

python - 在多级列 Pandas 数据框中创建列的更好方法

python - 在 SPSS 中使用 Python 循环保存输出文件

python - django-admin.py startproject 忽略隐藏文件

python - str.format() 具有两种对齐方式 { :>} and variable interpolation