if-else链是否有更短的方式?

Ter*_*ado 4 python python-3.x

if (80 <= m <= 100):
    g = "A"
elif (70 <= m < 80):
    g = "B"
elif (60 <= m < 70):
    g = "C"
elif (50 <= m < 60):
    g = "D"
elif (m < 50):
    g = "U"
Run Code Online (Sandbox Code Playgroud)

这基本上是一个等级测量代码,它接收值m,意思是标记,并获得等级g.为了同一目的,是否有更短的不一定更多的pythonic方式?

提前致谢.

sch*_*ggl 7

首先,您可以通过删除其中一个边界来简化:

if m >= 80:
    g = "A"
elif m >= 70:
    g = "B"
elif m >= 60:
    g = "C"
elif m >= 50:
    g = "D"
else:  # default catch-all
    g = "U"
Run Code Online (Sandbox Code Playgroud)

其次,您可以通过循环捕获进程的重复性(默认情况下为for-else构造提供选项):

# iterator: ('A', 80) -> ('B', 70) -> ...
for grade, score in zip('ABCD', (80, 70, 60, 50)):
    if m >= score:
        g = grade
        break
else:  # executed if for-loop isn't 'break'-ed out of
    g = 'U'
Run Code Online (Sandbox Code Playgroud)