首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不带if语句的Python条件词

不带if语句的Python条件词
EN

Stack Overflow用户
提问于 2022-11-03 13:42:05
回答 4查看 96关注 0票数 0

我正试图完成以下作业,我感到很困惑:

创建一个名为mark的变量,并将其赋值为65。然后编写一系列if ... elif ... else语句,为一个新变量分配一个分数,使其分数低于50生产“不及格”、从50到59生产“及格”、从60到69生产“成绩”和从70以上生产"Distiction“。

打印分数。

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

我能够完成第一部分,但我不确定如何做同样的,避免如果功能-谁能帮助?

使用IF函数,我有以下功能,如预期的那样工作:

代码语言:javascript
复制
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")

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

EN

回答 4

Stack Overflow用户

发布于 2022-11-03 13:53:34

如果使用纯Python,当前的结构可能是最易读和最显式的。注意,您可以简化,只检查一个界限,因为您的间隔是连续的和不重叠的。

代码语言:javascript
复制
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")

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

代码语言:javascript
复制
mark = 65
grades = ['Fail', 'Pass', 'Merit', 'Distinction']
print(f"{mark} is a {grades[sum((mark >= 50, mark >= 60, mark > 69))]}")

另一种使用itertools.compress的方法

代码语言:javascript
复制
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))}")
票数 5
EN

Stack Overflow用户

发布于 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的情况外。我们可以相应地用minmax来限制索引:

代码语言:javascript
复制
mark = 50
["Fail", "Pass", "Merit", "Distiction"][min(max(mark//10 - 4, 0), 3)]

对于一个非常奇怪的任务,这是一个非常奇怪的解决方案。

票数 3
EN

Stack Overflow用户

发布于 2022-11-03 14:00:06

与其他答案略有不同的是,我将索引限制为min/max,并从一个大列表中获得一个值。

代码语言:javascript
复制
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))])
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74304076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档