2013-11-24 69 views
0

我试图用IF来检查一个特定的字符串是否同时匹配几个单词。请输入代码:Python - 检查单词是否与IF语句匹配的单词列表

if shippingDest == "Spain": 
    shippingRegion = "Spain" 
if shippingDest == "Portugal": 
    shippingRegion = "Portugal" 
if shippingDest == ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]: 
    shippingRegion = "Euro1" 
if shippingDest == ["Albania", "Andorra", "Austria", "Belarus", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Faroe Islands", "Finland", "Georgia", "Gibraltar", "Greece", "Hongary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Malta", "Moldova", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Romania", "Russia", "San Marino", "Serbia", "Slovenia", "Svalbard and Jan Mayen", "Sweden", "Switzerland", "Ukraine", "Vatican City State"]: 
    shippingRegion = "Euro2" 
else: 
    shippingRegion = "World" 

以德国为例进行检查时,shippingRegion为Euro1。但是,它将其视为世界。

任何人都可以指出我在正确的方向,看看一个单词是否与一组单词中的任何一个匹配一个IF?

感谢,

回答

1

使用the in operator

if shippingDest == "Spain": 
    shippingRegion = "Spain" 
elif shippingDest == "Portugal": 
    shippingRegion = "Portugal" 
elif shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]: 
    shippingRegion = "Euro1" 
elif shippingDest in ["Albania", "Andorra", "Austria", "Belarus", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Faroe Islands", "Finland", "Georgia", "Gibraltar", "Greece", "Hongary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Malta", "Moldova", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Romania", "Russia", "San Marino", "Serbia", "Slovenia", "Svalbard and Jan Mayen", "Sweden", "Switzerland", "Ukraine", "Vatican City State"]: 
    shippingRegion = "Euro2" 
else: 
    shippingRegion = "World" 

当应用到列表,in运营商检查值是否被包含在列表中。

取而代之,使用a set可能会更好,因为您的值没有排序。设置的语法如下:

{'something', 'something else', 'another thing', '...'} 

它与列表相似,只是此数据结构没有排序。像列表一样,您也可以使用in来检查特定值是否包含在一个集合中。

注:看来你要elif,不if - 使用if使得任何一个国家是不是在Euro2区成为World区域代替,包括西班牙和葡萄牙。

2

您需要使用的elif的和in检查会员,而不是==

if shippingDest == "Spain": 
    shippingRegion = "Spain" 
elif shippingDest == "Portugal": 
    shippingRegion = "Portugal" 
elif shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]: 
    shippingRegion = "Euro1" 
elif shippingDest in ["Albania", "Andorra", "Austria", "Belarus", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Faroe Islands", "Finland", "Georgia", "Gibraltar", "Greece", "Hongary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Malta", "Moldova", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Romania", "Russia", "San Marino", "Serbia", "Slovenia", "Svalbard and Jan Mayen", "Sweden", "Switzerland", "Ukraine", "Vatican City State"]: 
    shippingRegion = "Euro2" 
else: 
    shippingRegion = "World" 

发生了什么事是shippingDest被设置正确,那么失败的最后如果让别人子句执行,导致World

它会更有意义,而且更容易维护,如果你有一个查找表,使用dict

shipping_destinations = { 
    'Portugal': 'Portugal', 
    'France': 'Euro1', 
    'Monaco': 'Euro2', 
    'spain': 'Spain' 
} 

然后,一旦这些上市了,你可以这样做:

ship_to = shipping_destinations.get(country_name, 'World') 

检索目标或将其默认为世界。这样可以节省if语句,如果你有区的电子表格,很容易从填充......

+0

使用和投票超过1回答!谢谢,这提供了一个不同的,更有效的方式来做到这一点,我会研究它。 –

2
if shippingDest == ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]: 
    shippingRegion = "Euro1" 

这不看shippingDest是这些字符串中的一个,而不是检查,如果shippingDest等于该列表

相反,你可以使用:

if shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]: 
    shippingRegion = "Euro1" 

由于结果为假前条件语句,执行else。此外,对于相互排斥的条件,您希望使用elif而不是一系列if语句,然后是其他语句。在你的代码中,else只对应于前面的if

+0

感谢所有快速解答。对开源社区和我所获得的帮助印象深刻。欢呼所有! –

+0

@BrickTop没问题。祝你好运。 –

4

更换==in

if shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]: 

您的代码也将更加有效,如果你更换后先if陈述与elif S,意else if

此外,您可以缩短这样的:

if shippingDest in ("France", "Germany", "Luxembourg", "Belgium", "United Kingdom"): 
    shippingRegion = "Euro1" 
elif shippingDest in ("Albania", "Andorra", "Austria", "Belarus", "Bosnia and Herzegovina", "Bulgaria", "Croatia", "Czech Republic", "Denmark", "Estonia", "Faroe Islands", "Finland", "Georgia", "Gibraltar", "Greece", "Hongary", "Iceland", "Ireland", "Italy", "Latvia", "Liechtenstein", "Lithuania", "Luxembourg", "Macedonia", "Malta", "Moldova", "Monaco", "Montenegro", "Netherlands", "Norway", "Poland", "Romania", "Russia", "San Marino", "Serbia", "Slovenia", "Svalbard and Jan Mayen", "Sweden", "Switzerland", "Ukraine", "Vatican City State"): 
    shippingRegion = "Euro2" 
elif shippingDest in ("Portugal", "Spain"): 
    shippingRegion = shippingDest: 
else: 
    shippingRegion = "World" 

我也把你的名单到元组(更换[]()),因为你并不需要在以后改变他们,所以使他们不变的手段使用更少的内存。

2

要使用关键字elif - 这与其他语言else if类似。

此外,要测试字符串(“德国”)是否在列表中,请使用in关键字而不是==

2

尝试in

if shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]: 
    shippingRegion = "Euro1" 
1

您可以如果只有我能代表IN

if shippingDest in ["France", "Germany", "Luxembourg", "Belgium", "United Kingdom"]: