简单的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
Run Code Online (Sandbox Code Playgroud)
65 >= mark <= 79 是简写:
65 >= mark and mark <= 79
Run Code Online (Sandbox Code Playgroud)
小于65的所有值也小于或等于79,但这实际上不会找到您正在寻找的范围内的值.
你可能意味着 65 <= mark <= 79
(正如评论中指出的那样,如果mark是一个浮点数,即使纠正此错误也会使您的函数不连续,因为有一些有效值,例如79.5,您没有考虑到这一点.)
超过限制值的早期返回,因此无需再次测试该上限:
def grade(mark):
if mark >= 80:
return 'A'
if mark >= 65:
return 'B'
if mark >= 50:
return 'C'
return 'F'
Run Code Online (Sandbox Code Playgroud)
你的链式比较是错误的下限; 您正在测试,如果mark是小比65; 反转测试:
elif 65 <= mark <= 79:
letter = 'B'
elif 50 <= mark <= 64:
letter = 'C'
Run Code Online (Sandbox Code Playgroud)
最有效的方法是使用bisect.bisect()和两个列表:
import bisect
def grade(mark):
grades = ['F', 'C', 'B', 'A']
marks = [50, 65, 80]
return grades[bisect.bisect(marks, mark)]
Run Code Online (Sandbox Code Playgroud)
bisect.bisect()返回mark将插入的索引; 0-49将插入索引0(转换为'F'),50-64将插入索引1('C')等.