亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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

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

慕妹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 關注
  • 131 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號