如何将文本文件中的最高值附加到列表中?

我在试图找出我正在编写的程序的代码时遇到了麻烦。我得到了一个格式如下的文件:


student_firstname

student_lastname

student_number

assignment_mark

midterm_mark

exam_grade

final_mark

这是一个示例:


Marilyn

Malone    

136238

88

72

70

Esther

Mulcahy

194563

25

45

91

William

Gray

110031

33

38

62

我试图找到一种方法来返回所有学生的最高和最低 final_mark。到目前为止我所做的是:


infile = open(fileName, "r")

myList = []

name = infile.readline().strip()


passingGrades = 0

failingGrades = 0

avGrade = 0    


while name != '':

    highestGrade = [0, 'studentName']

    lowestGrade = [99, 'studentName']

    lastName = infile.readline().strip()

    studentNum = infile.readline().strip()

    assignGrade = infile.readline().strip()

    midGrade = infile.readline().strip()

    examGrade = infile.readline().strip()

    averageGrade = ((int(assignGrade) * 0.25) + (int(midGrade) * 0.25) +

                    (int(examGrade) * 0.50)) 


    def lowGrade(x):

        if x < lowestGrade[0]:

            lowestGrade.pop(0)

            lowestGrade.pop(0)

            lowestGrade.append(x)

            lowestGrade.append(name)

            lowestGrade.append(lastName)

        return lowestGrade   


    if averageGrade >= 50 and int(examGrade) >= 50:

        #print(name)

        passingGrades += 1

        avGrade += averageGrade


        if averageGrade > highestGrade[0]:

            highestGrade.pop(0)

            highestGrade.pop(0)

            highestGrade.append(averageGrade)

            highestGrade.append(name)

            highestGrade.append(lastName)

        else:

            pass


    else:

        failingGrades += 1

        avGrade += averageGrade


    lowGrade(averageGrade)


    name = infile.readline().strip()


finalAverage = avGrade / (passingGrades + failingGrades)


highFinal = ' '.join(str(x) for x in highestGrade)

lowFinal = ' '.join(str(x) for x in lowestGrade)

当程序使用其中一个文本文件运行时,我得到:


Number of passes: 9

Number of fails: 1

Average final grade: 64.55

The Highest Grade: 79.5 Patty Marshall

The Lowest Grade: 79.5 Patty Marshall

任何帮助深表感谢!


慕妹3146593
浏览 114回答 2
2回答

慕妹3242003

每次您阅读一个新学生时,您都将highestGrade和'重置'lowestGrade为其初始值(分别为0和99)。while name != '':&nbsp; &nbsp; &nbsp;# stuff that happens for each 'name'&nbsp; &nbsp; highestGrade = [0, 'studentName']&nbsp; &nbsp; lowestGrade = [99, 'studentName']&nbsp; &nbsp; # ... do stuff ...&nbsp; &nbsp; # read new name&nbsp; &nbsp; name = infile.readline().strip()通过在循环之外初始化这些值来轻松解决此问题。highestGrade = [0, 'studentName']lowestGrade = [99, 'studentName']while name != '':&nbsp; &nbsp; &nbsp;# stuff that happens for each 'name'此外,您的lowGrade方法不必要地复杂和冗余。不要从列表中删除项目然后添加新项目,只需创建一个新列表。事实上, atuple比 a 更合适list,尽管两者都可以。lowestGrade = (99, 'studentName')def lowGrade(x):&nbsp; &nbsp; if x < lowestGrade[0]:&nbsp; &nbsp; &nbsp; &nbsp; lowestGrade = (x, name, lastName)您不需要从此方法返回tuple/ list,因为您根本不使用返回的值。

互换的青春

每次找到最低等级时,都会从列表中删除 2 个值并添加 3 个。这意味着永远不会删除第一个值。你能检查一下这对你有用吗?def lowGrade(x):&nbsp; &nbsp; if x < lowestGrade[0]:&nbsp; &nbsp; &nbsp; &nbsp; lowestGrade.pop(0)&nbsp; &nbsp; &nbsp; &nbsp; lowestGrade.pop(0)&nbsp; &nbsp; &nbsp; &nbsp; lowestGrade.append(x)&nbsp; &nbsp; &nbsp; &nbsp; lowestGrade.append(' '.join(name, lastName))&nbsp; &nbsp; return lowestGrade&nbsp;&nbsp;
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python