看官是否記得,在上一部分的時候,有一講專門介紹if語句的:[從if開始語句的征程](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/111.md)。在學習if語句的時候,對python編程的基礎知識了解的還不是很多,或許沒有做什么太復雜的東西。本講,要對它進行一番復習,通過復習提高一下。如果此前有的東西忘記了,建議首先回頭,看看前面那講。
## 基本語句結構
~~~
if 判斷條件1:
執行語句1……
elif 判斷條件2:
執行語句2……
elif 判斷條件3:
執行語句3……
else:
執行語句4……
~~~
只有當“判斷條件”的值是True的時候,才執行下面的執行語句。
那么,在python中,怎么知道一個判斷條件是不是真呢?這個問題我們在[眼花繚亂的運算符](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/110.md)中已經講解了一種數據類型:布爾類型。可以通過一個內置函數bool()來判斷一個條件的結果True還是False。看看下面的例子,是不是能夠理解bool()的判斷規則?
~~~
>>> bool("")
False
>>> bool(0)
False
>>> bool('none')
True
>>> bool(False)
False
>>> bool("False")
True
>>> bool(True)
True
>>> bool("True")
True
>>> bool(3>4)
False
>>> bool("b">"a")
True
>>> bool(not "")
True
>>> bool(not True)
False
~~~
忘記了怎么辦?看下面的語句:
~~~
if 忘記:
復習-->眼花繚亂的運算符一講
~~~
在執行語句中,其實不一定非要把bool()寫上的。如同這樣:
~~~
>>> x = 9
>>> if bool(x>7): #條件為True則執行下面的
... print "%d more than 7"%x
... else:
... print "%d not more than 7"%x
...
9 more than 7
>>> if x>7:
... print "%d more than 7"%x
... else:
... print "%d not more than 7"%x
...
9 more than 7
~~~
以上兩個寫法是等效的,但是,在實際的編程中,我們不用if bool(x>7)的格式,而是使用if x>7的樣式,還要特別提醒,如果寫成if (x>7),用一個括號把條件表達式括起來,是不是可以呢?可以,但也不是python提倡的。
~~~
>>> if (x>7): #不提倡這么寫,這不是python風格
... print "%d more than 7"%x
...
9 more than 7
~~~
## 拉出來溜溜
平時總有人在不服氣的時候說“是騾子是馬,拉出來溜溜”,趙本山有一句名言“走兩步”。其本質都是說“光說不練是假把式”。今天收到一個朋友的郵件,也詢問,在學習python的時候,記不住python的內容。其實不用記,我在前面的課程中已經反復講過了。但是,在應用中,會越來越熟練。
下面就做一個練習,要求是:
1. 接收任何字符和數字的輸入
2. 判斷輸入的內容,如果不是整數是字符,就告訴給用戶;如果是小數,也告訴用戶
3. 如果輸入的是整數,判斷這個整數是奇數還是偶數,并且告訴給用戶
在這個練習中,顯然要對輸入的內容進行判斷,以下幾點需要看官注意:
* 通過raw_input()得到的輸入內容,都是str類型
* 要判斷一個字符串是否是由純粹數字組成,可以使用str.isdigit()(建議看官查看該內置函數官方文檔)
下面的代碼是一個參考:
~~~
#! /usr/bin/env python
#coding:utf-8
print "請輸入字符串,然后按下回車鍵:"
user_input = raw_input()
result = user_input.isdigit()
if not result:
print "您輸入的不完全是數字"
elif int(user_input)%2==0:
print "您輸入的是一個偶數"
elif int(user_input)%2!=0:
print "您輸入的是一個奇數"
else:
print "您沒有輸入什么呢吧"
~~~
特別提醒列為,這個代碼不是非常完善的,還有能夠修改的地方,看官能否完善之?
再來一個如何?
已知一個由整數構成的list,從中跳出奇數和偶數,并且各放在一個list中。
請看官在看下面的參考代碼之前,自己寫一寫。
~~~
#!/usr/bin/env python
#coding:utf-8
import random
numbers = [random.randint(1,100) for i in range(20)] #以list解析的方式得到隨機的list
odd = []
even = []
for x in numbers:
if x%2==0:
even.append(x)
else:
odd.append(x)
print numbers
print "odd:",odd
print "even:",even
~~~
用這個例子演示一下if在list解析中的應用。看能不能繼續改進一些呢?
可以將循環的那部分用下面的list解析代替
~~~
#!/usr/bin/env python
#coding:utf-8
import random
numbers = [random.randint(1,100) for i in range(20)] #以list解析的方式得到隨機的list
odd = [x for x in numbers if x%2!=0]
even = [x for x in numbers if x%2==0]
print numbers
print "odd:",odd
print "even:",even
~~~
## 一個有趣的賦值--三元操作符
對賦值,看官應該比較熟悉了吧,如果要復習,請看[《賦值,簡單也不簡單》](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/127.md)以及[《正規地說一句》](https://github.com/qiwsir/ITArticles/blob/master/BasicPython/201.md)的相關內容。
這里說的有趣賦值是什么樣子的呢?請看:
~~~
>>> name = "qiwsir" if "laoqi" else "github"
>>> name
'qiwsir'
>>> name = 'qiwsir' if "" else "python"
>>> name
'python'
>>> name = "qiwsir" if "github" else ""
>>> name
'qiwsir'
~~~
總結一下:A = Y if X else Z
什么意思,結合前面的例子,可以看出:
* 如果X為真,那么就執行A=Y
* 如果X為假,就執行A=Z
> > > x = 2 y = 8 a = "python" if x>y else "qiwsir" a 'qiwsir' b = "python" if x<y else "qiwsir" b 'python'
再看看上面的例子,是不是這樣執行呢?
if語句似乎簡單,但是在編程時間中常用到。勤加練習吧。
- 第零部分 獨上高樓,望盡天涯路
- 嘮叨一些關于Python的事情
- 為什么要開設本欄目
- 第一部分 積小流,至江海
- Python環境安裝
- 集成開發環境(IDE)
- 數的類型和四則運算
- 啰嗦的除法
- 開始真正編程
- 初識永遠強大的函數
- 玩轉字符串(1):基本概念、字符轉義、字符串連接、變量與字符串關系
- 玩轉字符串(2)
- 玩轉字符串(3)
- 眼花繚亂的運算符
- 從if開始語句的征程
- 一個免費的實驗室
- 有容乃大的list(1)
- 有容乃大的list(2)
- 有容乃大的list(3)
- 有容乃大的list(4)
- list和str比較
- 畫圈還不簡單嗎
- 再深點,更懂list
- 字典,你還記得嗎?
- 字典的操作方法
- 有點簡約的元組
- 一二三,集合了
- 集合的關系
- Python數據類型總結
- 深入變量和引用對象
- 賦值,簡單也不簡單
- 坑爹的字符編碼
- 做一個小游戲
- 不要紅頭文件(1): open, write, close
- 不要紅頭文件(2): os.stat, closed, mode, read, readlines, readline
- 第二部分 窮千里目,上一層樓
- 正規地說一句話
- print能干的事情
- 從格式化表達式到方法
- 復習if語句
- 用while來循環
- 難以想象的for
- 關于循環的小伎倆
- 讓人歡喜讓人憂的迭代
- 大話題小函數(1)
- 大話題小函數(2)
- python文檔
- 重回函數
- 變量和參數
- 總結參數的傳遞
- 傳說中的函數條規
- 關于類的基本認識
- 編寫類之一創建實例
- 編寫類之二方法
- 編寫類之三子類
- 編寫類之四再論繼承
- 命名空間
- 類的細節
- Import 模塊
- 模塊的加載
- 私有和專有
- 折騰一下目錄: os.path.<attribute>
- 第三部分 昨夜西風,亭臺誰登
- 網站的結構:網站組成、MySQL數據庫的安裝和配置、MySQL的運行
- 通過Python連接數據庫:安裝python-MySQLdb,連接MySQL
- 用Pyton操作數據庫(1):建立連接和游標,并insert and commit
- 用Python操作數據庫(2)
- 用Python操作數據庫(3)
- python開發框架:框架介紹、Tornado安裝
- Hello,第一個網頁分析:tornado網站的基本結構剖析:improt模塊、RequestHandler, HTTPServer, Application, IOLoop
- 實例分析get和post:get()通過URL得到數據和post()通過get_argument()獲取數據
- 問候世界:利用GAE建立tornado框架網站
- 使用表單和模板:tornado模板self.render和模板變量傳遞
- 模板中的語法:tornado模板中的for,if,set等語法
- 靜態文件以及一個項目框架
- 模板轉義
- 第四部分 暮然回首,燈火闌珊處
- requests庫
- 比較json/dictionary的庫
- defaultdict 模塊和 namedtuple 模塊
- 第五部分 Python備忘錄
- 基本的(字面量)值
- 運算符
- 常用的內建函數
- 擴展閱讀(來自網絡文章)
- 人生苦短,我用Python