Python:使用异常进行迭代(初学者)
我只是想知道为什么这样不行 (我试着从一本书中给这些小鸭取名字:杰克,卡克,拉克,麦克,纳克,哇克,帕克,嘎克)注:嘎克和哇克有一个UPython:使用异常进行迭代(初学者),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
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'
始终为真
。运算符优先级汇总表:我稍微调整了几个示例,以便它们能够实际工作。这与异常有什么关系?