2012-11-05 29 views
0

我有一本書的列表以及用戶對本書的評分列表。如何在Python中使用類

[User1,2,1,3,6] ..
[User2,4,1,4 2] ..

[第一冊,第二冊,BOOK3,Book4]
從評分( 1-4)

例如 如果書1是 「教皇」
的raitings爲該書是[3,3,3,2]
打印輸出是 教皇[3,3, 3,2] []

us成爲一個班級

這裏是我的班級設置。

class Book(object): 
     booktotal=0 
     accept=[] 
     def __init__(self, Title= " ", Rating=()): 
      self.scale=[1,2,3,4] 
      self.book = Title 
      self.rating= Rating 
      self.accept=[] 
      book.population +=1 
     def AddRating(self,rating): 
      if rating in self.scale: 
       accepted.append(rating) 
      else: 
       pass 

      return self.accept 

     def Average(self): 
      Avg=sum[accept]/3 

     def __str__(self): 
      return '{0} - {1} - {2}'.format(self.book, self.rating,self.accept) 

我會得到如何打印出的平均值和評論

+1

正確格式的代碼(蟒蛇關心縮進),並觀察PEP 8個約定http://www.python.org/dev/peps/pep-0008/。另外,告訴我們你的代碼目前有什麼問題,並展示一些輸入和輸出來證明這一點。 – Marcin

+1

我添加了建議 – user1753878

回答

2

什麼你可以顯著減少的數量。

  • ​​沒有在任何地方定義。所以這是一個錯誤。
  • 你的平均計算是錯誤的。它只需要在__str__方法中計算。
  • 使用len函數來獲取列表中元素的數量。

    class Book(object):    
        scale=(1,5) 
    
        def __init__(self, title):   
         self.title = title 
         self.ratings = [] 
    
        def rate(self,rating): 
         if rating in range(self.scale[0]-1, self.scale[1]+1): 
          self.ratings.append(rating) 
    
        def __str__(self): 
         return '"{0}" rates an average of {1} from {2} reviews.'.format(
         self.title, sum(self.ratings)/float(len(self.ratings)), len(self.ratings)) 
    
    >> mybook = Book('Zen of Python') 
    >> mybook.rate(5) 
    >> mybook.rate(3) 
    >> mybook.rate(5) 
    >> str(mybook) 
    >> "Zen of Python" rate an average of 4.333333333 from 3 reviews. 
    
+0

請注意,將'ratings'作爲類變量可能不是一個好主意。這將使它在所有書籍之間共享(很像C++或Java中的「靜態」變量)。相反,你應該在'__init__'方法中創建它,所以它屬於一個特定的實例。 ('scale'變量可能沒有問題,因爲它只是作爲一個常量使用,但是,如果self.scale [0] <= rating <= self.scale [1] ''甚至放棄這個元組而贊成具有更好名稱的兩個變量,例如'min_rating' /'max_rating'。) – Blckknght

+0

你說得對,我對類變量做了修改。至於範圍,肯定有很多方法來實現它,這就是我決定的方式。 – Aesthete

相關問題