2013-10-04 43 views
0

我被告知創建一個類,輸出大小,最小值,最大值等,而不使用列表,並使屬性主要在def添加..我的屬性工作正常部分,但由於某種原因,我不能達到最低限度。任何人都可以給我一個正確的方向,並告訴我,如果我正在走這條正確的道路嗎?最低限度不使用列表

class Dataset(object): 

    def __init__(self): 
     self.totalScore=0 
     self.countScore=0 
     self._highest=0 
     self._lowest=0 
     self.dev=0 
     self.mean=0 

    def add(self, score): 
     self.countScore= self.countScore + 1 
     self.totalScore= self.totalScore + score 

     self.mean=self.totalScore/self.countScore 
     self.dev=self.mean - score 


     if score > self._highest: 
      self._highest = score 
     if score < self._lowest: 
      self._lowest = score 

    def size(self): 
     return(self.countScore) 


    def min(self): 
     return (self._lowest) 


    def max(self): 
     return (self._highest) 

我的結果是這樣的:

This is a program to compute the min, max, mean and 
standard deviation for a set of numbers. 

Enter a number (<Enter> to quit): 50 
Enter a number (<Enter> to quit): 60 
Enter a number (<Enter> to quit): 
Summary of 2 scores. 
Min: 0 
Max: 60.0 
Mean: 55.0 
Standard Deviation: 7.0710678118654755 

回答

5

的問題是,你初始化你的初始self._lowest0這恰好是比你們所有的投入更低。相反,你可以嘗試以下方法:

  • 初始化它這樣:self._lowest = None
  • add,設置self._lowest的條件更改爲score上首次呼叫

然後,它應該是這樣的:

if self._lowest is None or score < self._lowest: 
    self._lowest = score 

這樣你設置None作爲初始非數字值的含義目前還沒有最低開滿。然後它被設置爲第一個score通過,並更新到最低的一個相應的進一步調用。

對於低於0的輸入序列,即-9 -1 -5 -3,您的self._highest變量會發生類似問題。

另一種選擇,由於@SteveJessop,是分別設定self._lowestself._highestfloat('inf')float('-inf')。這會減少你的if語句爲:

self._lowest = min(self._lowest, score) 
self._highest = max(self._highest, score) 
+1

完全合理。一個便宜又快樂的選擇是用float(' - inf')'和float('inf')'來初始化max/min。那麼在這段代碼中不需要特殊情況。不利的一面是,在「add」完全沒有被調用的情況下,即沒有分數的情況下,結果稍微有用。 –

+0

@SteveJessop,謝謝,沒有想到這一點。這種方法還可以將if語句簡化爲簡單的'min' /'max'調用。我已經看到'inf'和'-inf'是許多算法的完全有效的初始值,所以這只是一個慣例或在這種情況下輸出格式。 –

+0

非常感謝。我覺得是這樣,我只是不知道該怎麼去做。現在我知道更好。 –

相關問題