没有 if 语句的 Python 条件语句

Cee*_*Pee 0 python conditional-statements

我正在尝试完成以下作业练习,但我被难住了:

创建一个变量名为mark65。然后编写一系列if ... elif ... else语句为新变量分配一个等级,使得分数低于 50 产生“失败”,从 50 到 59 产生“通过”,从 60 到 69 产生“优秀” ”,70 岁以上则制作“Distition”。

打印成绩。

然后再次实现相同的逻辑,但这次不使用 if 语句。

我能够完成第一部分,但我不确定如何做同样的事情,避免 IF 函数 - 有人可以帮忙吗?

使用 IF 函数,我有以下功能,可以按预期工作:

mark = 50
if mark > 69:
    print(mark, "marks is a Distinction")
elif mark <= 69 and mark >= 60:
    print(mark, "marks is a Merit")
elif mark <= 59 and mark >= 50:
    print(mark, "markss is a Pass")
else:
    print(mark, "marks is a Fail")
Run Code Online (Sandbox Code Playgroud)

我不知道从哪里开始避免 if 函数

moz*_*way 5

如果使用纯 Python,您当前的结构可能是最具可读性和最明确的。请注意,您可以通过仅检查一个边界来简化,因为您的间隔是连续且不重叠的。

mark = 50
if mark > 69:
    print(mark, "marks is a Distinction")
elif mark >= 60:
    print(mark, "marks is a Merit")
elif mark >= 50:
    print(mark, "marks is a Pass")
else:
    print(mark, "marks is a Fail")
Run Code Online (Sandbox Code Playgroud)

也就是说,如果你真的想要一个非如果解决方案并且想惹恼你的老师,那么:

mark = 65
grades = ['Fail', 'Pass', 'Merit', 'Distinction']
print(f"{mark} is a {grades[sum((mark >= 50, mark >= 60, mark > 69))]}")
Run Code Online (Sandbox Code Playgroud)

另一种方法使用itertools.compress

from itertools import compress
grades = ['Distinction', 'Merit', 'Pass', 'Fail']
tests = (mark > 69, mark >= 60, mark >= 50, True)
print(f"{mark} is a {next(compress(grades, tests))}")
Run Code Online (Sandbox Code Playgroud)