首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >未附加到列表并打印的另一个类的属性。

未附加到列表并打印的另一个类的属性。
EN

Stack Overflow用户
提问于 2017-05-02 02:32:03
回答 1查看 29关注 0票数 0

所以我很难搞清楚,我做了两门课,一门叫课程,另一门叫成绩单。

我在转录类中有一个名为"add_course“的方法,它应该将提供给它的课程附加到一个名为"self.courses”的课程列表中。

问题是,当我在添加了一些测试课程之后,打印记录类时,它只是打印" Transcript:“,而没有添加任何内容。

代码语言:javascript
复制
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级

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-02 02:47:28

你的问题是

代码语言:javascript
复制
def add_course(self,course):
    for i in self.courses:
        self.course = self.courses.append(course)

您正在迭代self.courses。当这个列表为空时,for循环不会运行,因为没有什么可迭代的。这实际上也会导致无限循环(直到您到达一个MemoryError),因为您要追加到正在迭代的同一个列表中。

您可能会看到的另一个问题是,注释中描述的@Nullman是list.append返回None

代码语言:javascript
复制
self.courses = self.courses.append(course)

在您的第一个调用列表现在是None之后,第二次调用add_course时,它将引发

代码语言:javascript
复制
AttributeError: 'NoneType' object has no attribute 'append'

所以你的功能应该是

代码语言:javascript
复制
def add_course(self,course):
    self.courses.append(course)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43729166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档