2017-09-26 61 views
0

我是python新手,正在尋找一個函數的代碼,用戶輸入和整數,函數添加並返回數字的數字總和。如何使用'while'變量':'

的代碼是這樣的:

def sum_digits(n): 
    s = 0 
    while n: 
     s += n % 10 
     n //= 10 
    return s 

所以我知道while循環是如何工作的,但我不能繞到我的頭(我也不是能夠找到谷歌什麼)如何工作的。我認爲while循環總是有一個條件,比如'while n < 10'或者排序。

「n:'說的是什麼?這段代碼是如何工作的?代碼如何知道如何停止運行,以及它究竟如何返回數字的總和(我所看到的只是返回s/n的剩餘部分)。

感謝您的幫助和抱歉的任何愚蠢的問題。

+0

https://docs.python.org/3/ reference/expressions.html#布爾操作 –

+0

請參閱[文檔](https://docs.python.org/3/librar Y/stdtypes.html#真值測試)。對象可以是「真實的」或「虛假的」。例如,非零浮點對象是「真」,空容器('[],(),{})'是*假* –

+0

可能重複的[Python中字符串的真值](https:/ /stackoverflow.com/questions/18491777/truth-value-of-a-string-in-python)。從這個問題的答案:'0的數值被認爲是錯誤的(儘管字符串值'0'被認爲是真的)。 所有其他表達式都被視爲True。 ' –

回答

0

while n:相當於while n!=0:(在這種情況下,當您處理數字時)。由於python中的每個值都有一個布爾值,對於任何不等於零的數字,bool(n) == True(如果n等於零),bool(n) == False

該函數可以這樣寫(感謝@讓FrançoisFabre的建議使用divmod):

def sum_digits(n): 
    s = 0 
    while n != 0: 
     n, t = divmod(n, 10) # to not use division and modulo separately 
     # n has the value of n//10, t has the value of n%10 
     s += t 
    return s 

print(sum_digits(154)) # => 10 
print(sum_digits(134)) # => 8 
print(sum_digits(987)) # => 24 
+0

或'n,s = divmod(n,10)'來代替modulo +除法 –

+0

@ Jean-FrançoisFabre謝謝,你對'divmod'說得對,但他正在增加's',沒有設置它,所以div部分需要設置爲臨時變量。 –

0

while隱式調用bool上的說法。所以只要在你的例子中bool(n)Truewhile循環繼續。

Pythons documentation for builtin types指出,任何數量的不同之處零被認爲是TRUE:

默認情況下,除非它的類定義或者是__bool__()方法返回False或返回零的__len__()方法的對象被認爲是真實的,當用對象調用。以下是大多數被認爲是假的內置對象:

  • 定義爲false的常量:無和False。
  • 任何數值類型的零:0,0.0,0J,十進制(0),級分(0,1)
  • 空序列和集合: '',(),[],{},()設置,範圍(0)

所以基本上while n循環將繼續下去,直到n變爲零(或你breakreturnraise ...)