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

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

當我循環遍歷字典時缺少項目

當我循環遍歷字典時缺少項目

白板的微信 2023-07-27 10:06:22
我嘗試創建一個學生類對象,并收集一些數據并顯示它:class Student:     subjects = []    grades = []      d = {}    def __init__(self, name, id):            self.name = name            self.id = id     def addGrade(self, subject, grade):        self.subjects.append(subject)        self.grades.append(grade)    def showGrades(self):        self.d = dict(zip(self.subjects, self.grades))        for subject in self.d:            return subject + ' : ' + str(self.d[subject])當我嘗試添加值時:    stu =Student('Zaki', 23)    stu.addGrade('Math',90)    stu.addGrade('Physicis',95)    stu.addGrade('English',100)    print(stu.showGrades())輸出結果為 Math : 90并且它忽略了其他值!
查看完整描述

2 回答

?
牧羊人nacy

TA貢獻1862條經驗 獲得超7個贊

您遇到的具體問題是您將(無條件)放入循環return中for(因此它在循環的第一次迭代中返回),而不是例如構建一個列表并在循環后返回該列表。


然而,除此之外,您的代碼還修改了類變量,如果您創建另一個實例并stu2 = Student(...)發現第二個學生已經有了科目和成績,您會感到驚訝。


要解決第二個問題,您需要做的是將subjects和grades改為實例變量 - 并在__init__. 您可以對類變量執行類似的操作d,但看起來它可能僅在內部使用showGrades,并且最好用該方法(函數)中的局部變量替換。


把這些放在一起,你可能會得到這樣的東西:


class Student: 


    def __init__(self, name, id):

            self.name = name

            self.id = id 

            self.subjects = []

            self.grades = []  



    def addGrade(self, subject, grade):

        self.subjects.append(subject)

        self.grades.append(grade)



    def showGrades(self):

        d = dict(zip(self.subjects, self.grades))

        grades = []

        for subject in d:

            grades.append(subject + ' : ' + str(d[subject]))

        return grades


stu =Student('Zaki', 23)

stu.addGrade('Math',90)

stu.addGrade('Physics',95)

stu.addGrade('English',100)

print(stu.showGrades())  # ['Math : 90', 'Physics : 95', 'English : 100']


stu2 = Student("Juan", 24)

print(stu2.showGrades())  # []


查看完整回答
反對 回復 2023-07-27
?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

您期望 return subject + ' : ' + str(self.d[subject])運行showGrades三次,但是當它到達第一次返回時,它就會離開循環。因此,將您的showGrades代碼更改為:


def showGrades(self):

    self.d = dict(zip(self.subjects, self.grades))

    ret = []

    for subject in self.d:

        ret.append(subject + ' : ' + str(self.d[subject]))

    return ret # this will return list containing [subject : grade]

輸出:


['Math : 90', 'Physicis : 95', 'English : 100']


查看完整回答
反對 回復 2023-07-27
  • 2 回答
  • 0 關注
  • 168 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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