Python等级分布函数,统计并打印等级发生的次数

2024-09-27 01:23:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用以下代码创建成绩分布函数:

def distribution(grades):
available_grades = [ 'A+','A','A-','B+','B','B-','C+','C','C-','F']     
fin = open(grades,'r')
gradesList = fin.readline().split(' ')
for c_grade in available_grades:
    if c_grade in gradesList:
        print('students got '+c_grade)

我正在使用成绩.txt包含所有分数的文件,我需要一种方法来计算一个分数在该文本文件中出现的次数,并按如下方式打印该数字:

^{pr2}$

但目前它只打印:

students got A
students got A-
students got B+
students got B
students got B-
students got C
students got C-
students got F

我的成绩.txt文件包括:

A A- C F C C B- B A A A- B B+ B+ B+ C C- B- A A A F

Tags: 文件函数代码intxtdef分数available
3条回答

您可以使用python计数器类来实现这一点。在

from collections import counter

# creates a new Counter object
c = Counter()

# your file contents
lst_grades = "A A- C F C C B- B A A A- B B+ B+ B+ C C- B- A A A F"

# turn lst_grades to a list containing the grades
lst_grades = lst_grades.split(" ")

# printing lst_grades for a better idea what lst_grades looks like now
# lst_grades
# > ['A', 'A-', 'C', 'F', 'C', 'C', 'B-', 'B', 'A', 'A', 'A-', 'B', 'B+',
#    'B+', 'B+', 'C', 'C-', 'B-', 'A', 'A', 'A', 'F']

# call the update method of the counter c
# update takes an iterable (e.g. a list)
# and counts the values inside this iterable
c.update(lst_grades)

# now our counter contains a dictionary with the counted grads
# c
# > Counter({'A': 6, 'C': 4, 'B+': 3, 'B': 2, 'F': 2,
#            'B-': 2, 'A-': 2, 'C-': 1})

# you can simply access every counted entry
# c["A"]
# > 6

使用^{}

def distribution(grades):
    available_grades = ['A+','A','A-','B+','B','B-','C+','C','C-','F']     
    with open(grades, 'r') as fin:
        gradeCounts = collections.Counter(fin.readline().split())
    for grade in available_grades:
        print(gradeCounts[grade], 'students got', grade)

如果您不想使用集合,则应使用以下方法:

def distribution(grades):
    available_grades = [ 'A+','A','A-','B+','B','B-','C+','C','C-','F']
    grade_dict = {}
    for grade in available_grades:
        grade_dict[grade] = 0

    fin = open(grades,'r')
    gradesList = fin.readline().split()
    fin.close()

    for grade in gradesList:
        grade_dict[grade] += 1

    for grade in available_grades:
        print(str(grade_dict[grade]) + ' students got ' + grade)

请注意,我删除了split()的参数,因此它将删除所有空白,而不仅仅是空格。在

相关问题 更多 >

    热门问题