在Python中正确形成if ifif else语句

时间:2015-09-16 05:24:45

标签: python

请在python 2.7中找到以下代码块。

for i in range(len(p_routes)):
    if len(p_routes[i]) > 2 :
        if p_routes[i][2] == 'No Backup':   
            K = K + 1
            for z in range(len(p_routes[i])):
                nbup.write(K + 1 , z , p_routes[i][z])

        elif p_routes[i][0][0] == 'E' :
            L = L + 1
            for z in range(len(p_routes[i])):
                ex.write(L, z , (p_routes[i][z])

        elif p_routes[i][0][0] == 'G':
            M = M + 1
            for z in range(len(p_routes[i]))
                gh.write(M ,z, p_routes[i][z])

    else len(p_routes[i]) < 2:
        pass
        print "\nFor some reason. "

好吧,我收到语法错误elif p_routes[i][0][0] == 'G':。我无法弄清楚为什么会出现此错误,因为我认为此行中没有语法错误。

exgh是在此代码块之前创建的两个Excel工作表变量。 p_routes是2度列表的列表。格式类似于p_routes = [['prov1' , 'address1' , 'No Backup'] , ['prov2', 'address2', 'Back1', 'Back2' ]]

您可能已经理解,内部列表长度是可变大小。任何建议将不胜感激。抱歉这个愚蠢的问题,但我做了很多搜索,并以多种方式重新格式化我的if..else块。但每次我收到此错误。

顺便说一下,语法错误是L = L + 1。滑稽!然后我用L = int(L)改变了L的类型。现在,这个错误消失了。

3 个答案:

答案 0 :(得分:1)

备注:

永远不要忘记使用(

关闭)

否则将执行if none of the above case condition was right,因此您不应对else语句

给出任何条件

请勿忘记:

中的if else for.....

您的代码更改:

for i in range(len(p_routes)):
    if len(p_routes[i]) > 2 :
        if p_routes[i][2] == 'No Backup':   
            K = K + 1
            for z in range(len(p_routes[i])):
                nbup.write(K + 1 , z , p_routes[i][z])

        elif p_routes[i][0][0] == 'E' :
            L = L + 1
            for z in range(len(p_routes[i])):
                ex.write(L, z , (p_routes[i][z]))

        elif p_routes[i][0][0] == 'G':
            M = M + 1
            for z in range(len(p_routes[i])):
                gh.write(M ,z, p_routes[i][z])

    else :
        pass
        print "\nFor some reason. "

答案 1 :(得分:1)

Vignesh首先指出,当你忘记关闭括号时,你的错误实际上在前一行

其次,if,elif,else结构的else子句不需要检查。 这是我前一段时间制作的视频,介绍了如何在python linked to relevant time

中进行选择

(可能不相关) 还要记住当前的逻辑,如果:len(p_routes[i])是2,会发生什么?您目前只检查它是否小于2或大于2.

答案 2 :(得分:0)

如果出现语法错误,请务必查看上一行以确保其正确无误。当你错过了结束)时,Python一直在下一行寻找它。

有许多方面可以使代码更清晰。例如,当您可以遍历列表本身时,没有必要继续使用range(len(x))

希望您能找到以下有用的建议:

for route in p_routes:
    length = len(route)

    if length > 2 :
        if route[2] == 'No Backup':   
            K += 1
            for z in range(length):
                nbup.write(K + 1, z, p_routes[i][z])

        elif route[0][0] == 'E':
            L += 1
            for z in range(length):
                ex.write(L, z, (p_routes[i][z]))

        elif route[0][0] == 'G':
            M += 1
            for z in range(length):
                gh.write(M ,z, p_routes[i][z])

    elif length == 2:
        print "It is equal to 2"
    else:
        print "It must be less than 2"

注意,if x > 2后跟else,其他意味着价值为<= 2

还可以按如下方式向变量添加一个:L += 1,这是L = L + 1的简写。