当给出比例和范围时,列出几何级数

时间:2019-04-12 14:49:53

标签: python python-3.x

给出大于1的正整数比率和非负整数n,创建一个列表,该列表由1和n之间(包括1和n之间)的数字的几何级数组成,并具有相同的比率。例如,如果比率为2,n为8,则列表将为[1、2、4、8]。

将列表与变量geom_prog关联。

我尝试了以下代码:

r= ratio
geom_prog = []
for i in range(1, n+1):
    i *= r
    geom_prog.append(i)

对于比率2且n = 8:

预期结果:[1、2、4、8]

我得到的是:[2、4、6、8、10、12、14、16]

最重要的是,我只是想知道获取正确元素的正确算法是什么。或者,如果有更有效的方法来解决此问题。

7 个答案:

答案 0 :(得分:1)

如果我理解

r = 2 # set here the factor
geom_prog = []
x = 1 # first element and var to update
n = 8 # last element
for i in range(x, n+1):
    geom_prog.append(x)
    x *= r

编辑:

或更多pythonic

[start * ratio**i for i in range(n)] 参考:Python: Generate a geometric progression using list comprehension

答案 1 :(得分:0)

r = ratio
geom_prog = []
x = 1
while x <= n:
    geom_prog.append(x)
    x *= r

答案 2 :(得分:0)

问题不是将值限制为8,

for i in range(1, n+1): 

这是告诉程序循环运行n次。

尝试以下方法:

n = 8
r = 2
geom_prog = []

i = 1 ;
while(i*r <= n):
    geom_prog.append(i*r)
    i+=1 ;

#print(geom_prog) #returns [2, 4, 6, 8]

答案 3 :(得分:0)

通过遍历range(1, n+1),您将获得n个通过(您的情况是8个)。您要查找的终止标准是集合中的最新元素达到(或超过)n的时间。尝试一会儿循环:

>>> def geom(ratio, n):
...     series = [1]
...     while series[-1] < n:
...         series.append( series[-1] * ratio )
...     return series
...
>>>
>>> geom(2, 8)
[1, 2, 4, 8]

可能想添加一些代码来检查它是否会因您的参数而终止(例如,比率1与n> 1永远不会终止),但这应该会让您入门。

答案 4 :(得分:0)

使用简单的while循环:

>>> r = 2
>>> n = 8
>>> e = 1
>>> geom_prog = []
>>> while e <= n:
...     geom_prog.append(e)
...     e *= r
... 
>>> geom_prog
[1, 2, 4, 8]

答案 5 :(得分:0)

已经发布了一些好的答案,但也添加了这个答案。 您可以使用数学库来计算for循环上限以及进度中的每个元素,而无需过多更改逻辑。

import math
r= 2
geom_prog = []
n = 8
n = int(math.log(n, r))
for i in range(0, n+1):
    k = math.pow(r,i)
    geom_prog.append(k)

答案 6 :(得分:0)

假设您想提前知道要涉及多少个术语。

考虑以下问题,我们要在要求解m的位置处使ratio ^ m <= n。

然后我们有m <= log(n)/ log(ratio),因为m是整数,所以m <= int(log(n)/ log(ratio))

import math

n=8
ratio = 2
r= ratio
geom_prog = [1]
for i in range(1, int(math.log(n)/math.log(ratio))+1):
    geom_prog.append(geom_prog[-1] * r)

print(geom_prog)