2015-02-24 26 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()