# 練習30. Else 和 If
上一節習題中你寫了一些“if語句(if-statements)”,并且試圖猜出它們實現的是什么功能。在你繼續學習之前,我給你解釋一下上一節的附加題的答案。上一節的附加習題你做過了吧
> 1. 認為 `if` 對于它下一行的代碼做了什么?`If語句`為代碼創建了一個所謂的“分支”, 這有點像選擇自己毛線的書籍,你做了選擇會打開一個頁面,如果做了另一個選擇,會到一個不同的方向。`if`語句告訴你的腳本:“如果這個布爾表達式是真的,就執行它下面的語句,否則就跳過這段代碼”。
> 1. 為什么 if 語句的下一行需要縮進?代碼的最后又一個冒號“:”,是告訴python要創建一個新代碼塊的方式,縮進4個空格,是標志那些代碼屬于這個代碼塊。這和你在本書的上半部分中定義函數的做法是一樣的。
> 1. 如果不縮進,會怎樣?如果沒有縮進,你的代碼將會報錯,Python需要你在輸入一行以冒號結尾的代碼后有縮進。
> 1. 把習題 27 中的其它布爾表達式放到if語句中能不能運行呢?試一下。 可以。而且不管多復雜都可以,雖然寫復雜的東西并不是一種好的編程風格。
> 1. 如果把變量`people`,`cats`,和`dogs`的初始值改掉,會怎樣?因為你比較的對象是數字,如果你把這些數字改掉的話,某些位置的`if`語句會被演繹為 True,而它下面的代碼區段將被運行。你可以試著修改這些數字,然后在頭腦里假想一下那一段代碼會被運行。
對比咱們的答案,確認自己真正懂得“代碼塊”的含義。這點對于你下一節的練習很重要,因為你將會寫很多的 if 語句。
把下面這段寫下來,并讓它運行起來:
~~~
people = 30
cars = 40
trucks = 15
if cars > people:
print "We should take the cars."
elif cars < people:
print "We should not take the cars."
else:
print "We can't decide."
if trucks > cars:
print "That's too many trucks."
elif trucks < cars:
print "Maybe we could take the trucks."
else:
print "We still can't decide."
if people > trucks:
print "Alright, let's just take the trucks."
else:
print "Fine, let's stay home then."
~~~
## 你看到的結果
~~~
$ python ex30.py
We should take the cars.
Maybe we could take the trucks.
Alright, let's just take the trucks.
~~~
## 附加題
> 1. 想一下`elif` 和 `else` 的功能。
> 1. 將 `cars`, `people`, 和 `buses` 的數量改掉,然后追溯每一個 `if` 語句。看看最后會打印出什么來。
> 1. 試著寫一些復雜的布爾表達式,例如 `cars > people` 和 `buses < cars`等。
> 1. 給每一行加上注釋,解釋每一句代碼是什么功能。1
## 常見問題
### Q: 如果多個`elif`塊為真,會怎樣?
> Python的啟動和運行只會針對第一個為真的代碼塊,所以你說的那種情況,只會執行第一塊。
- 序言
- 前言
- 簡介
- 0:安裝和準備
- 1:第一個程序
- 2:注釋和“#”井號
- 3:數字和數學計算
- 4:變量和命名
- 5:更多的變量和打印
- 6:字符串和文本
- 7:更多的打印(輸出)
- 8:打印, 打印
- 9:打印, 打印, 打印
- 10:那是什么?
- 11:提問
- 12:提示別人
- 13:參數, 解包, 變量
- 14:提示和傳遞
- 15:讀文件
- 16:讀寫文件
- 17:更多文件操作
- 18:命名, 變量, 代碼, 函數
- 19:函數和變量
- 20:函數和文件
- 21:函數的返回值
- 22:到目前為止你學到了什么?
- 23:閱讀代碼
- 24:更多的練習
- 25:更多更多的練習
- 26:恭喜你,可以進行一次考試了
- 27:記住邏輯
- 28:布爾表達式
- 29:IF 語句
- 30:Else 和 If
- 31:做出決定
- 32:循環和列表
- 33:while循環
- 34:訪問列表元素
- 35:分支和函數
- 36:設計和調試
- 37:復習符號
- 38:列表操作
- 39:字典,可愛的字典
- 40:模塊, 類和對象
- 41:學會說面向對象
- 42:對象、類、以及從屬關系
- 43:基本的面向對象的分析和設計
- 44:繼承Vs.包含
- 45:你來制作一個游戲
- 46:項目骨架
- 47:自動化測試
- 48:更復雜的用戶輸入
- 49:寫代碼語句
- 50:你的第一個網站
- 51:從瀏覽器獲取輸入
- 52:開始你的web游戲
- 來自老程序員的建議
- 下一步
- 附錄A:命令行教程
- 簡介
- 安裝和準備
- 路徑, 文件夾, 名錄 (pwd)
- 如果你迷路了
- 創建一個路徑 (mkdir)
- 改變當前路徑 (cd)
- 列出當前路徑 (ls)
- 刪除路徑 (rmdir)
- 目錄切換(pushd, popd)
- 生成一個空文件(Touch, New-Item)
- 復制文件 (cp)
- 移動文件 (mv)
- 查看文件 (less, MORE)
- 輸出文件 (cat)
- 刪除文件 (rm)
- 退出命令行 (exit)
- 下一步