我是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
为什么会这样?我构建这个等式的方式有问题吗?你知道吗
如前所述,问题是行
calories = 48,600
。你知道吗问题是,由于右侧的
,
,这与calories = (48, 600)
相同,后者是tuple
。对于元组,乘法意味着“重复元组n
次”。例如2 * (48, 600) == (48, 600, 48, 600)
。你知道吗但是既然你做了
5280**3 * calories
,这就是试图分配一个包含2 * 5280**3 = 294395904000
元素的元组,它看起来太大了,无法放入你的内存(假设每个值64位,这将是2.14tib,比大多数人的内存都大)。你知道吗请注意,在Python 3.6+中,可以使用
_
作为千的分隔符:您正在尝试打印元组
(48, 600)
(这是您在编写calories = 48,600
)147197952000
次时得到的结果。你知道吗您的输出将是:
你的电脑根本无法处理你想一次转储的大约
1324781568000
个字符。你知道吗与其使用
,
作为千位分隔符,您应该只写48600
。你知道吗输出:
编辑:
实际上,并不是打印或创建这么大的字符串失败了,因为至少对我来说,Python在尝试创建指向元组的
147197952000
指针时会耗尽内存,您可以通过只运行(48,600) * 147197952000
来测试。你知道吗相关问题 更多 >
编程相关推荐