【问题标题】:'OR' Is Not Working When Checking If Something 'IS NOT' Or '!=' In a String?检查字符串中是否有“不是”或“!=”时,“或”不起作用?
【发布时间】:2015-03-31 16:06:39
【问题描述】:

四处寻找答案,但找不到任何东西。这是我的代码:

def translate(string, c = 0):
  for char in string:
    if char != 'u' or char != 'i':
        print string[c]
    c += 1

translate("this is fun")

如果我尝试这个,整个if 语句将被取消并垂直返回“t h i s i s f u n”。但是,如果我改为使用 if 语句,它会完美运行。如果我有 2 个或多个 =! 条件,它只会取消 if 语句。下面是 2 个 if 语句,它们按照预期的方式工作:

def translate(string, c = 0):
  for char in string:
    if char == 'u' or char == 'i':
        print string[c]
    c += 1

translate("this is fun")

还有:

def translate(string, c = 0):
  for char in string:
    if char != 'u':
        print string[c]
    c += 1

translate("this is fun")

那么,OR 是否仅适用于 == 而不适用于 !=?我也试过用is not把它写成英文。

【问题讨论】:

  • 你的逻辑错了。对于char 的任何值,char != 'u' or char != 'i'总是为真。您可能应该使用and
  • 英文短语“If char is not 'u' or 'i' then...”在代码中转换为if char != 'u' and char != 'i'(注意and)。这是因为 or 是在备选方案之间,而不是在测试条件之间。只是其中之一。
  • @T.J.Crowder,感谢您的回答。你几乎只是总结了 poke 的帖子。

标签: python if-statement boolean conditional-statements


【解决方案1】:
if char != 'u' or char != 'i':

这种情况有三种可能的情况:

  1. char 既不是'u' 也不是'i':条件显然为真。
  2. char 等于'u':现在,条件的第一部分为假,但第二部分为真,因为'u' != 'i'。所以false or true 产生true
  3. char等于'i':和之前一样只是颠倒过来了; true or false 也产生 true

所以问题在于,由于char 不能同时是两个不同的字符,所以您的条件的一部分始终为真。而且由于您将这两个部分与or 组合在一起,因此一个true 足以决定整个条件的结果;所以条件总是为真。

要解决此问题,请使用 and,因为您现在要求 char 不等于 'u'不等于 'i'

if char != 'u' and char != 'i':

顺便说一句。这与您的工作 char == 'u' or char == 'i' 正好相反。这是因为De Morgan’s laws

【讨论】:

  • 谢谢,我知道== 是相反的,我只是注意到这是在我尝试调试时起作用的东西。再次感谢您!
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-29
  • 1970-01-01
  • 1970-01-01
  • 2011-12-20
  • 2021-11-10
相关资源
最近更新 更多