如何在Python中替换许多'if ... elif'语句?

时间:2015-06-28 02:06:06

标签: python python-3.x

我在Python中编写了许多带有'if..elif'语句的代码。我知道代码风格可能被认为是坏的,我想改进它。

num = int(input('please input a number: '))

if num <= 0:
    print('1')
elif 0 < num <= 5:
    print('2')
elif 5 < num <= 10:
    print('3')
elif 10 < num <= 15:
    print('4')
elif 15 < num <= 20:
    print('5')
elif 20 < num <= 25:
    print('6')

我想知道如何用其他解决方案替换这么多'if..elif'语句?

6 个答案:

答案 0 :(得分:8)

你可以这样做:

getAllEtudiant()

print(((num - 1) // 5) + 2) 为20时的示例:

num

在一般情况下......不确定。如果你在谈论完全随意的 if-elif-else构造,那么我会说不,至少不会以一种有助于提高可读性的方式。事实上,我刚才为你的具体例子给出的答案可能甚至没有帮助提高可读性,所以我不确定你在一般情况下对此有多好。

答案 1 :(得分:2)

您可以通过删除每个条件的两个n=4 B <- matrix(rep(0,n*n), n) dimnames(B) <- list(letters[1:n],letters[1:n]) B[lower.tri(B)] <- tsv$value B[upper.tri(B)]=tsv$value B 检查之一来缩短代码,如此

<

答案 2 :(得分:1)

对于这样的简单示例,其中不同的情况适合清晰的模式,最好的事情就像RedRoboHood建议你完全删除条件(稍微修改以支持下限),例如。

print('%s' % max((num - 1) // 5 + 2, 1))

如果你想稍微更一般,并允许不遵循输入模式的print语句,你可以使用python字典:

# what to print if num is less than the number but greater than the previous
mapping = {0:'1', 5:'2', 10:'3', 15:'4', 20:'5', 25:'6'}
# clamp the number to the upper bound of the desired range
clamped_num = 5 * max((num - 1) // 5, -1) + 5
print(mapping[clamped_num] if clamped_num in mapping else 'Bad value')

然而,总会有时候你不能像这样把它煮沸,对于那些我认为如果 - 其他陈述没问题。

答案 3 :(得分:1)

num = int(input('please input a number: '))

if num < 26:
    print(1 + len([i for i in [0, 5, 10, 15, 20, 25] if i < num]))

答案 4 :(得分:1)

bisect库也可以在这种情况下使用,也非常有效。该文档提供了考试等级边界的使用示例。如果使用非线性边界,这种方法会使其更加灵活。

import bisect

def boundaries(num, breakpoints=[0, 5, 10, 15, 20, 25], result='1234567'):
    i = bisect.bisect(breakpoints, num-1)
    return result[i]

num = int(input('please input a number: '))
print(boundaries(num))

请注意,这仅在Python 2.7中进行了测试。

答案 5 :(得分:0)

这是另一种方法:

a = { '1': (range(1,6)), '2': (range(6,11)), '3': (range(11,16)), '4':(range(16,21)), '5':(range(21,26))}
num=int(input('please input a number: '))
b = {k:v for k,v in a.items() if num in v}
c = b.keys()
print c[0]
Python3中的

print(c[0])