2016-07-02 51 views
-4

以下代碼將輸出「測試」的無限行。爲什麼在Python中使用整數值作爲'while'循環條件?

foo = 5 
while foo: 
    print("bar") 

有一天我在這裏遇到了一個有關數字的答案。這是在答案中顯示的代碼:

def digit_sum(t): 
    s = 0 
    while t: 
     s += t % 10 
     t //= 10 
    return s 

我關注的部分是「while t:」部分。這是如何和爲什麼這樣工作?

+2

0爲假且非零爲真。 – jordanm

+0

你能否更詳細地解釋你的問題?因爲,到目前爲止,我的答案會是這樣的:「這就是它的方式」。 –

+1

您可以通過閱讀文檔找到答案:https://docs.python.org/3/library/stdtypes.html#truth – Phillip

回答

4

while條件測試真相。任何非零數值被認爲是真的。看到Truth Value Testing section Python文檔中:

任何對象都可以用於真值進行測試,用於在ifwhile 條件或如下的布爾運算的操作數使用。 以下 值被認爲是假:

  • None

  • False

  • 任何數值類型的零,例如,00L0.00j

  • 任何空序列,例如'',(),[]

  • 任何空映射,例如,{}。用戶定義的類的

  • 情況下,如果類定義了一個 __nonzero__()__len__()方法中,當該方法返回整數零或布爾值False

所有其他值被認爲是真實的 - 這麼多種類的對象 總是如此。

大膽強調我的。

在你的樣品while循環,t趨勢0(整數除以10),所以最終while t:結束,因爲t被認爲是假的。

+0

請注意'__nonzero__'是Python 2,在Python 3中被重命名爲'__bool__'。 – cdarke

+0

我想我的問題不是很好,但非常感謝答案。 – UnderscoreZero

0

你已經得到了有用的答案,但我只是想以一種可以被Python中的初學者很容易理解的方式來回答你的問題。 你可以重寫代碼爲:

def digit_sum(t): 
    s = 0 
    while t!=0: 
     s += t % 10 
     t = t//10 
    return s 

「而T」等同於「而T = 0!」,這意味着當t等於0的循環將結束。

在for for循環中,'t // = 10'等同於't = t // 10'('//'是一個floor除法運算符並返回一個整數)。因此,每次執行循環時,t的值都會變小,直到它最終達到0的值。此時,'while t'條件爲False,循環結束。

相關問題