目前,我已經撰寫了一個遞回函式來執行 sum_of_digits 但它適用于較小的數字,例如小于 6。
但是對于更大的數字,由于某種原因,計算會出錯。
def sum_of_digits(i):
if i == 0 :
return i
else:
return i % 10 sum_of_digits(i / 10)
sum_of_digits(228475)
# returns 31.111111111111107
# should be returning 28 instead
我在這里做錯了什么?
uj5u.com熱心網友回復:
您需要使用//整數除法,而不是/(浮點除法)。使用/會失去精度,從而導致您遇到錯誤。
def sum_of_digits(i):
if i == 0:
return i
return i % 10 sum_of_digits(i // 10)
print(sum_of_digits(228475)) # 28
它可以通過以下方式完成:
print(sum(map(int, str(228475)))) # 28
uj5u.com熱心網友回復:
您應該在第 5 行使用“整數除法(運算子 //)”而不是普通除法(運算子 /)。
...
return i % 10 sum_of_digits(i // 10)
...
整數除法回傳不大于正常除法結果的最大整數。例如,
5/2 = 2.5 => 5//2 = 2
-5/2 = -2.5 => -5//2 = -3
6/3 = 2.0 => 6//3 = 2
uj5u.com熱心網友回復:
有很多解決方案,但如果您對除法和模(%)不滿意,您可以使用此方法。只需將數字作為字串傳遞給函式。
def sum_of_digits(num, ind=0):
if ind == len(num):
return 0
return int(num[ind]) sum_of_digits(num,ind 1)
sum_of_digits(str(228475))
#RESULT = 28
uj5u.com熱心網友回復:
嘗試將您的值轉換為int型別:
def sum_of_digits(i):
if i == 0 :
return i
else:
return i % 10 sum_of_digits(int(i / 10))
print(sum_of_digits(228475))
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/426859.html
上一篇:嵌套的zip內容串列
下一篇:整數數的平方根
