python数字排序_python – 按数字排序字母表

def make_gradebook():

return []

def make_module_info(module, grade):

module_info = (module,grade)

return module_info

def get_module(module_info):

return module_info[0]

def get_grade(module_info):

return module_info[1]

def get_level(module_info):

for i in module_info[0]:

if str.isdigit(i):

return i

def add_grade(gradebook, module_grade):

gradebook.append(module_grade)

return gradebook

def sort_by_module(gradebook):

gradebook.sort(key=lambda gradeb: gradeb[0])

return gradebook

def sort_by_level(gradebook):

gradebook.sort(key=lambda gradeb: get_level(gradeb))

return gradebook

def grade_to_numeric_marks(grade):

for i in grade:

if i[0] == 'A':

if i[1] == '+':

return 90

elif i[1] == '-':

return 80

else:

return 75

elif i[0] == 'B':

if i[1] == '+':

return 70

elif i[1] == '-':

return 65

else:

return 60

else:

if i[1] == '+':

return 55

elif i[1] == '-':

return 50

else:

return 46

return grade.sort()

def sort_by_grade(gradebook):

gradebook.sort(key=lambda gradeb: grade_to_numeric_marks(gradeb))

return gradebook

### for testing ###

gb = make_gradebook()

cs1010s = make_module_info('CS1010S', 'A+')

cs2020 = make_module_info('CS2020', 'A')

ma1101r = make_module_info('MA1101R', 'C')

ssa1207 = make_module_info('SSA1207', 'B+')

cs4247 = make_module_info('CS4247', 'A+')

ea5001 = make_module_info('EA5001', 'B')

add_grade(gb, cs1010s)

add_grade(gb, cs2020)

add_grade(gb, ma1101r)

add_grade(gb, ssa1207)

sort_by_grade(成绩簿):返回按模块等级从高到低排序的成绩簿的新副本.确保’A’出现在’A’之前

我使用了grade_to_numeric_marks(等级):作为辅助函数,但我仍然无法得到我想要的输出[(‘CS1010S’,’A’),(‘CS2020′,’A’),(‘SSA1207′ ,’B’),(‘MA1101R’,’C’)]怎么了?

最佳答案

如果您不是使用多个if / elif / else检查,则定义字典grade-> value和sign-value.然后,在关键函数grade_to_numeric_marks中,只需求每个等级的基点和每个符号的点数(/ – 或空).

例如(您可能需要调整每个等级/符号的值):

points = {'A': 80, 'B': 65}

signs = {'+': 10, '-': -5}

def grade_to_numeric_marks(item):

grade = item[1]

return points.get(grade[0], 50) + signs.get(grade[1:], 0)

def sort_by_grade(gradebook):

return sorted(gradebook, key=lambda x: grade_to_numeric_marks(x), reverse=True)

grades = [('CS1010S', 'A+'), ('MA1101R', 'C'), ('SSA1207', 'B+'), ('CS2020', 'A')]

print sort_by_grade(grades)

打印:

[('CS1010S', 'A+'), ('CS2020', 'A'), ('SSA1207', 'B+'), ('MA1101R', 'C')]

或者,正如@clutton在评论中提到的那样,只定义一个具有映射等级的字典:

{'A+': 95, 'A': 90 ... }

然后,您可以简化排序:

points = {'A+': 95, 'A': 90, 'B+': 70, 'B': 65, 'C+': 55, 'C': 50} # need to define all of the possible grades

grades = [('CS1010S', 'A+'), ('MA1101R', 'C'), ('SSA1207', 'B+'), ('CS2020', 'A')]

print sorted(grades, key=lambda x: points.get(x[1]), reverse=True)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值