0

.txtファイルから成績のリストを取得し、その成績の発生をカウントして、その成績を受け取った学生の数を通知するプログラムを作成しようとしています。

リストの形式は1行に1つの成績であるため、6Aの場合は6人の生徒が返されAます。

コードを機能させることができましたが、非常に多くのチェックが実行されており、それを減らす方法があると感じていますが、方法がわかりません。

リストや辞書と関係があるのではないかと思います。

def distribution(filename):
    'string ==> int & string, prints out how many students got a letter grade'
    infile = open(filename,'r')
    grades = infile.read()
    aCount = grades.count('A\n')
    aMinusCount = grades.count('A-\n')
    bCount = grades.count('B\n')
    bMinusCount = grades.count('B-\n')
    cCount = grades.count('C\n')
    cMinusCount = grades.count('C-\n')
    dCount = grades.count('D\n')
    dMinusCount = grades.count('D-\n')
    fCount = grades.count('F')
    print(aCount, 'students got A')
    print(aMinusCount, 'students got A-')
    print(bCount, 'students got B')
    print(bMinusCount, 'students got B-')
    print(cCount, 'students got C')
    print(cMinusCount, 'students got C-')
    if dCount == 0:
        pass
    else:
        print(dCount, 'students got D')
    if dMinusCount == 0:
        pass
    else:
        print(dMinusCount, 'students got D-')
    print(fCount, 'students got F')
4

2 に答える 2

3

collections.Counterこれは、オブジェクトを使用して簡単に実行できます。

import collections
infile = open(filename,'r')
grades = [g.strip() for g in infile.readlines()]
grade_counter = collections.Counter(grades)
for g, n in sorted(grade_counter.items()):
    print n, "students got", g
于 2013-03-04T03:36:48.777 に答える
1

辞書理解の使用:

def distribution(filename):
    'string ==> int & string, prints out how many students got a letter grade'
    infile = open(filename,'r')
    grades = infile.read().split('\n')
    # this creates a list of the grades, without the new-line character
    infile.close()
    possible_grades = ('A', 'A-', 'B', 'B-', 'C', 'C-', 'D', 'D-', 'F')
    gradesDict = {i:grades.count(i) for i in possible_grades}
    for x in gradesDict.keys():
        print(x + ':', gradesDict[x])
于 2013-03-04T03:45:21.830 に答える