有人問我一個問題,為什么下面的代碼會給出以下結果:
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 作為引數,如果 j 大于 1,則拒絕函式 find,則 find 函式中的引數 j 除以 10 122 % 10 = 2
print (j)– 呼叫函式 find 來顯示
從這一刻開始,我在掙扎。為什么是-2,-4 來自哪里?
uj5u.com熱心網友回復:
答案很可能是由于 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
uj5u.com熱心網友回復:
修改后的代碼版本以解釋它的作用以及原因如下:
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從結果中減去。所以在我們知道這會做什么之前,我們需要find(12).
find(12)檢查是否j > 1. 因為1不是> 1,這是假的,所以它回傳0。呼叫者然后從中減去 2,得到-2,它列印出來。
然后,find(122)取 的這個結果-2,并2從中減去一個附加值,所以它得到-4。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/359739.html
