Python:基于输入值和频率的平均值

Python:基于输入值和频率的平均值,python,recursion,input,average,computer-science,Python,Recursion,Input,Average,Computer Science,我试图编写一个python函数number_pairs,它使用一个自然正数n,并从用户那里读取n对自然正数。每对表示一个值及其频率。对于每一对,函数必须提示用户输入两个正整数值及其频率,同时指示预期对的索引。该过程将重复,直到输入所有n对。最后,函数应该打印n对数字的平均值(Float类型,与示例中的字符串消息完全相同),并返回平均值。您可以假定用户只输入有效数据。 我在想,也许写一个帮助函数来做累加递归,但是我错过了很多课,我不知道怎么做。这就是我到目前为止所做的: def averge_h(

我试图编写一个python函数number_pairs,它使用一个自然正数n,并从用户那里读取n对自然正数。每对表示一个值及其频率。对于每一对,函数必须提示用户输入两个正整数值及其频率,同时指示预期对的索引。该过程将重复,直到输入所有n对。最后,函数应该打印n对数字的平均值(Float类型,与示例中的字符串消息完全相同),并返回平均值。您可以假定用户只输入有效数据。
我在想,也许写一个帮助函数来做累加递归,但是我错过了很多课,我不知道怎么做。这就是我到目前为止所做的:

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

您可以尝试以下方法:

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)

您可以尝试以下方法:

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)

既然你说它只能有一个参数“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)
输出: 输入对数:5 第一对 价值:1 频率:2 第二对 价值:2 频率:2 三维对 价值:3 频率:2 第四对 价值:4 频率:2 第五对 价值:5 频率:2
平均值是:6因为你说它只能有一个参数“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)
输出: 输入对数:5 第一对 价值:1 频率:2 第二对 价值:2 频率:2 三维对 价值:3 频率:2 第四对 价值:4 频率:2 第五对 价值:5 频率:2
平均值是:6递归只是重复操作的另一种方式。你可以使用普通的循环来代替(如果你参加了那个讲座的话)。我们不允许使用循环:/Recursion只是重复一个动作的另一种方式。您可以使用普通循环来代替(如果您出席了那个讲座)。我们不允许使用循环:/谢谢!!这可能是个愚蠢的问题,但第三行中的/是什么意思?sum_u和float(n)之间的一个除以总和得到平均值。oohk!有没有办法打印出“输入对号的值”,其中#随着每次提示而增加?我尝试了一些I+1和n之类的变体,但我似乎无法理解out@ShagunChhikara编辑以适应这种情况!欢迎来到stackOverflow,如果我的答案对你有帮助,请点击答案旁边的复选标记:)算出答案!谢谢非常感谢。这可能是个愚蠢的问题,但第三行中的/是什么意思?sum_u和float(n)之间的一个除以总和得到平均值。oohk!有没有办法打印出“输入对号的值”,其中#随着每次提示而增加?我尝试了一些I+1和n之类的变体,但我似乎无法理解out@ShagunChhikara编辑以适应这种情况!欢迎来到stackOverflow,如果我的答案对你有帮助,请点击答案旁边的复选标记:)算出答案!谢谢