简单的python程序,它接受浮点值并返回相应的等级。 我在测试成绩方面遇到了麻烦,因此我们会给出正确的成绩。这是我的问题......? (我宁愿不使用'和'条件)
def grade(mark):
if mark >= 80:
letter = 'A'
elif 65 >= mark <= 79:
letter = 'B'
elif 50 >= mark <= 64:
letter = 'C'
else:
letter = 'F'
return letter
答案 0 :(得分:5)
65 >= mark <= 79
是:
65 >= mark and mark <= 79
所有小于65的值也小于或等于79,但实际上找不到您正在寻找的范围内的值。
你可能意味着65 <= mark <= 79
(正如评论中所指出的,如果mark
是一个浮点数,即使纠正此错误也会使您的函数不连续,因为有一些有效值,例如79.5,您不会考虑。)< / p>
答案 1 :(得分:5)
提前返回超过限制的值,因此无需再次测试该上限:
def grade(mark):
if mark >= 80:
return 'A'
if mark >= 65:
return 'B'
if mark >= 50:
return 'C'
return 'F'
你的链式比较是错误的下限;您正在测试mark
小于是否超过65;反转测试:
elif 65 <= mark <= 79:
letter = 'B'
elif 50 <= mark <= 64:
letter = 'C'
最有效的方法是使用bisect.bisect()
和两个列表:
import bisect
def grade(mark):
grades = ['F', 'C', 'B', 'A']
marks = [50, 65, 80]
return grades[bisect.bisect(marks, mark)]
bisect.bisect()
返回将插入mark
的索引; 0-49将插入索引0(转换为'F'
),50-64将插入索引1('C'
)等。
答案 2 :(得分:0)
我很困惑 - 你说你正在使用花车......例如,你想用79.5做什么?
if mark >= 80:
letter = 'A'
elif mark > = 70:
letter = 'B'
等....你只需要设置较低的值,真的。