【问题标题】:I need to make a generator function that takes *args as an input我需要制作一个以 *args 作为输入的生成器函数
【发布时间】:2021-12-17 16:48:32
【问题描述】:

我需要创建一个函数,它将作为生成器连续返回, 每个值与作为输入给出的所有值的平均值之差的平方。

函数必须

A) 接受未定义数量的参数

B) 是一个生成器函数

这些值将是整数。

要计算所有值的平均值,我可以导入统计数据。

你有什么想法吗?

我尝试写的代码:

import statistics
def squares(*args):
    for i in args:
        a=(args-av)**2
        yield a
lst=[]
count = int(input("Give the amount of numbers: "))
for i in range (0,count):
    ele=int(input())
    lst.append(ele)
av=statistics.mean(lst)
for i in squares(*lst):
    print(i)

【问题讨论】:

    标签: python python-3.x args


    【解决方案1】:

    脚本中唯一的错误来自于在计算中使用args 而不是i

    import statistics
    def squares(*args):
        for i in args:
            a=(i-av)**2 # <-- There.
            yield a
    lst=[]
    count = int(input("Give the amount of numbers: "))
    for i in range (0,count):
        ele=int(input())
        lst.append(ele)
    av=statistics.mean(lst)
    for i in squares(*lst):
        print(i)
    

    我还建议您使用def squares(av, *args),这样您的av 就不会从某个地方冒出来。然后,您必须将最后一行修改为for i in squares(av, *lst)。否则一切看起来都很好!

    我的建议:

    import statistics
    
    def squares(average, *items):
        for item in items:
            yield (item - average)**2
    
    lst = []
    count = int(input("Give the amount of numbers: "))
    for _ in range(count):
        item = int(input())
        lst.append(item)
    
    average = statistics.mean(lst)
    for square in squares(average, *lst):
        print(square)
    

    【讨论】:

      【解决方案2】:

      您的 av 变量应该在生成器函数中计算:

      def squares(*args):
          av = sum(args)/len(args)
          for a in args:
              yield (a-av)**2
      

      【讨论】:

      • 我认为// 不适合进行平均计算。提问者的代码使用statistics.mean,如有必要,它会返回一个浮点数。否则这可能就是我们想要的,因为您正在生成器内部进行平均。
      • 那是我的错(我猜是意外双击/我猜)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-01
      • 2019-10-19
      • 2021-02-24
      • 1970-01-01
      • 1970-01-01
      • 2020-07-03
      • 1970-01-01
      相关资源
      最近更新 更多