我正在尝试建立一个程序,将成绩转换为评分等级。
from bisect import bisect
def grade(score, breakpoints=[-1.4, 1, 3, 5.6, 8.6, 9.6], grades='m''0''2''4''7''t''T'):
i = bisect(breakpoints, score)
for i in grade:
if i == 'm':
grade[i] = -3
if i == '0':
grade[i] = 00
elif i == 't':
grade[i] = 10
elif i == 'T':
grade[i] = 12
return grades[i]
[grade(score) for score in [-2, 3.4, 5.5, 1.2, 11.8, 8.1, 7.3]]
这给了我以下错误:
for i in grade:
TypeError: 'function' object is not iterable
当我在第2行中分配成绩时,我试图直接更改它,但是它不允许我输入包含多个字符(即-3、00、10或12)的值,这就是为什么正在尝试转换成绩后更改值。
谢谢。
答案 0 :(得分:1)
错别字。 应该是“成绩”,而不是“成绩”
答案 1 :(得分:0)
我不能完全理解您要达到的目标,我有一些建议对您有用。首先能够使用HANDLERS,这对您的写作会更好。第二个你在叫什么功能,列出? 看这个例子,它还没有完成,但是你想做什么:
from bisect import bisect
GRADE_HANDLER = {'T': 12, 't': 10, '0': 00, 'm': -3}
def grade(score, breakpoints=[-1.4, 1, 3, 5.6, 8.6, 9.6], grades='m''0''2''4''7''t''T'):
# WHy you use it??? and where?
bisect_value = bisect(breakpoint,score)
# grade is not a list
for i in grades:
grades[i] = GRADE_HANDLER[i]
# what are you returning ??
[grade(score) for score in [-2, 3.4, 5.5, 1.2, 11.8, 8.1, 7.3]]