最小的不使用列表

时间:2013-10-04 22:11:34

标签: python class

我被告知要创建一个类,输出大小,最小值,最大值等,而不使用列表,并且属性主要在def add ..我的属性在大多数情况下工作正常但由于某种原因我不能得到最低限度。任何人都可以给我一个正确方向的快速推动,并告诉我,我是否正在走这条正确的道路?

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

1 个答案:

答案 0 :(得分:5)

问题是您将初始self._lowest初始化为0,这恰好低于您的所有输入。相反,您可以尝试以下方法:

  • 将其初始化为:self._lowest = None
  • add
  • ,在第一次调用时更改条件以将self._lowest设置为score

它看起来像这样:

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

这样您就可以将None设置为初始的非数字值,这意味着尚未找到最小值。然后将其设置为传递的第一个score,并在进一步调用时相应地更新为最低值。

对于低于self._highest的输入序列,您的0变量会发生类似问题,即-9 -1 -5 -3

感谢@SteveJessop,另一种选择是将self._lowestself._highest分别设置为float('inf')float('-inf')。这会将你的if语句减少为:

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