【问题标题】:Generator Function which calculates mean of several values in Python [closed]在Python中计算几个值的平均值的生成器函数[关闭]
【发布时间】:2020-07-06 20:14:58
【问题描述】:

我对 Python 中的代码有疑问。我想创建一个生成器函数,它将计算几个或无限大数字的平均值。我想我应该使用如下命令: *args(用于从键盘数字中给出),导入统计信息(用于计算平均值),但我无法编写它。

谁能帮帮我?

【问题讨论】:

  • 你能澄清你的问题到底是什么吗?你知道如何计算数字的平均值吗?你知道如何编写生成器函数吗?你知道如何将输入传递给生成器函数吗?
  • 如何组合生成器函数以通过输入命令输入多个整数的主要问题。生成器函数中的thw问题
  • 您尝试过什么来解决这个特定问题?您是希望生成器自己获取input,还是应该从外部传入?您希望生成器在创建时接收一次输入,还是应该不断地为它提供新的输入?
  • 该代码 sn-p 既不是生成器,也不需要input。你知道如何编写一个基本的生成器吗?
  • SO 不是代码编写服务。我们可以帮助您解决现有代码的具体问题。 如果您了解它们的基础,我们还可以解释具体的个别问题。请参阅how to ask page。还请尝试理解您所询问的基本概念,以便您可以清楚地描述您甚至需要什么。

标签: python function statistics generator mean


【解决方案1】:

问题不清楚, 您可能正在寻找此代码:

def mean(*args):
    print(sum(args) / len(args))

-- 编辑: 上面的代码不是生成器函数,要计算平均数,您需要一个简单的函数而不是生成器, 要使上述函数正常工作,只需调用函数:

mean(10,12,13)

如果您需要从用户输入中获取数字,请按以下方式使用该函数:

string = input("Enter all numbers in space separated format")
strings_of_numbers = string.split()  # creating a list of string_numbers 
list_of_numbers = [int(i) for i in strings_of_numbers]  # converting string numbers to integers
mean(*list_of_numbers)  # calling function with args

【讨论】:

  • 首先谢谢你,但在屏幕上它没有显示结果。而且我不能输入我想要的值 - 我的意思是特定的数字
  • 这不是生成器函数。
  • 作为检查代码的正确运行,练习的发音说,如果您运行代码并且如果您将数字 3、4、5 作为输入参数,那么函数将返回该数字4 in screen(这是数字 3,4 和 5 的平均数)
【解决方案2】:

我觉得虽然你知道你想要什么(数字的平均值),但你并不清楚你想如何达到你想要的目标,而且你似乎对编写 python 的基础知识有些困惑.

就像MisterMiyagi 所问的那样,您没有提供太多关于您希望生成器函数如何工作的信息。

编辑: 根据您的评论(这应该是您问题的一部分),这是您尝试过的代码:

def f1(*args):
    for i in args:
        print(mean)
    return

您的问题/尝试解决的问题

我想从您的问题和尝试的解决方案中介绍几件事。

  • 首先,您不需要import statistics,因为计算平均值很简单。

  • 其次,你提到了

    我想创建一个生成器函数,它将计算几个或无限大数字的平均值。

    但是,在您的代码中,您遍历传递给您的函数 f1 的数字列表并打印出 mean 的值(甚至在哪里定义了这个变量?)。

  • 如果您只想打印值,则不需要 return 关键字

  • 您的函数不是 generator,因为它不是迭代器,您可以从中进行迭代。

  • 您似乎想要来自stdin 的输入(在终端中输入值),但您甚至没有任何input() 调用任何地方。

你需要什么:

您实际上并不需要 python 文档定义的“生成器”。 你需要的只是一个简单的函数:

  1. 以键盘输入,例如1,2,3,4,5
  2. 将输入解析为 Python 整数列表
  3. 计算该列表的平均值
  4. 打印平均值

我现在将带你了解如何在 python 中完成这 4 件事。


1。接受键盘输入

这是通过input() function 完成的。您分配函数的变量将采用用户输入的值,而您作为函数参数放置的任何字符串都将显示为提示用户提供输入。

message = 'Please enter a comma-separated list of numbers:'
numbers = input(message)

2。将键盘输入解析为 python 整数列表

根据我在上面部分中的提示,我希望用户输入一堆用逗号分隔的数字。但是,我们将无法使用该输入进行计算,因为它是一个字符串。我们想将该字符串转换为整数列表。

python 字符串类有一个类方法split()。它操作的字符串被转换成一个列表,而该方法的参数将是用于“拆分”列表的字符。

# If numbers was a string `1,2,3`, then num_list will be a list `['1','2','3']`
num_list = numbers.split(',')

现在请注意,num_list 仍然是字符串列表,而我们需要的是整数列表。我们可以使用 for 循环遍历列表以将字符串转换为整数。

# Create a new list
new_num_list = []
# Iterate through the old list
for num in num_list:
    # We use append() to append items to the new number list
    new_num_list.append(int(num))

或者,更简单的方法是使用list comprehension

new_num_list = [int(num) for num in num_list]

3。计算该列表的平均值

现在我们有了列表中的数字,我们只需获取列表中数字的总和,然后将该总和除以列表中值的数量。

# Using len() on a list tells us the length of the list (how many values are in the list)
number_of_numbers = len(new_num_list)

# Using sum() gives us the sum of values in the list
sum_of_numbers = sum(new_num_list)

# Calculate the average
average = sum_of_numbers/number_of_numbers

4。打印平均值

这很简单:print(average)


将它们组合成一个函数

def f1():
    # Get input
    message = 'Please enter a comma-separated list of numbers:'
    numbers = input(message)

    # Parse input into list of integers
    num_list = numbers.split(',')
    new_num_list = [int(num) for num in num_list]

    # Calculate average
    number_of_numbers = len(new_num_list)
    sum_of_numbers = sum(new_num_list)
    average = sum_of_numbers/number_of_numbers

    # Output
    print(average)

注意事项: 输入必须是逗号分隔的数字。如果您传入1,a,b,c1 , 2,3,代码将会中断。

【讨论】:

  • 好的,非常感谢。我有最后一个问题。该函数必须连续(根据生成器的函数)返回每个值与作为输入的所有值的平均值之差的平方。如果我想打印以上所有内容,我应该怎么写?
  • 通过我在我的解决方案中给出的解释,您肯定能弄清楚吗?您只需要在找到平均值的基础上进行额外的计算。就像@MisterMiyagi 所说的那样,stackoverflow 不是代码编写服务。请尽最大的努力(自己尝试)。不这样做并从中吸取教训,只会对自己造成伤害。
猜你喜欢
  • 2011-06-25
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 2017-01-17
  • 2021-02-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多