第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

當(dāng)我循環(huán)遍歷字典時缺少項(xiàng)目

當(dāng)我循環(huán)遍歷字典時缺少項(xiàng)目

白板的微信 2023-07-27 10:06:22
我嘗試創(chuàng)建一個學(xué)生類對象,并收集一些數(shù)據(jù)并顯示它: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])當(dāng)我嘗試添加值時:    stu =Student('Zaki', 23)    stu.addGrade('Math',90)    stu.addGrade('Physicis',95)    stu.addGrade('English',100)    print(stu.showGrades())輸出結(jié)果為 Math : 90并且它忽略了其他值!
查看完整描述

2 回答

?
牧羊人nacy

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超7個贊

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


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


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


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


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())  # []


查看完整回答
反對 回復(fù) 2023-07-27
?
aluckdog

TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個贊

您期望 return subject + ' : ' + str(self.d[subject])運(yùn)行showGrades三次,但是當(dāng)它到達(dá)第一次返回時,它就會離開循環(huán)。因此,將您的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']


查看完整回答
反對 回復(fù) 2023-07-27
  • 2 回答
  • 0 關(guān)注
  • 176 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號