Python:如何运行所有elif标准?

时间:2017-03-10 00:26:58

标签: python

我认为这可能是一个非常初学者的问题。但我只是不知道如何解决它。 (请不要给我减去,我试图搜索,但没有找到。)

我的代码:

num = 5     
if num == 3:
    print 'boss'        
elif num == 2:
    print 'user2'
elif num == 5:
    print 'user5'
elif num == 1:
    print 'worker'
elif num > 0:  #I also want to print this one. Because num is bigger than 0
    print 'error'
else:
    print 'roadman'

期望的结果是:

user5
error

但它只显示结果:

user5

我的问题:如何确保{strong>所有 elif标准被认为是?

2 个答案:

答案 0 :(得分:2)

这样的if-elif-else结构是相互排斥的,并且不允许在条件中使用,因此只需使'error'语句具有自己的if

num = 5     
if num == 3:
    print 'boss'        
elif num == 2:
    print 'user2'
elif num == 5:
    print 'user5'
elif num == 1:
    print 'worker'
else:
    print 'roadman'

if num > 0:
    print 'error'

答案 1 :(得分:2)

您的问题询问如何评估所有elif语句。正如@ juanpa.arrivillaga和@m_callens所描述的那样,答案是将它们转换为if语句。

在评论中,你会问是否有更好的方法,我认为更好的方法是使用键值映射。根据您的问题,此映射可能是字典:

mapping = {1: 'worker',
           2: 'user2',
           3: 'boss',
           5: 'user5'}

然后我们可以用一个字典查询替换大多数if语句:

num = 5
print mapping[num]

但是,如果字典中不存在密钥,则会引发KeyError。我们可以通过try-except块解决这个问题。 try部分将尝试执行该块中的任何内容。如果遇到KeyError(即字典中不存在该键),它将执行except块中的任何内容。这也照顾了你想要显示“roadman”的情况。

try:
    print(mapping[num])
except KeyError:
    print("roadman")

如果您希望num > 0显示“错误”,我会使用if语句。把所有这些放在一起,你有

mapping = {1: 'worker',
           2: 'user2',
           3: 'boss',
           5: 'user5'}

num = 5

if num > 0:
    print("error")

try:
    print(mapping[num])
except KeyError:
    print("roadman")

输出结果为:

error
user5