首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何找到不同类之间的最大点(计数排序)

如何找到不同类之间的最大点(计数排序)
EN

Stack Overflow用户
提问于 2019-05-29 20:06:08
回答 2查看 47关注 0票数 0

我在学习计数和排序。我对这个任务有一个问题:

一些人参加数学竞赛。获胜者是达到最大分数的人(获胜者按每个等级分配)。找到每个等级达到的最大点数的值。每个年级有一人或更多人参加

输入

关于文件中所有参与者的信息(例如,‘input.txt’),其中每一行都应该具有这样的结构: family_name名称等级结果

姓氏和姓名应写成字符串,成绩范围在10到12之间,成绩(分数)在0到100之间。

输出

打印三个数字:10年级、11年级和12年级获胜者的分数。内部文件应该是这样写的:

open('input.txt','r',encoding='utf8')

我已经解决了这个任务,但是我没有使用计数排序。下面是完整的代码

def listAverage(list): 
    sum = 0 
    for i in list: 
        sum += i
    return sum / len(list) 
classes = []
inFile = open('input.txt', 'r', encoding='utf-8') 
for line in inFile: 
    grade, mark = line.split()[2:] 
    if grade in classes: 
        classes[grade].append(int(mark)) 
    else: 
        classes[grade] = [int(mark)] 
for i in range(10, 13): 
    print(listAverage(classes[str(i)]), end=' ') 
EN

回答 2

Stack Overflow用户

发布于 2019-05-29 21:52:49

以下是一些观察结果:

  • 不要使用隐藏内置名称的变量;例如,不应该使用list,而应该使用num_list或类似的名称。
  • 您应该始终关闭您打开的文件。我建议使用上下文管理器( this question)

)来避免忘记关闭文件。我建议使用一个较短的版本,即calculate

  • sum(num_list) / len(num_list) (如果列表为空则产生错误;另请参阅list

以下是代码的修改版本,用于解决一些问题;我还包含了一些建议(例如collections.defaultdict)。

也许这对你有帮助(也可能没有)。

import collections
marks_per_grade = collections.defaultdict(list)

with open('input.txt', 'r', encoding='utf-8') as f:
    for line in f:
        line = line.strip()             # remove newline from the end of the line

        if len(line) > 0:               # assure that the line is not empty
            last_name, first_name, grade, mark = line.split()

            # because it is a 'collections.defaultdict', if the grade does not
            # yet exist, then it will add it with an empty list as initial value
            marks_per_grade[int(grade)].append(int(mark))

for grade, mark_list in sorted(marks_per_grade.items()):
    # this will raise error if the list is empty
    avg_mark = sum(mark_list) / len(mark_list)

    print(
        '{:3d} {:3d} {:5.1f} {}'.format(
            grade,
            max(mark_list),
            avg_mark,
            mark_list))
票数 0
EN

Stack Overflow用户

发布于 2019-06-02 20:46:44

data = {10: [], 11: [], 12: []}
xxx = open('input.txt', 'r', encoding='utf8')
with xxx as file:
    for lines in file:

        line = lines.strip()

        firstName, name, grade, mark = line.split()

        data[int(grade)].append(int(mark))

print(data)

for grade in data:
    print(sum(data[grade])/len(data[grade]))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56360255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档