2 回答

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

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']
添加回答
舉報