2017-07-31 90 views
0
sum, Nr = 0, 12 
i = Nr 
while i: 
    sum += i 
    i -= 1 
print ('The sum of all natural numbers up to (and inclusive of) ' + repr(Nr) + 
' is ' + repr(sum)) 

所以這是一個非常簡單的while循環,在python 3中返回「所有自然數的總和(包括)12是78」的預期。有人能告訴我爲什麼這個while循環在Python中工作嗎?

我感到困惑的是,當「我」不受任何比較運算符影響時,爲什麼這個條件「while i:」在這裏工作。

謝謝!

+1

請注意,負數也是真的...所以不要把'i - = 1'改成任何不會完全匹配'0'並結束循環的東西......例如:'我 - = 7'永遠不會結束... –

+0

謝謝!我剛剛開始編程,並且truthy falsy幫助了很多! –

回答

1

在條件語句,輸入被隱含轉換成布爾值,因此在循環相當於

while bool(i): 
    ... 

bool(i)True只要i != 0,和False如果i == 0,所以循環進入直到i變爲零。

0

Python通過將其轉換爲布爾值自動計算傳遞給它的變量的值truthy。由於i是一個非零的正整數,在Python中被認爲是真的,這就是它工作的原因,直到它最終變爲0,這被認爲是錯誤的。

>>> print(bool(3)) 
True 
>>> print(bool(0)) 
False 
+0

0絕對不被視爲否定。 –

+0

@MarkDickinson糾正了這一點。 – hspandher

1

Python似乎用i not equals zero(僞代碼)進行隱式替換。見documentation

1

While期望的表達,如果它是true是運行循環。

while_stmt :: = 「而」 表達 「:」 套件 [ 「其他」 「:」 套件]

In [38]: bool(Nr) 
Out[38]: True 
1

在Python中,值是鴨鍵入 - 這意味着什麼是解釋者可以嘗試將價值符合你所說的任何環境。零以外的所有數字都是 'truthy',所以例如

if 3: # True 

而零是falsy:

if 0: # False 
+1

所有的值都低於零也是真的。 –

+1

更正了答案@ Jean-FrançoisFabre:) – Barnabus

1

while環路期望任何條件或者TrueFalse。當您編寫while i(假設爲i = 5)時,其評估爲True,因此該循環會繼續,但遇到i=0時,它將被評估爲False並且循環中斷。

相關問題