当我循环遍历字典时缺少项目

我尝试创建一个学生类对象,并收集一些数据并显示它:


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


并且它忽略了其他值!


白板的微信
浏览 123回答 2
2回答

牧羊人nacy

您遇到的具体问题是您将(无条件)放入循环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 gradesstu =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())  # []

aluckdog

您期望 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']
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python