2013-12-18 25 views
0

我是使用類的新手,我需要在類中放置某個代碼。我已經得到了代碼爲預期類以外的工作:在類中使用while循環

minnum = 1 
    maxnum = 100 
    num = 1 
    points = 0 
    count = 9000 
    while num in range(minnum, (maxnum + 1)): 
     points += int(num + 300 * 2 * num/3) 
     num += 1 
     if count < (points/4): 
      num -= 1 
      break 
    print num #Prints "19" 

count實際上應該從0開始,但我把它9000在第一個例子(而在第二個我改變count從0到9000 )

class numbers(): 
    def __init__(self): 
     self.minnum = 1 
     self.maxnum = 100 
     self.num = 1 
     self.points = 0 
     self.count = 0 
    def num(self): 
     while self.num in range(self.minnum, (self.maxnum + 1)): 
      self.points += int(self.num + 300 * 2 * self.num/3) 
      self.num += 1 
      if self.count < (self.points/4): 
       self.num -= 1 
       break 
     return self.num 
number = numbers() 
number.count = 9000 
print number.num #Prints "1" 

我在做什麼錯? (我想要print number.num返回與第一個代碼中相同的值,「19」不是「1」)

+0

有你居然叫'number.num()'? – ChrisP

+0

這兩個代碼還有一些其他的區別,所以不同的行爲根本不會令人驚訝。什麼是'self.level'? –

+0

使用'while'循環遍歷一個數字範圍並不是pythonic。每循環一次,也會創建一個新的'range()'對象*,效率不高。考慮爲範圍內的數字(minnum,maxnum + 1):'代替。 –

回答

3

在第二個示例中,您沒有調用num()方法,並且您可能不想調用變量和一個同名的方法(「num」)!

(作爲一個風格問題,我也建議你通過__init__初始化器初始化count,而不是直接設置count

def __init__(self, count): 
    self.count = count 
    # etc... 

number = numbers(9000) 
+0

謝謝,這回答了我的問題。 Python不允許我像調用方法一樣調用變量(所以如果我調用方法,如果它有一個相同名稱的變量,我得到一個錯誤) count變量是不斷變化的東西(或增長)通過一段獨立的代碼。例如,每次按下特定按鈕時,count可能會增加+50,這會影響代碼的其餘部分。 – Cestarian