【问题标题】:Returning a list in Python 3 as result of a function to make a geometric sequence在 Python 3 中返回一个列表作为创建几何序列的函数的结果
【发布时间】:2018-08-05 06:21:52
【问题描述】:

我接到教授的任务。截止日期已经结束,但我很好奇解决方案可能是什么。 我必须创建一个创建几何级数的函数。 它有三个参数,x0 - 初始值 -,q - 共同比率 - 和 N - 元素的数量。 该功能必须这样工作,如果你只给它一个参数,q 会自动设置为 0,5,N 自动设置为 10,如果你给它 2 个参数,N 应该是 10。当然它必须列出这个列表几何级数。

所以我写了这段代码:

def geometric_progression(x0,q=None,N=None):
"""This function creates a geometric progression consisting of N elements""" # Docstring

    sequence = []
    i = 1

    if (q and N) is None:
        q = 0,5
        N = 10
        while i<N+2:
            sequence.append(x0*(q**(i-1))
    return sequence
    elif N is None:
        N = 10
        while i<N+2:
            sequence.append(x0*(q**(i-1)))
    return sequence
    else: 
        while i<N+2:
            sequence.append(x0*(q**(i-1)))
    return sequence

但不幸的是,它似乎不起作用。 你能帮帮我吗?

【问题讨论】:

  • if (q and N) is None 没有做你认为它正在做的事情。
  • 您的 while 循环永远不会中断,因为您不会在任何地方更改 i

标签: python list function return


【解决方案1】:

这是答案,但我建议您阅读有关函数中 args 的默认值的信息。

def geometric_progression(x0, q=0.5, N=10):
    """
    This function creates a geometric progression consisting of N elements
    :param x0: initial value
    :param q: common ratio
    :param N: number of elements
    :return: list of geometric sequence
    """

    sequence = [x0, ]

    for i in range(N - 1):
        x0 = x0 * q
        sequence.append(x0)

    return sequence

【讨论】:

    【解决方案2】:

    您可以使用列表推导:

    def geometric_progression(x0, q=0.5, n=10):
        return [x0 * q ** p for p in range(n)]
    

    【讨论】:

      【解决方案3】:

      我已经更正了语法和逻辑错误:

      def geometric_progression(x0, q=0.5, n=10):
          sequence = []
          i = 1
      
          while i < n+2:
              sequence.append(x0*(q**(i-1)))
              i += 1
      
          return sequence
      

      【讨论】:

        【解决方案4】:

        如果你没有给 q & N 任何参数值,那么它会自动将输入分别作为 5,10。

        def geometric_progression(x0,q=5,N=10):
            sequence = []
             i = 1
             while i<N+2:
                sequence.append(x0*(q**(i-1)))
                i=i+1
             return sequence
        

        【讨论】:

        • 默认情况下q的值是多少?它是 0.5 或 5 或 0 或 0,5
        • 也在一行中:return [x0*(q**(i-1)) for i in range(1, N+2)]
        • @ChatterOne 是真的,但优化解决方案是使用默认参数,您只需编写半行代码函数参数优化丢失
        猜你喜欢
        • 2019-02-17
        • 2022-07-29
        • 2021-11-30
        • 1970-01-01
        • 2011-11-18
        • 2020-08-15
        • 1970-01-01
        • 1970-01-01
        • 2019-04-14
        相关资源
        最近更新 更多