我确信这有一个非常简单的答案,但在搜索了一段时间后我找不到它.
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.
有没有简单的方法让代码工作,或者我必须使用对我有用的冗长方式?
使用以下解决方案之一来实现该条件:
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您可以在语言参考中找到有关如何工作的文档。