4 回答

TA貢獻(xiàn)2019條經(jīng)驗(yàn) 獲得超9個(gè)贊
一個(gè)簡單的print
跟蹤你的值就會顯示問題:
number = number/10
您需要整數(shù)除法:
number = number//10
您的代碼計(jì)算無限總和,然后必須除以 10,直到內(nèi)部表示的剩余數(shù)字減少到 0。
一種更簡單的方法是獲取原始字符串輸入并將字符串的每個(gè)字符轉(zhuǎn)換為一位整數(shù)。添加這些整數(shù)。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超2個(gè)贊
您還可以這樣做:
number = int(input("Enter the Number: "))
sum_of_digits = 0
while number > 0:
digit = number % 10
sum_of_digits = sum_of_digits + digit
number = number // 10

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超5個(gè)贊
下面是一個(gè)使用原始問題中提供的示例作為起點(diǎn)的解決方案。
def find_sum_of_digits(number):
? ? result = 0 # Variable to store result
? ? while number > 0:
? ? ? ? digit = number % 10 # Current digit is remainder from number / 10
? ? ? ? result += digit # Add digit to result and assign value to result variable
? ? ? ? number //= 10 # Number is number // 10 to shift left to next digit, disregarding fractional part of quotient
? ? return result
請注意,除以 10 向左移到下一位時(shí),使用了下限除法運(yùn)算符(?//
) 而不是標(biāo)準(zhǔn)除法運(yùn)算符 (?/
) 。number
正是這種更改將阻止您獲得錯(cuò)誤的return
值(例如16
代替15
when?number = 555
)。
Python 向下除法返回int
表示兩個(gè)數(shù)字的截?cái)喑ǎ欢皇?a?float
(如 Python 中的標(biāo)準(zhǔn)除法那樣),這對于您的目的來說是必需的,因?yàn)槟魂P(guān)心 的數(shù)字int
,而不關(guān)心標(biāo)準(zhǔn)除法可能產(chǎn)生的任何小數(shù)部分 - 這些在number
您轉(zhuǎn)換回之前會被求和int
原始示例。
這是另一個(gè)有效的解決方案,可以產(chǎn)生所需的輸出。這次我們返回sum
函數(shù)的結(jié)果,該結(jié)果給出了int
表示 的每個(gè)數(shù)字的實(shí)例的列表理解number
。
def?find_sum_of_digits(number): ???return?sum([int(d)?for?d?in?str(number)])
在這種情況下,通過首先轉(zhuǎn)換為 a?,然后迭代每個(gè),將每個(gè)int
數(shù)字轉(zhuǎn)換回 ,找到表示 的每個(gè)數(shù)字。number
number
str
char
number
?str
int

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超8個(gè)贊
另一種解決方案是:
def find_sum_of_digits(number): return sum([int(n) for n in str(number)])
添加回答
舉報(bào)