Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:使用异常进行迭代(初学者)_Python_Iteration - Fatal编程技术网

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

Python:使用异常进行迭代(初学者),python,iteration,Python,Iteration,我只是想知道为什么这样不行 (我试着从一本书中给这些小鸭取名字:杰克,卡克,拉克,麦克,纳克,哇克,帕克,嘎克)注:嘎克和哇克有一个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

我只是想知道为什么这样不行 (我试着从一本书中给这些小鸭取名字:杰克,卡克,拉克,麦克,纳克,哇克,帕克,嘎克)注:嘎克和哇克有一个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
你的意思可能是:

if letter != 'O' or letter != 'Q':
你最初陈述的结果

if letter != 'O' or 'Q':

字母
'O'或'Q'
的结果进行比较,这是一个布尔值(准确地说是真的)(因此您可以看出为什么这种比较总是如此)。

Python不是COBOL或其他支持这种语法的语言。首先,我建议你阅读

现在回到你的问题上来,你期望从声明中得到什么

if letter != 'O' or 'Q':
肯定的

if letter != 'O' or letter != 'Q':
有趣的是,Python允许您横向思考。比如你也可以说

letter not in ['O','Q'] 
或者干脆

letter not in 'OQ': #In Python Notation
或者更具表现力,比如

if all(letter != x for x in 'OQ'):
只需将上述语法和用法与您的进行比较

当你写信的时候

if letter != 'O' or 'Q':
在Python中,应将其编写为

if letter not in 'OQ':
甚至可能是

if all(letter != x for x in 'OQ'):
请注意

if letter != 'O' or 'Q':
事实上

if (letter != 'O') or 'Q':
那可能不是你想要的

只需在上面进行一个小测试:

>>> True != False or True
True
>>> (True != False) or True
True
>>> True != (False or True)
False

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

那么,当字母为O或Q时,如何将其修正为在前缀和后缀之间添加“u”?@30trix:将
更改为
。或者,如果字母不在“OQ”中,您可以使用
;我想,无论你觉得哪个更清楚,这个答案都有两个问题:1)正如@Ondrej Kupka所指出的,首先计算不等式比较,然后是布尔比较<代码>或
的优先级低于
=;2) 
字母!='还是字母!='Q'
始终为
。运算符优先级汇总表:我稍微调整了几个示例,以便它们能够实际工作。这与异常有什么关系?