一点沙 发表于 2023-1-23 17:43:25

难题求解

本帖最后由 一点沙 于 2023-1-24 16:13 编辑

小甲鱼在《零基础入门学习Python》第一版里第006讲里的动动手第1道题的答案说系统会输出Memory Overflow 那为啥我的报错了呢???
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
print(2 ** 2 ** 32)
ValueError: Exceeds the limit (4300) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit

dolly_yos2 发表于 2023-1-23 17:43:26

这是 3.11 版本新增的功能,限制(除了2的整次幂进制)的数字字符串和整数表示之间的转换的最大长度(即:禁止将太长的数字字符串转换为整型或反之)来减小拒绝服务攻击的攻击面
https://docs.python.org/3/library/stdtypes.html#integer-string-conversion-length-limitation

ba21 发表于 2023-1-23 18:20:04

(2**2)**32 != 2**(2**32)

自已理解下

小甲鱼的二师兄 发表于 2023-1-23 18:27:42

2 ** 2 ** 32 相当于 2 ** (2 ** 32)

一点沙 发表于 2023-1-23 18:29:54

我是问为什么我报错了,他没有报

ba21 发表于 2023-1-23 18:40:31

一点沙 发表于 2023-1-23 18:29
我是问为什么我报错了,他没有报

哪只能说明你的电脑没有人家的配置高。python版本也是一个问题 。

小甲鱼的二师兄 发表于 2023-1-23 18:51:08

一点沙 发表于 2023-1-23 18:29
我是问为什么我报错了,他没有报

这就得看内存大小啦

sfqxx 发表于 2023-1-23 18:52:03

ba21 发表于 2023-1-23 18:40
哪只能说明你的电脑没有人家的配置高。python版本也是一个问题 。

应该有一条语句可以扩大范围的吧
我去找找

小甲鱼的二师兄 发表于 2023-1-23 18:54:28

print(2 ** 2 ** 32)

翻了一下老师的答案,也是说这么写会爆内存的:

# 一般很多机子都会在一会儿之后:Memory Overflow,内存不够用。
# 设计到幂操作,结果都是惊人滴。

一点沙 发表于 2023-1-23 19:43:42

dolly_yos2 发表于 2023-1-23 19:06
这是 3.11 版本新增的功能,限制(除了2的整次幂进制)的数字字符串和整数表示之间的转换的最大长度(即: ...

我用的就是3.11

ba21 发表于 2023-1-23 20:07:29

本帖最后由 ba21 于 2023-1-23 20:10 编辑

为此不得不去翻开你说的动动手看看。
学习得仔细


输出 Memory Overflow也是报错。不同python可能报不同的错误。
页: [1]
查看完整版本: 难题求解