我是python的初学者,正在从事希望进行的入门编程项目:
估算一立方英里的巧克力冰淇淋中的卡路里数量。 注意:一英里有5280英尺,一立方英尺的巧克力冰淇淋含有约48600卡路里。
我的代码:
Onemile = 5280
cubicmile = 5280**3
calories = 48,600
print("Number of calories per cubic mile:",cubicmile*calories)
输出:
Traceback (most recent call last):
File "<ipython-input-100-90c2410fa01f>", line 4, in <module>
print("Number of calories per cubic mile:",cubicmile*calories)
MemoryError
为什么会这样?我建立方程式的方式有问题吗?
答案 0 :(得分:4)
如上所述,问题出在calories = 48,600
行。
问题在于,由于右侧的,
与calories = (48, 600)
(即tuple
)相同。对于元组,乘法意味着“将元组重复n
次”。所以例如2 * (48, 600) == (48, 600, 48, 600)
。
但是,由于您执行5280**3 * calories
,所以此操作试图分配一个包含2 * 5280**3 = 294395904000
元素的元组,这似乎太大了,无法容纳到内存中(假设每个值64位,则为2.14 TiB ,这比大多数人的记忆大)。
请注意,在Python 3.6+中,您可以将_
用作成千上万个分隔符:
calories = 48_600
答案 1 :(得分:3)
您正在尝试打印元组uint8
(这是您写(48, 600)
时得到的结果)calories = 48,600
次。
您的输出将为:
147197952000
您的电脑根本无法处理大约。您要一次转储的Number of calories per cubic mile: (48, 600, 48, 600, 48, 600, ... , 48, 600)
个字符。
您应该只写1324781568000
,而不是使用,
作为千位分隔符。
48600
输出:
Onemile = 5280
cubicmile = 5280**3
calories = 48600
print("Number of calories per cubic mile:",cubicmile*calories)
编辑:
实际上,并不是打印或创建如此大的字符串失败,因为至少对我来说,似乎在尝试创建指向元组的Number of calories per cubic mile: 7153820467200000
指针时,Python会耗尽内存,您可以只运行147197952000
进行测试。