【问题标题】:Why are Python logic operators not working with this if statement?为什么 Python 逻辑运算符不能使用这个 if 语句?
【发布时间】:2020-04-21 21:30:36
【问题描述】:

我是这里的新手,目前正在尝试制作井字游戏,在这个特殊的 if 语句中,我的“或”不知何故弄乱了循环,无论输入如何,它都会永远持续下去。一旦我删除它并传递所需的参数,一切都会恢复原状。这是sn-p:

def player_input():
    '''Takes in an "X" or "O" as player's input'''
    while True:
        player1 = str(input("Player 1: please choose 'X' or 'O': "))
        if player1.lower() != 'o' or player1.lower() != 'x':
            continue
        return player1

提前感谢所有答案!

【问题讨论】:

  • 这段代码的目的是什么?为什么你有return
  • 你想要and;不管player1是什么,都不能同时是xo
  • 对不起,这是函数的一部分,我将整个序列添加到 OP 中
  • 认为它应该是而不是逻辑。例如,如果一个人输入 'o',那么它将继续,因为值 != 'x'。
  • 哦该死的,在这里我认为没有什么比简单的逻辑更容易的了……谢谢,它成功了!

标签: python if-statement boolean


【解决方案1】:

在您的代码中,这一行总是为真,因此是无限循环:

if player1.lower() != 'o' or player1.lower() != 'x':

想一想:如果玩家输入'o',那么它是真的,因为player1.lower() != 'x' 是真的。如果玩家输入'x',那么它是真的,因为player1.lower() != 'o' 是真的。如果玩家输入其他内容,则player1.lower() != 'o' 为真。你看到问题了吗?不管你输入什么,它总是正确的!

您必须使用and,而不是or。无论如何,循环可以被简化,这就是你想要做的:

player1 = input("Player 1: please choose 'X' or 'O': ")
while player1.lower() != 'o' and player1.lower() != 'x':
    player1 = input("Player 1: please choose 'X' or 'O': ")
return player1

【讨论】:

  • 是的,现在看。感谢您的简洁解释,善良的陌生人!
【解决方案2】:

你有“永远为真”的条件。你的情况分为两部分。如果你输入除“x”或“o”之外的任何字母,你将得到True or True。如果您输入“x”,您将拥有True or False。如果你输入“o”你会得到False or True。无论如何,最后你会得到“if True:”,所以你会永远继续下去。

如果您想继续直到收到xo,您需要条件: if player1 not in ("x", "o"):

【讨论】:

  • 谢谢!我从没想过我会遇到像普通布尔逻辑一样简单的东西,但我在这里(:
猜你喜欢
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多