在if语句条件中使用"或"

Fiv*_*ive 5 python

我确信这有一个非常简单的答案,但在搜索了一段时间后我找不到它.

prefixes = "JKLMNOPQ"
suffix = "ack"

for letter in prefixes:
    if letter == "Q" or letter == "O":
        print letter + "u" + suffix
    else:
        print letter + suffix
Run Code Online (Sandbox Code Playgroud)

上面的代码工作得很好,if语句的条件似乎有点啰嗦,所以我试过:

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

这是较短但不起作用.我发现它不起作用,因为"O"是一个布尔表达式,它总是为True,并且它不考虑"或"左侧的任何内容.

我尝试将括号括在它周围:

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

但那只匹配Q而不是O.

有没有简单的方法让代码工作,或者我必须使用对我有用的冗长方式?

gec*_*cco 8

使用以下解决方案之一来实现该条件:

  • 列表: if letter in ['Q', 'O']
  • 元组: if letter in ('Q', 'O')
  • 串: if letter in 'QO'

更新:为了完整性:Regexp :( re.match('[OQ]', letter)复制自Paul Hankings的回答 (如果您认为regexp是解决方案,您应该投票给他的答案) )


小智 4

您可以使用letter in 'OQ're.match('[OQ]', letter)

更彻底地说,我可能会定义一串应该带有“u”的前缀。

prefixes = 'JKLMNOPQ'
prefixes_taking_u = 'OQ'
suffix = 'ack'
for p in prefixes:
    u_part = 'u' if p in prefixes_taking_u else ''
    print p + u_part + suffix
Run Code Online (Sandbox Code Playgroud)

在您的代码中,letter == ("O" or "Q")首先评估("O" or "Q")(“O”不为假,因此结果为“O”),因此这与letter == "O".

您的其他尝试letter == "O" or "Q"首先进行评估letter == "O",如果为 True,则给出答案 True,否则给出答案“Q”。

or您可以在语言参考中找到有关如何工作的文档