在Python中如何使用此IF语句不起作用,但这个ELIF可以。

时间:2017-10-12 15:41:28

标签: python if-statement

一切都适用于这个:

    if propRiskElem.text == 'High Risk Zone A':
        propRiskElem.text = """<CLR red = "255" green = "0" blue = "0">High Risk Zone A</CLR>"""
    elif propRiskElem.text == 'High Risk Zone AE':
        propRiskElem.text = """<CLR red = "255" green = "0" blue = "0">High Risk Zone AE</CLR>"""
    elif propRiskElem.text == 'Low Risk':
        propRiskElem.text = """<CLR red = "0" green = "128" blue = "0">Low Risk</CLR>"""
    else:
        propRiskElem.text = """<CLR red = "255" green = "165" blue = "0">Moderate Risk</CLR>""" 

    arcpy.RefreshActiveView()

但是对于这个版本,前两个ifs中的所有内容都被推送到了else:

    if propRiskElem.text == 'High Risk Zone A':
        propRiskElem.text = """<CLR red = "255" green = "0" blue = "0">High Risk Zone A</CLR>"""
    if propRiskElem.text == 'High Risk Zone AE':
        propRiskElem.text = """<CLR red = "255" green = "0" blue = "0">High Risk Zone AE</CLR>"""
    if propRiskElem.text == 'Low Risk':
        propRiskElem.text = """<CLR red = "0" green = "128" blue = "0">Low Risk</CLR>"""
    else:
        propRiskElem.text = """<CLR red = "255" green = "165" blue = "0">Moderate Risk</CLR>""" 

    arcpy.RefreshActiveView()

对我有点刺激,但至少第一个有效。我试图理解为什么有时候我需要使用elif,有时我不会。谢谢。

4 个答案:

答案 0 :(得分:0)

在您的第二个代码块中,如果{且仅当{}} elsepropRiskElem.text == 'Low Risk',则始终会触发False,这就是原因。

如果您的所有elseif都是elif

,则在您的第一个屏蔽上,False会被触发

答案 1 :(得分:0)

在你的第二个例子中(没有elif)所有3个if条件将一直被检查,而else只与最后一个if相关联。 如果前2个检查中的任何一个匹配,那么第3个肯定会失败并且将采取其他行动。

答案 2 :(得分:0)

你的第二个代码显然不起作用,因为

  

如果:

     

'做什么'

     

如果:

     

'做什么'

     

如果:

     

'做什么'

     

否则:

     

'做别的事'

请注意,如果你的if语句为false,它甚至不会进入下一组if语句,只是直接命中else语句。

另一方面

  

如果:

'do-something' 
     

的elif:

'do-something' 
     

否则:

'do something else'

如果你的if出错了,接下来会检查if-else并尝试检查是否必须验证,如果错误的话最终会转到其他地方。

答案 3 :(得分:0)

使用这样的字典:

risks = {'High Risk Zone A': """<CLR red = "255" green = "0" blue = "0">High Risk Zone A</CLR>""",
    'High Risk Zone AE': """<CLR red = "255" green = "0" blue = "0">High Risk Zone AE</CLR>""",
    'Low Risk': """<CLR red = "0" green = "128" blue = "0">Low Risk</CLR>""" }

此功能从dict

中读取
def transform_text(text):
    return risks.get(text,"""<CLR red = "255" green = "165" blue = "0">Moderate Risk</CLR>""")

像这样调用函数:

propRiskElem.text = transform_text(propRiskElem.text)