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 函数
如果使用纯 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)