2015-02-24 27 views
0

我试图让这个节目给我的输出看起来像这样:的Python(v3)的麻烦输出

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} 

这是我到目前为止的代码,但它没有明显的工作。任何帮助表示赞赏,但请在代码中显示。大多是我遇到了麻烦的底线 “与均线的字典是: { 'AvgPositive':12.0, 'AvgNonPos':-6.0, 'AvgAllNum':3.0}”

def nums(): 
    values = [] 
    while -9999 not in values: 
     x = int(input("Enter a number (-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 avgNonPos(values): 
    return allNumAvg([v for v in values if v<0]) 

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

    print(x) 

    return average 

def posNumAvg(values): 
    return allNumAvg([v for v in values if v>0]) 

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

    print(x) 
input(print("'AvgPositive': ",posNumAvg(nums())),"'AvgNonPos': ",avgNonPos(nums())),"'AvgAllNum': ",allNumAvg(nums()) 
+0

什么结果你好吗? – 2015-02-24 06:00:46

+0

它只是说:'AvgPositive':12.0我如何获得它来打印nonPos和allNum的其他平均值? – PythonNoob 2015-02-24 06:05:30

+0

每次调用'nums()'时,它都会要求你输入一些数字。你在最后一行叫三次。 'print'的返回值是'None',然后传递给'input'函数。我认为你可能会创建一个平均字典,然后打印出来。 – 2015-02-24 06:05:41

回答

0

我想你有出头写错的位置:在每个功能

  • 传球NUMS(),而调用它将使用户再次输入他的数字,而应该使这个只有一次并将结果保存在一个变量,然后ü应该传递到函数
  • 我不明白在正确返回f后使用if条件油膏应该返回......我觉得你在测试什么...

的可读性,我省略了,如果条件和固定你的打印语句,我想这是你努力实现:

def nums(): 
    values = [] 
    while -9999 not in values: 
     x = int(input("Enter a number (-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 avgNonPos(values): 
    return allNumAvg([v for v in values if v < 0]) 



def posNumAvg(values): 
    return allNumAvg([v for v in values if v > 0]) 


values = nums() 
print "'AvgPositive': ", posNumAvg(values) 
print "'AvgNonPos': ", avgNonPos(values) 
print "'AvgAllNum': ", allNumAvg(values) 

出租或我知道,如果这是正确的,如果您需要任何进一步的功能。

0

这将是按预期工作的代码的版本(我希望)

def nums(): 
    values = [] 
    while -9999 not in values: 
     x = int(input("Enter a number (-9999 to end:)")) 
     values.append(x) 
    values.remove(-9999) 
    return values 


def allNumAvg(values): 
    return sum(values)/len(values) 


def avgNonPos(values): 
    return allNumAvg([v for v in values if v < 0]) 


def posNumAvg(values): 
    return allNumAvg([v for v in values if v > 0]) 


if __name__ == "__main__": 
    values = nums() 
    print("The list of all numbers entered is:") 
    print(values) 
    print("The dictionary with averages is:") 
    print({'AvgPositive': posNumAvg(values), 'AvgNonPos': avgNonPos(values), 'AvgAllNum': allNumAvg(values)}) 

注意事项:

1:调用NUMS()两次(在下面的代码)的手段该号码将被收集两次,这是不希望

input(print("'AvgPositive': ",posNumAvg(nums())),"'AvgNonPos': ",avgNonPos(nums())),"'AvgAllNum': ",allNumAvg(nums()) 

在我的代码示例中,您可以看到NUMS()被调用一次,并保存在稍后沿传递的值。

2:avgNonPos/posNumAvg中的以下代码是死代码。即它不会运行,因为它在return语句之后存在。

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

3:我清理allNumAvg(值)函数位使用内置函数SUM()