所以我很难搞清楚这一点,我做了两个课程,一个叫做课程,一个叫做成绩单。
我在Transcript类中有一个名为" add_course"并且它应该将提供给它的课程附加到一个名为" course"被设置为" self.courses"。
问题是当我在添加一些测试课程后打印Transcript课程时,它只会打印" Transcript:"没有添加任何东西。
class Course:
def __init__(self, number, credit, grade):
#validgrades = ['A','B','C','D','F','IP']
#if grade not in validgrades:
#raise CourseError("bad grade" + "'" + grade + "'" )
self.number = number #string
self.credit = credit #int
self.grade = grade #string
def __str__(self):
return ('%s: credit %d, grade %s' % (self.number, self.credit, self.grade))
def __eq__(self,other):
return self.number==other.number and self.credit==other.credit and self.grade==other.grade
def is_passing(self):
if self.grade == 'F' or self.grade == 'IP':
return False
else:
return True
c1 = Course("CS112",4,"A")
print(c1)
print(c1.is_passing())
c2 = Course("ENGH101", 3, "B")
print(c1==c2)
c3 = Course("MATH113", 4, "IP")
class Transcript:
def __init__(self):
courses = []
self.courses = courses
def __str__(self):
strtrans=""
strtrans +='Transcript:\n'
for i in self.courses:
strtrans+= '%s\n\t' %(i)
return strtrans
def __eq__(self,other):
if self.courses == other.courses:
return True
else:
return False
def add_course(self,course):
for i in self.courses:
self.courses.append(course)
def course_by_number(self, number):
for i.number in self.courses:
if self.number == number:
print('It worked!')
return True
elif self.number == None:
return None
else:
return False
t=Transcript()
print(t)
t.add_course(c1)
t.add_course(c2)
t.add_course(c3)
print(t)
输出为:
CS112:4级,A级
是的
错误
文稿:
文稿:
什么时候应该:
文稿:
CS112:4级,A级
ENGH101:3级,B级
MATH113:学分4,等级IP
答案 0 :(得分:1)
你的问题是
def add_course(self,course):
for i in self.courses:
self.course = self.courses.append(course)
您正在迭代self.courses
。当此列表为空时,for循环不会运行,因为没有任何内容可以迭代。这实际上也会导致无限循环(直到你遇到MemoryError),因为你要追加到迭代的同一个列表。
你会看到的另一个问题,就像@Nullman在评论中描述的那样list.append
会返回None
所以
self.courses = self.courses.append(course)
在第一次通话后,您的列表现在为None
,第二次调用add_course
时,它会提升
AttributeError: 'NoneType' object has no attribute 'append'
所以你的功能应该是
def add_course(self,course):
self.courses.append(course)