我有一个小的Python(2.7.10)脚本,你可以在下面看到。
def numbers_calc(max_num, num_step):
"""Returns every number from 0 to max_num with num_step as step."""
n = 0
l = []
while n < max_num + 1:
l.append(n)
n += n * num_step
return l
n_l = []
n_l.append(numbers_calc(25, 1))
print "Here are the numbers."
print n_l
函数numbers_calc
用于获取所有给定的args,形成一个列表,并在它到达num_step
之前用数字(在计算时使用max_num + 1
)填充它。然后,该脚本会return
它的名为l
的本地列表。
但是,每次运行脚本时,都会遇到MemoryError
。这是Python运行脚本时返回的内容:
Traceback (most recent call last):
File "num.py", line 13, in <module>
n_l.append(numbers_calc(25, 1))
File "ex33.py", line 7, in numbers_calc
l.extend(i)
MemoryError
我试着查一下,没有看到任何帮助。我希望你能帮助我!
答案 0 :(得分:2)
n
从0开始。n += n * num_step
将0添加到n
。 n
永远不会更改,您的循环会不断将项目添加到列表中。
导致n
以某种方式改变。
答案 1 :(得分:1)
任何时候0
总是0
,因此您有一个无限循环设置n = 0
最初将n
设置为1:
def numbers_calc(max_num, num_step):
"""Returns every number from 0 to max_num with num_step as step."""
n = 1
l = []
while n < max_num + 1:
l.append(n)
n += n * num_step
print(n)
return l
n_l = []
n_l.append(numbers_calc(25, 1))
输出:
[[1, 2, 4, 8, 16]]
如果你想要一个数字列表,只需使用返回值:
nl = numbers_calc(25, 1)
哪个会给你[1, 2, 4, 8, 16]
如果你真的希望 0到max_num的所有数字,而num_step 使用+=
而不是*=
,并n
留在0
:
def numbers_calc(max_num, num_step):
"""Returns every number from 0 to max_num with num_step as step."""
n = 0
l = []
while n < max_num + 1:
l.append(n)
n += num_step
print(n)
return l
或只是通过步骤返回范围:
def numbers_calc(max_num, num_step):
"""Returns every number from 0 to max_num with num_step as step."""
return list(range(max_num + 1,num_step))
您应该知道,如果该步骤不是max_num
的倍数,那么您将无法获得max_num
,即numbers_calc(25, 2)
将转到24
。
答案 2 :(得分:1)
问题在于 -
n += n * num_step
在此,您将n
初始化为0
,然后将n
和num_step
相乘,其结果始终为0
,然后添加它到n
。因此n
始终位于0
。如果您尝试为每个num_step从0循环到max_num + 1,则应使用range()
函数,示例 -
def numbers_calc(max_num, num_step):
"""Returns every number from 0 to max_num with num_step as step."""
l = []
for i in range(0,max_num + 1,num_step):
l.append(i)
return l
答案 3 :(得分:0)
感谢大家的帮助!我甚至没有意识到那里有数学问题。谢谢你们!顺便说一下,这是我脚本的最终版本。
def numbers_calc(max_num, num_step):
"""Returns every number from 0 to max_num with num_step as step."""
i = 0
l = []
while i < max_num + 1:
l.append(i)
i += num_step
return l
n_l = numbers_calc(25, 5)
print "Here are the numbers."
print n_l