假设某人正在制作成绩系统,并且他们有一本字典,其中每个成绩字母为值,百分比为关键字。你怎么能选择一个值,如果你把你的密钥设为75%并且你希望它打印“C”,但如果输入74%或79%,它仍会打印“C”。
答案 0 :(得分:4)
我会使用类似的东西:
d = {10:'A', 9:'A', 8:'B', 7:'C', 6:'D', 5:'F', 4:'F', 3:'F', 2:'F', 1:'F', 0:'F'}
print d[int(95.0/10)] #same as `d[95//10]`.
如果您不喜欢所有打字,可以将您的词典初始化为:
d = dict(zip(range(10,-1,-1),'AABCDFFFFFF'))
你的建议的问题是你可能最终会使用浮点数作为键,并且由于浮点运算的缺点,将它们用作字典键非常困难。这个映射浮动到整数,然后将这些整数用作字典中的键,它更清晰。
如果你愿意,你甚至可以更聪明一点:
class GradeBook(dict):
def __getitem__(self,key):
return dict.__getitem__(self,key//10)
def __missing__(self,key):
if key > 9:
return 'A'
elif key < 5:
return 'F'
d = GradeBook(zip(range(5,10),'FDCBA'))
print d[100]
print d[45]
print d[120]
print d[45.2]
print d[72.8]
答案 1 :(得分:4)
Livingston博士,我推测。
不,但实际上,这不是字典的工作原理。字典将值映射到键。您正在寻找的是一个将值转换为字母的函数。
def grade_value(grade):
if grade == 100:
return "A is for Awesome!"
if grade > 50:
return "F is for FAILURE!!!"
好的,所以这不是一个实际的例子。但是,我希望你能适应这一点,这对你有用。
答案 2 :(得分:1)
我会使用numpy并定义bin。分类数据是一个常见问题。
import numpy as NP
grades = NP.random.randint(0, 100, 30)
bins = NP.array([0., 20., 40., 60., 80., 100.])
# d is an index array holding the bin id for each point in A
d = NP.digitize(grades, bins)
cat = ['A','B','C','D','E']
g = [cat[i-1] for i in d]
print grades,'\n'
print bins,'\n'
print g,'\n'
'''
output
[80 75 65 2 41 79 49 64 68 18 88 0 60 90 79 96 42 0 43 8 7 36 96 22 96
18 17 80 54 34]
[ 0. 20. 40. 60. 80. 100.]
['E', 'D', 'D', 'A', 'C', 'D', 'C', 'D', 'D', 'A', 'E', 'A', 'D', 'E', 'D', 'E'\
, 'C', 'A', 'C', 'A', 'A', 'B', 'E', 'B', 'E', 'A', 'A', 'E', 'C', 'B']
'''
答案 3 :(得分:1)
我建议使用包含grade, score
-pairs的元组列表,因为这样可以自由指定百分比分数如何映射到成绩:
grades = [
('A', 90),
('B', 80),
('C', 70),
('D', 60),
('F', None)
]
def get_grade(score):
return [grade for grade, grade_score in grades if score>=grade_score][0]
用法:
print get_grade(45)
答案 4 :(得分:0)
grades = {60: 'F', 70: 'D', 80: 'C', 90: 'B', 100: 'A'}
def get_grade(percent):
for k in sorted(grades):
if k >= percent:
return grades[k]
if __name__ == '__main__':
print get_grade(50)
print get_grade(60)
print get_grade(71)
print get_grade(97)
在这种情况下,等级将对应于大于或等于百分比的最低键。