2015-06-29 1 views
1

Я пытаюсь написать функцию python number_pairs, которая потребляет натуральное положительное число n и считывает из n пар натуральных положительных чисел от пользователя. Каждая пара представляет значение и его частоту. Для каждой пары функция должна побуждать пользователя вводить два положительных целого числа значение и его частоту, указывая индекс ожидаемой пары. Процесс повторяется до тех пор, пока не будут введены все n пар. В конце функция должна печатать среднее значение (типа Float, с точным строковым сообщением, как в примере) из 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

Поскольку вы сказали, что может быть только один аргумент «п», посмотрите на это:

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
Смежные вопросы