首页 > 解决方案 > Python 逆向工程——为什么代码会产生这个特定的结果

问题描述

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

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 来自哪里?

标签: pythonif-statementmodulo

解决方案


答案可能是由于 Python 版本的差异。/即使操作数是整数,现代版本的 Python 也将其视为浮点除法。如果操作数是整数,则Python 2 相当于//(int 除法)。

如果我修改您的代码以使用 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

推荐阅读