显示;“字典平均值”;Python输出(版本3)

显示;“字典平均值”;Python输出(版本3),python,Python,让我先请你耐心点,不要给我的排名太差,我正在尽力不让自己听起来像个十足的傻瓜 我正在为Python编写这个程序,要求用户输入除-9999以外的任何数字(neg number、pos number或zero),然后在末尾给出下面的字典平均值。这是我需要的输出,例如 Enter a number (-9999 to end): 4 Enter a number (-9999 to end): -3 Enter a number (-9999 to end): -15 Enter a number

让我先请你耐心点,不要给我的排名太差,我正在尽力不让自己听起来像个十足的傻瓜

我正在为Python编写这个程序,要求用户输入除-9999以外的任何数字(neg number、pos number或zero),然后在末尾给出下面的字典平均值。这是我需要的输出,例如

Enter a number (-9999 to end):  4
Enter a number (-9999 to end):  -3
Enter a number (-9999 to end): -15
Enter a number (-9999 to end):  0
Enter a number (-9999 to end):  10
Enter a number (-9999 to end):  22
Enter a number (-9999 to end):  -9999

The list of all numbers entered is:
[4, -3, -15, 0, 10, 22]

The dictionary with averages is:
{'AvgPositive': 12.0, 'AvgNonPos': -6.0, 'AvgAllNum': 3.0}
所以我有下面的代码,但我做得不对(很明显),因为我不知道如何正确地做。它给了我输出“[]无”,因为我不知道如何输出如上所示的“字典平均值”

这就是我所拥有的:

def nums():
    values = []

    while -9999 not in values:
        x = int(input("Enter a numbers (-9999 to end: "))

        values.append(x)
    values.remove(-9999)

    return values

def allNumAvg(values):
    average = 0
    sum = 0
    for n in values:
        sum = sum + n

    average = sum / len(values)

    return average

def posNumAvg(values):
    x = []
    average = 0
    sum = 0

    if int in values > 0:
        x.append(int)

    print(x)

print(posNumAvg(nums()))

您将
posnumag
allnumag
完全不同的目的是什么?!后者计算并返回某物——那么,你到底为什么要前者打印某物而不返回任何东西(与返回
)。。。?!这种不对称本身会让你发疯为什么你会选择完全不对称

也就是说,
posNumAvg
中每行的bug比我最近看到的要多。如何从头开始,利用现有的
allNumAvg
,并继续例如

def posNumAvg(values):
    return allNumAvg([v for v in values if v>0])
…这看起来不是更好吗?-)


当然,现在您还有其他问题——如果没有一个值是正的,那么您现有的代码最终会尝试将零除以零,这不是一个好主意:-)。而且,根据您使用的是Python2还是Python3(您甚至懒得提及),
/
可能是截断除法还是真除法——值得检查。还有其他一些问题,但是,我已经为您的许多实际的和潜在的错误提出了修复建议,我已经超出了一个答案的限额:-)。

感谢您的帮助,简化了它。你提到的问题有什么帮助吗?我提交问题的原因是为了找到那些答案;如果用户输入一个负数,我该怎么办?最重要的是,我该如何获得底部的平均值?如果没有值:返回浮点('nan')
处理没有任何要平均的值--
nan
,对于“不是一个数字”,是“没有这样的数字”的浮点值。准备dict当然很简单:
d={“AvgPositive”:posNumAvg(值),
等等。