2015-06-29 70 views
1

我正在嘗試編寫一個python函數number_pairs,它消耗自然的正數n,並從用戶讀入n對自然正數。每一對代表一個值和它的頻率。對於每一對,函數必須提示用戶輸入兩個正整數的值和頻率,同時指示期望的對的索引。該過程重複,直到所有n對都被輸入。最後,函數應打印n對數字的平均值(浮點類型,具有如示例中的精確字符串消息),並返回平均值。您可以假定用戶只輸入有效數據。
我在想,也許寫了一個累積遞推的幫助函數,但我錯過了很多講座,我不知道該怎麼做。這是我到目前爲止有:Python:基於值和頻率輸入的平均值

def averge_h(counter): 
... 

def number_pairs(n): 
    prompt1 = "Enter value for pair number " 
    prompt2 = "Enter its frequency:\n" 
    pn = "{0}: ".format(n) 
    res="Their average is: " 
    v = int(input(prompt1+pn)) 
    f = int(input("Enter its frequency: ")) 

if n = 1: 
    average = (v*f)/f 
else: 
    v = v+1 

print res + str(average) 
return average 
+1

遞歸僅僅是重複動作的一種不同方式。您可以使用普通循環(如果您是在場演講)。 – TigerhawkT3

+0

我們不允許使用循環:/ –

回答

0

你可以嘗試這樣的事情:

def read_and_avg(sum_,n,left,i): ## left is the number of times the input is to be taken 
    if left == 0: 
     print (sum_/float(n)) 
     return (sum_/float(n)) 
    else: 
     i = i + 1 
     print "Enter the values for pair number "+str(i) 
     a = int(input()) 
     b = int(input()) 
     sum_ = sum_ + (a*b)     ## Increment the sum 
     n = n + b       ## Increment the total count 
     print sum_,n,left  
     return read_and_avg(sum_,n,left-1,i) ## Decrease left by 1, 


def func(n): 
    read_and_avg(0,0,n,0) 
+0

謝謝!這可能是一個愚蠢的問題,但第三行中的/意味着什麼? sum_和float(n)之間的一個 –

+0

將總和除以得到平均值。 –

+0

oohk!有沒有什麼辦法可以打印出「輸入號碼#的值」,其中#隨每個提示而增加?我嘗試了幾個變化與i + 1和n和東西,但我似乎無法弄清楚這一點 –

0

既然你說,它只能有一個參數「N」來看看這個:

def number_pairs(n): 
    if n == 0: 
     return 0 
    else: 
     average = number_pairs(n-1) 

     print str(n) + ("st" if n == 1 else ("nd" if n == 2 else ("d" if n == 3 else "th"))) + " pair" 
     val = input("value: ") 
     frq = input("frequency: ") 
     print "" # added for new line 

     return average + (val * frq) 

n = input("Enter the number of pairs: ") 
print "" # added for new line 
print "The average is: " + str(number_pairs(n)/n) 
Output: 

Enter the number of pairs: 5 

1st pair 
value: 1 
frequency: 2 

2nd pair 
value: 2 
frequency: 2 

3d pair 
value: 3 
frequency: 2 

4th pair 
value: 4 
frequency: 2 

5th pair 
value: 5 
frequency: 2 

The average is: 6