2017-05-02 3 views
0

그래서 이것을 알아내는 데 어려움이 있습니다. 코스라는 두 클래스와 대본이라는 클래스를 만들었습니다.다른 클래스의 속성이 목록에 추가되지 않고 인쇄되지 않습니다.

나는 "add_course"라고 불리는 Transcript 클래스의 메서드를 가지고 있으며, "self.courses"로 설정된 "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 급

진정한

거짓

성적 증명서 :

성적 증명서 :

,451,515,

이되어야 할 때 :

성적 증명서 :

CS112 : 신용 4, A 급

ENGH101 : 신용 3 등급 B

MATH113 : 신용 4 등급 IP

+0

glace에서 문제가 발생한 것 같습니다. 'self.course = self.courses.append (course)''self.course ='append를 필요로하지 않고, 목록을 수정하고, 추가하지 않고 – Nullman

+0

을 반환합니다. 그 부분을 제거했지만 여전히 아무 것도 인쇄하지 않습니다. – ruckarucka

답변

1

문제는 다음과 같습니다.

def add_course(self,course): 
    for i in self.courses: 
     self.course = self.courses.append(course) 

self.courses을 반복하고 있습니다. 이 목록이 비어 있으면 for 반복문이 반복되지 않으므로 for 루프가 실행되지 않습니다. 이것은 실제로 반복되는 같은 목록에 추가 할 때 무한 루프 (MemoryError가 발생할 때까지)를 유발합니다.

@Nullman이 코멘트에 설명 된대로 먼저 전화 목록 후 list.append 반환 그래서

self.courses = self.courses.append(course) 

None 지금 None입니다 add_course가 호출 될 두 번째 시간입니다 당신이 보는 것이 또 다른 문제는, 그것은

AttributeError: 'NoneType' object has no attribute 'append' 

그래서 함수 그냥해야 올릴 것

def add_course(self,course): 
    self.courses.append(course) 
+0

좋습니다. 그래서 .append가 in-place 수정을 사용하기 때문에 같은 목록을 반복해서 반복 할 필요가 없습니다. 단순히 .append를 사용할 수 있습니까? – ruckarucka

+0

예, append는 지정한 개체를 목록 끝에 추가합니다. –