Python语法if语句

时间:2013-11-07 02:57:16

标签: python if-statement

我目前有

seq1 = "--MFA"
seq2= "--MFU"

for i in range(0, len(seq1)):

    if seq1[i] or seq2[i] == '-':

        print  "hi"
    else:
        print "bye"

为什么它打印“hi”5次(即使seq1 [i]和seq1 [i]是M,F,A / U)。我一开始认为这是一个正则表达式问题,但即使逃避连字符也会产生相同的结果。

3 个答案:

答案 0 :(得分:3)

if seq1[i] or seq2[i] == '-':

意思是:

if (seq1[i]) or (seq2[i] == '-'):

如果seq[i]的值为True(即,如果bool(seq1[i]) == True),则条件语句将立即为真,因为or。使用or运算符,如果一边是True,则条件运行。

请注意,bool(seq1[i]) 始终为True ,因为任何长度的字符串都被视为True。

因此,'hi'被打印出来。

答案 1 :(得分:2)

if seq1[i] or seq2[i] == '-':

此条件表示如果seq1[i]为真或seq2[i] = '-'执行以下操作。在那种情况下,seq1 [i]为5次。然后,它打印'hi'5次。

答案 2 :(得分:1)

您可以在这里使用多种替代方案

if '-' in (seq1[i], seq2[i]):

简洁,但读起来很有趣。

if seq1[i] == '-' or seq2[i] == '-':

感觉更自然

将序列循环在一起的更简洁方法是使用zip

for i, j in zip(seq1, seq2):

    if i == '-' or j == '-':
        print  "hi"
    else:
        print "bye"

如果您将更多序列循环在一起,扩展比较的一个好方法是使用any

for item in zip(seq1, seq2, seq3, seq4, ...):
    if any(i == '-' for i in item):
        print  "hi"
    else:
        print "bye"