我觉得虽然你知道你想要什么(数字的平均值),但你并不清楚你想如何达到你想要的目标,而且你似乎对编写 python 的基础知识有些困惑.
就像MisterMiyagi 所问的那样,您没有提供太多关于您希望生成器函数如何工作的信息。
编辑:
根据您的评论(这应该是您问题的一部分),这是您尝试过的代码:
def f1(*args):
for i in args:
print(mean)
return
您的问题/尝试解决的问题
我想从您的问题和尝试的解决方案中介绍几件事。
首先,您不需要import statistics,因为计算平均值很简单。
-
其次,你提到了
我想创建一个生成器函数,它将计算几个或无限大数字的平均值。
但是,在您的代码中,您遍历传递给您的函数 f1 的数字列表并打印出 mean 的值(甚至在哪里定义了这个变量?)。
如果您只想打印值,则不需要 return 关键字
您的函数不是 generator,因为它不是迭代器,您可以从中进行迭代。
您似乎想要来自stdin 的输入(在终端中输入值),但您甚至没有任何input() 调用任何地方。
你需要什么:
您实际上并不需要 python 文档定义的“生成器”。
你需要的只是一个简单的函数:
- 以键盘输入,例如
1,2,3,4,5
- 将输入解析为 Python 整数列表
- 计算该列表的平均值
- 打印平均值
我现在将带你了解如何在 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,c 或1 , 2,3,代码将会中断。