给出大于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]
最重要的是,我只是想知道获取正确元素的正确算法是什么。或者,如果有更有效的方法来解决此问题。
答案 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)