为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕妹3146593 2021-08-05 18:19:03
我在试图找出我正在编写的程序的代码时遇到了麻烦。我得到了一个格式如下的文件:student_firstnamestudent_lastnamestudent_numberassignment_markmidterm_markexam_gradefinal_mark这是一个示例:MarilynMalone    136238887270EstherMulcahy194563254591WilliamGray110031333862我试图找到一种方法来返回所有学生的最高和最低 final_mark。到目前为止我所做的是:infile = open(fileName, "r")myList = []name = infile.readline().strip()passingGrades = 0failingGrades = 0avGrade = 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: 9Number of fails: 1Average final grade: 64.55The Highest Grade: 79.5 Patty MarshallThe Lowest Grade: 79.5 Patty Marshall任何帮助深表感谢!
查看完整描述

2 回答

?
慕妹3242003

TA贡献1824条经验 获得超6个赞

每次您阅读一个新学生时,您都将highestGrade和'重置'lowestGrade为其初始值(分别为0和99)。


while name != '':

     # stuff that happens for each 'name'

    highestGrade = [0, 'studentName']

    lowestGrade = [99, 'studentName']


    # ... do stuff ...


    # read new name

    name = infile.readline().strip()

通过在循环之外初始化这些值来轻松解决此问题。


highestGrade = [0, 'studentName']

lowestGrade = [99, 'studentName']


while name != '':

     # stuff that happens for each 'name'

此外,您的lowGrade方法不必要地复杂和冗余。不要从列表中删除项目然后添加新项目,只需创建一个新列表。事实上, atuple比 a 更合适list,尽管两者都可以。


lowestGrade = (99, 'studentName')


def lowGrade(x):

    if x < lowestGrade[0]:

        lowestGrade = (x, name, lastName)

您不需要从此方法返回tuple/ list,因为您根本不使用返回的值。


查看完整回答
反对 回复 2021-08-05
?
互换的青春

TA贡献1797条经验 获得超6个赞

每次找到最低等级时,都会从列表中删除 2 个值并添加 3 个。这意味着永远不会删除第一个值。你能检查一下这对你有用吗?


def lowGrade(x):

    if x < lowestGrade[0]:

        lowestGrade.pop(0)

        lowestGrade.pop(0)

        lowestGrade.append(x)

        lowestGrade.append(' '.join(name, lastName))

    return lowestGrade  


查看完整回答
反对 回复 2021-08-05
  • 2 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号