我被告知要创建一个类,输出大小,最小值,最大值等,而不使用列表,并且属性主要在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
答案 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._lowest
和self._highest
分别设置为float('inf')
和float('-inf')
。这会将你的if语句减少为:
self._lowest = min(self._lowest, score)
self._highest = max(self._highest, score)