为什么需要使用eval将3**631 + 29输入到int函数?

use*_*777 0 python

res=0
num=int(input("Enter a positive integer:"))
while num>0:
     res=res+(num % 10)
     num=num//10
 print (res)
Run Code Online (Sandbox Code Playgroud)

为什么输入3**631+29是有问题的?为什么可以eval解决这个问题?正如我所看到的,程序输出将显示"逐步"对输入整数中的数字进行求和,因此它3**631+29是不是整数而是字符串?但是为什么要eval参与?

Hyp*_*eus 8

int采用整数文字作为参数(表示字符串),而不是任意算术表达式.

eval接受一个字符串并对其进行评估,即它"运行"它就好像它是代码一样.作为3**631+26一个有效的python表达式(3到631次幂和26的总和),eval适用于您的情况,但打开您的应用程序代码注入.(如果用户输入例如,会发生什么__import__('sys').exit(0)?)