class student(object):
def __init__(self, name, age, year):
self.name, self.age, self.year = name, age, year
self.grades=[]
self.grade={}
print(name,'-------->','Age:',age,'','Year:',year)
def set_grades(self,score):
self.grades.append(score)
def get_grades(self):
return self.grades
def average(self):
return sum(self.grades)/len(self.grades)
def topgrade(self,other):
return max(self.average(),other.average())
def __str__(self):
return str(self.name)+'--'+' Grades:'+str(self.grades)+'---Class average:'+str(self.average())
def dicts(self):
return grade[self.name]=self.grades
todd=student('Todd', 43, 4)
leah=student('Leah', 38,3)
当我运行代码时,出现错误:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\toddb\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 714, in runfile
execfile(filename, namespace)
File "C:\Users\toddb\Anaconda3\lib\site-packages\spyderlib\widgets\externalshell\sitecustomize.py", line 89, in execfile
exec(compile(f.read(), filename, 'exec'), namespace)
File "C:/Users/toddb/Desktop/student.py", line 32
return grade[self.name]=self.grades
^
SyntaxError: invalid syntax
我尝试过多种方法来做到这一点。我是否仅限于使用列表?
最佳答案
这是因为你无法返回 Python 中的赋值结果:
class Test(object):
pass
a = Test()
somevariable = a.attr = 10
有效 - 但一旦您想返回:
def func():
a = Test()
return a.testattr = 10
>>> func()
SyntaxError: invalid syntax
或者更简单:
def func():
return a = 0
>>> func()
SyntaxError: invalid syntax
所以你需要分开分配和返回:
def dicts(self):
grade[self.name]=self.grades
return grade
请注意,当您尝试调用此函数时,这将引发 NameError
(除非您有一个名为 grade
的全局变量)。但您可能指的是 self.grade
:
def dicts(self):
self.grade[self.name]=self.grades
return self.grade
这反过来会永久改变您的 self.grade
字典。如果您不想这样做,可以在分配之前创建一个副本:
def dicts(self):
grade = self.grade.copy()
grade[self.name]=self.grades
return grade
关于python - 我正在尝试将类与 python 字典一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41246595/