# while語句
只要在一個條件為真的情況下,`while`語句允許你重復執行一塊語句。`while`語句是所謂 循環 語句的一個例子。`while`語句有一個可選的`else`從句。
```
#!/usr/bin/python
# Filename: while.py
number = 23
running = True
while running:
????guess = int(raw_input('Enter an integer : '))
????if guess == number:
????????print 'Congratulations, you guessed it.'
????????running = False # this causes the while loop to stop
????elif guess < number:
????????print 'No, it is a little higher than that'
????else:
????????print 'No, it is a little lower than that'
else:
????print 'The while loop is over.'
????# Do anything else you want to do here
print 'Done'
```
(源文件:[code/while.py](code/while.py))
## 輸出
```
$ python while.py
Enter an integer : 50
No, it is a little lower than that.
Enter an integer : 22
No, it is a little higher than that.
Enter an integer : 23
Congratulations, you guessed it.
The while loop is over.
Done
```
## 它如何工作
在這個程序中,我們仍然使用了猜數游戲作為例子,但是這個例子的優勢在于用戶可以不斷的猜數,直到他猜對為止——這樣就不需要像前面那個例子那樣為每次猜測重復執行一遍程序。這個例子恰當地說明了`while`語句的使用。
我們把`raw_input`和`if`語句移到了`while`循環內,并且在while循環開始前把`running`變量設置為`True`。首先,我們檢驗變量`running`是否為`True`,然后執行后面的 while-塊 。在執行了這塊程序之后,再次檢驗條件,在這個例子中,條件是`running`變量。如果它是真的,我們再次執行while-塊,否則,我們繼續執行可選的else-塊,并接著執行下一個語句。
當`while`循環條件變為`False`的時候,`else`塊才被執行——這甚至也可能是在條件第一次被檢驗的時候。如果`while`循環有一個`else`從句,它將始終被執行,除非你的`while`循環將永遠循環下去不會結束!
`True`和`False`被稱為布爾類型。你可以分別把它們等效地理解為值`1`和`0`。在檢驗重要條件的時候,布爾類型十分重要,它們并不是真實的值`1`。
else塊事實上是多余的,因為你可以把其中的語句放在同一塊(與`while`相同)中,跟在`while`語句之后,這樣可以取得相同的效果。
給C/C++程序員的注釋
記住,你可以在`while`循環中使用一個`else`從句。
- 版權信息
- 前言
- 本書的由來
- 本書目前的狀況
- 約定條款
- 反饋
- 值得思考的一些東西
- 第1章 介紹
- Python的特色
- 為什么不使用Perl?
- 程序員的話
- 第2章 安裝Python
- Windows?用戶
- 概括
- 第3章 最初的步驟
- 使用帶提示符的解釋器
- 挑選一個編輯器
- 使用源文件
- 可執行的Python程序
- 獲取幫助
- 概括
- 第4章 基本概念
- 數
- 字符串
- 變量
- 標識符的命名
- 數據類型
- 對象
- 邏輯行與物理行
- 縮進
- 概括
- 第5章 運算符與表達式
- 運算符
- 運算符優先級
- 表達式
- 概括
- 第6章 控制流
- if語句
- while語句
- for循環
- break語句
- continue語句
- 概括
- 第7章 函數
- 函數形參
- 局部變量
- 默認參數值
- 關鍵參數
- return語句
- DocStrings
- 概括
- 第8章 模塊
- 字節編譯的.pyc文件
- from..import語句
- 模塊的name
- 制造你自己的模塊
- dir()函數
- 概括
- 第9章 數據結構
- 列表
- 元組
- 字典
- 序列
- 參考
- 更多字符串的內容
- 概括
- 第10章 解決問題——編寫一個Python腳本
- 解決方案
- 軟件開發過程
- 概括
- 第11章 面向對象的編程
- self
- 類
- 對象的方法
- __init__方法
- 類與對象的方法
- 繼承
- 概括
- 第12章 輸入/輸出
- 儲存器
- 概括
- 第13章 異常
- try..except
- 引發異常
- try..finally
- 概括
- 第14章 Python標準庫
- sys模塊
- os模塊
- 概括
- 第15章 更多Python的內容
- 單語句塊
- 列表綜合
- 在函數中接收元組和列表
- lambda形式
- exec和eval語句
- assert語句
- repr函數
- 概括
- 第16章 接下來學習什么?
- 探索更多內容
- 概括
- 附錄A 自由/開放源碼軟件(FLOSS)
- 附錄B 關于本書
- 關于作者
- 關于譯者
- 關于簡體中文譯本
- 附錄C 修訂記錄
- 術語表