Python:使用异常进行迭代(初学者)

Seb*_*Seb 3 python iteration

我只是想知道为什么这不起作用(我试图从一本书中给小鸭子起名:Jack,Kack,Lack,Mack,Nack,Ouack,Pack,Quack)注意:Quack和Ouack有一个U

prefixes = 'JKLMNOPQ'
suffix = 'ack'

for letter in prefixes:
    if letter != 'O' or 'Q':      #I know this doesn't work, need to know alternative
        print letter + suffix
    else:
        print letter + 'u' + suffix
Run Code Online (Sandbox Code Playgroud)

Raf*_*ler 7

你可能是这个意思:

if letter != 'O' or letter != 'Q':
Run Code Online (Sandbox Code Playgroud)

原始陈述的结果,

if letter != 'O' or 'Q':
Run Code Online (Sandbox Code Playgroud)

letter结果相比'O' or 'Q',这是一个布尔值(确切地说是真的)(所以你可以看到为什么这种比较总是如此).

  • @ 30trix:将`或`改为`和`.或者你可以使用`如果字母不在'OQ':`; 我猜想,无论你看起来哪个更清楚. (4认同)
  • 这个答案有几个问题:1)正如@Ondrej Kupka所指出的,首先评估不等式比较,然后评估布尔值.`或`的优先级低于`!=`; 2)`letter!='O'或letter!='Q'`始终为"True".运算符优先级汇总表:http://docs.python.org/reference/expressions.html#summary (3认同)

tch*_*hap 5

请注意

if letter != 'O' or 'Q':
Run Code Online (Sandbox Code Playgroud)

实际上是

if (letter != 'O') or 'Q':
Run Code Online (Sandbox Code Playgroud)

那可能不是你想要的.

只是一个小测试:

>>> True != False or True
True
>>> (True != False) or True
True
>>> True != (False or True)
False
Run Code Online (Sandbox Code Playgroud)

注意:这意味着顶部标记的答案不正确,字母不与O或Q的结果进行比较......