Python等级分布函数,计算和打印等级出现的次数
我正在使用以下代码创建成绩分布函数:Python等级分布函数,计算和打印等级出现的次数,python,function,Python,Function,我正在使用以下代码创建成绩分布函数: 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:
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)
我正在使用一个grades.txt文件,其中包含所有的成绩,我需要一种方法来计算该文本文件中出现成绩的次数,并打印该数字,如下所示:
distribution('grades.txt')
6 students got A
2 students got A-
3 students got B+
2 students got B
2 students got B-
4 students got C
1 student got C-
2 students got F
但目前它只打印以下内容:
students got A
students got A-
students got B+
students got B
students got B-
students got C
students got C-
students got F
My grades.txt文件包括:
A A- C F C C B- B A A A- B B+ B+ B+ C C- B- A A A F
使用:
您可以为此使用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']
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)
请注意,我删除了要拆分的参数,因此它将删除所有空白,而不仅仅是空格。或者,解决方案:
fin = open(grades,'r')
grades_given = fin.readline().split()
fin.close()
pd.Series(grades_given).value_counts().reset_index(name='cnt').\
apply(lambda x: "{cnt} students got {grade}".format(cnt=x['cnt'],
grade=x['index']),axis=1)
0 6 students got A
1 4 students got C
2 3 students got B+
3 2 students got A-
4 2 students got B-
5 2 students got F
6 2 students got B
7 1 students got C-
你需要提供你的成绩档案的样本。很抱歉,我会在我的问题中添加这个。你为什么不想使用这些集合?这是更快,更简单,更少的代码。太好了,我喜欢你的答案,因为我更愿意使用这个方法而不是集合方法,非常感谢。你为什么不想使用集合呢?这是更快、更简单和更少的代码。啊,对不起,我想在问题下发布,而不是你的答案^^^没关系。
fin = open(grades,'r')
grades_given = fin.readline().split()
fin.close()
pd.Series(grades_given).value_counts().reset_index(name='cnt').\
apply(lambda x: "{cnt} students got {grade}".format(cnt=x['cnt'],
grade=x['index']),axis=1)
0 6 students got A
1 4 students got C
2 3 students got B+
3 2 students got A-
4 2 students got B-
5 2 students got F
6 2 students got B
7 1 students got C-