社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python逆向工程——为什么代码会产生这种特殊的结果

Curios about Python • 3 年前 • 1379 次点击  

有人问我为什么下面的代码会给出以下结果:

def find(j):
    if(j>1):
        j=find(j//10)-(j%10)
        print(j)
    else:
        j=0
    return j
i=122
k=find(i)

结果:

-2
-4

为什么会有这样的结果?以下是我目前掌握的情况:

def find(j) 以j为参数的函数find 如果j大于1,则find函数中的参数j除以10 122 % 10 = 2 print (j) –调用函数find来显示

从这一点开始,我在挣扎。为什么-2和-4来自哪里?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130691
 
1379 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Charles Duffy
Reply   •   1 楼
Charles Duffy    3 年前

修改代码的一个版本,以解释它在做什么以及为什么要这样做:

def find(j):
    if(j>1):
        find_result = find(j//10)
        new_j = find_result - (j%10)
        print("j == %r; find(%r) => %r; find(%r) - %r => %r" % (
            j, (j//10), find_result, (j//10), j % 10, new_j))
        j = new_j
    else:
        j=0
    return j

i=122
k=find(i)

...其产出如下:

j == 12; find(1) => 0; find(1) - 2 => -2
j == 122; find(12) => -2; find(12) - 2 => -4

所以:首先,你从 j=122 因此,它可以计算 find(12) 减去 2 从结果来看。所以,在我们知道这将做什么之前,我们需要 查找(12) .

查找(12) 检查是否 j > 1 因为 1 不是 > 1 ,这是假的,所以它返回 0 .调用方从中减去2,得到 -2 ,它会打印出来。

然后 find(122) 把这个结果 -2 ,并减去一个额外的 2. 从中得到,所以 -4 .

Samwise
Reply   •   2 楼
Samwise    3 年前

答案可能是由于Python版本的不同。Python的现代版本 / 作为浮点除法,即使操作数是整数。Python2相当于 // (整数除法)如果操作数是整数。

如果我修改你的代码使用int除法(这似乎是我的意图,因为它也使用 % 操作员)然后我得到了预期的结果:

>>> def find(j):
...     if(j>1):
...         j=find(j/10)-(j%10)
...         print(j)
...     else:
...         j=0
...     return j
...
>>> find(122)
-1.22
-3.419999999999999
-5.419999999999999
-5.419999999999999
>>> def find(j):
...     if(j>1):
...         j=find(j//10)-(j%10)
...         print(j)
...     else:
...         j=0
...     return j
...
>>> find(122)
-2
-4
-4