我正试图完成以下作业,我感到很困惑:
创建一个名为
mark的变量,并将其赋值为65。然后编写一系列if ... elif ... else语句,为一个新变量分配一个分数,使其分数低于50生产“不及格”、从50到59生产“及格”、从60到69生产“成绩”和从70以上生产"Distiction“。
打印分数。
然后再次实现相同的逻辑,但这次不使用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")我不知道从哪里开始避免函数
发布于 2022-11-03 13:53:34
如果使用纯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")也就是说,如果你真的想要一个非如果的解决方案,并且想惹恼你的导师,那你该怎么办:
mark = 65
grades = ['Fail', 'Pass', 'Merit', 'Distinction']
print(f"{mark} is a {grades[sum((mark >= 50, mark >= 60, mark > 69))]}")另一种使用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))}")发布于 2022-11-03 13:53:43
假设列表["Fail", "Pass", "Merit", "Distinction"]。
如果将mark除以10 (不包括余数) (mark // 10),则50-59为5,60-69为6。如果从其中减去4,就会得到正确结果的索引(1表示“及格”,2表示“成绩”,3表示“区分”)。除mark小于40或大于80的情况外。我们可以相应地用min和max来限制索引:
mark = 50
["Fail", "Pass", "Merit", "Distiction"][min(max(mark//10 - 4, 0), 3)]对于一个非常奇怪的任务,这是一个非常奇怪的解决方案。
发布于 2022-11-03 14:00:06
与其他答案略有不同的是,我将索引限制为min/max,并从一个大列表中获得一个值。
grades = ["Fail"]*50 + ["Pass"]*10 + ["Merit"]*10 + ["Distiction"]
for mark in [-100,0,49,50,51,59,60,61,69,70,71,120]:
print(mark,grades[min(len(grades)-1,max(0,mark))])https://stackoverflow.com/questions/74304076
复制相似问题