Python评分程序,需要帮助w / Ranging问题

时间:2014-03-28 13:03:58

标签: python range

简单的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

3 个答案:

答案 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'

等....你只需要设置较低的值,真的。