当前位置: 首页 > 面试题库 >

按数字对字母排序

柳镜
2023-03-14
问题内容
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(gradebook):返回该成绩簿的新副本,该副本按模块级别从高到低排序。确保在用作grade_to_numeric_marks(grade):辅助函数的“
A”之前出现“ A +”,但仍然无法获得所需的输出,这是[('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)


 类似资料:
  • 问题内容: myArray = [Step 6, Step 12, Step 5, Step 14, Step 4, Step 11, Step 16, Step 9, Step 3, Step 13, Step 8, Step 2, Step 10, Step 7, Step 1, Step 15] 如何以这种方式在上面对这个数组排序? 我很快使用了此功能,但它是按这种方式排序的 问题答案: 另

  • 我下面的代码不起作用,我也不知道为什么。 它编译得很好,但结果似乎没有排序。

  • 问题内容: 我是Java的新手,正在尝试按字母顺序排列术语的arrayList。(一个术语定义为一个字符和一个整数)(例如 我的代码如下: 为什么这不起作用?以及我该如何完成呢?我的arrayList称为术语,填充有Term类型 问题答案: 您在这行代码中遇到的问题。您的课程不是So 的类型,这两个对象将基于哪个属性或条件方法? 您必须使您的类为Comparable类型。和,根据您的需要覆盖该方法

  • 问题内容: 我得到了一个数组(请参阅下面的数组中的一个对象),我需要使用JavaScript按名字排序。我该怎么做? 问题答案: 假设您有一个数组。您可以使用并传递一个接受两个参数并进行比较的函数(比较器) 它应该返回 如果第一个参数小于第二个参数,则为负数(应在结果数组的第二个参数之前放置) 如果第一个参数较大,则为正数(应放在第二个参数之后) 如果这两个元素相等,则为0。 在我们的情况下,如果

  • 我必须创建一个方法,根据电子邮件按字母顺序排序对象的ArrayList,然后打印排序后的数组。我对它排序有困难的部分。我已经研究过它,并尝试使用,但这对我不起作用。我需要一种叫做比较器的东西,但不知道它是如何工作的。我必须使用这些,或者像气泡排序或插入排序之类的东西可以用于这种事情吗? 这是我目前掌握的代码:

  • 问题内容: 我有这个: 和[电影]数组。如何按名称的字母顺序对数组进行排序?我试过了: 和 但这不起作用,因为我没有访问电影的名称属性。 问题答案: 在传递给的闭包中,比较要排序的属性。像这样: 或以下要绕过案例的案例: 旁注: 通常,只有类型以大写字母开头;我建议使用and ,而不是and 。 例如,在操场上: 将按顺序 Swift5更新

  • 问题内容: 如何获得按字段排序的struct输出? 问题答案: A 是字段的 有序 集合。该包使用反射来获取值的字段和值,并按照定义它们的顺序生成输出。 因此,最简单的解决方案是在已经按字母顺序排列字段的位置声明类型: 如果您不能修改字段的顺序(例如,内存布局很重要),则可以通过为结构类型指定一个方法来实现接口: 所述包检查所传递的值工具,并且如果是的话,调用它的方法,以产生输出。 该解决方案的缺

  • 问题内容: 我在排序包含整数的字符串时遇到问题。如果使用下面的代码,我将进行排序:1some,2some,20some,21some,3some,一些 但是我希望将其排序为:1some,2some,3some,20some,21some,一些 我怎样才能做到这一点? 谢谢! 问题答案: 这是有关如何执行此操作的独立示例(未特别优化): 输出量 说明 该示例使用一个常数来推断数字是否位于的起始位置。