' OR'检查是否有什么“不是”时不起作用。或者'!='在一个字符串?

时间:2015-02-01 17:14:36

标签: python if-statement boolean conditional-statements

寻找答案,却找不到任何答案。这是我的代码:

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 i i s i s f u n”。但是,如果我这样做if语句,它就完美无缺。如果我有2个或更多条件=!,它只取消if语句。如果陈述按照预期的方式发挥作用,则为2:

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

1 个答案:

答案 0 :(得分:2)

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

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

  1. char既不是'u'也不是'i':条件显然是正确的。
  2. char等于'u':现在,条件的第一部分为false,但第二部分为真,因为'u' != 'i'。因此false or true会产生true
  3. char等于'i':与之前相反; true or false也会产生true
  4. 所以问题是因为char不能同时是两个不同的字符,所以你的一部分条件总是正确的。由于您将两个部分与or组合在一起,因此一个true足以决定整个条件的结果;所以条件总是正确的。

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

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

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