天天看點

第四章 Python運算符與流程控制

在第一章的時候講解了運算操作符和指派操作符,這章來學習下其他常用操作符。

4.1 基本運算符

4.1.1 比較操作符

操作符

描述

示例

==

相等

>>> 1 == 1  True

!=

不相等

>>> 1 != 1 False

>

大于

>>> 2 > 1   True

<

小于

>>> 2 < 1  False

>=

大于等于

>>> 1 >= 1  True

<=

小于等于

>>> 1 <= 1  True

4.1.2 邏輯運算符

邏輯運算符常用于表達式判斷。

and

or

not

示例:

1

2

3

4

5

6

7

8

9

10

11

12

<code>&gt;&gt;&gt; a </code><code>=</code> <code>"a"</code>

<code>&gt;&gt;&gt; b </code><code>=</code> <code>"b"</code>

<code>&gt;&gt;&gt; a </code><code>and</code> <code>b</code>

<code>'b'</code>

<code>&gt;&gt;&gt; a </code><code>or</code> <code>b</code>

<code>'a'</code>

<code>&gt;&gt;&gt; a </code><code>=</code> <code>""</code>

<code>''</code>

and操作符判斷表達式,如果a和b都為真,傳回b的值,否則傳回a的值。

or操作符也是判斷表達式,如果a和b都為真,傳回a的值,否則傳回b的值。

類似于shell裡的&amp;&amp;和||:[ 'a' == 'b' ] &amp;&amp; echo no || echo yes

13

14

<code>&gt;&gt;&gt; </code><code>if</code> <code>not</code> <code>a:   </code>

<code>...   </code><code>print</code> <code>"yes"</code>

<code>... </code><code>else</code><code>:       </code>

<code>...   </code><code>print</code> <code>"no"</code>

<code>...</code>

<code>yes</code>

<code>... </code><code>else</code><code>:</code>

<code>no</code>

not操作符用于布爾值(true和false)判斷不為真,與if語句連用。上面是不為真用not,那為真時怎麼弄呢?

<code>&gt;&gt;&gt; </code><code>if</code> <code>a:</code>

4.1.3 成員運算符

in

在對象裡

not in 

不在對象裡

15

<code>&gt;&gt;&gt; </code><code>'a'</code> <code>in</code> <code>'abc'</code>

<code>True</code>

<code>&gt;&gt;&gt; </code><code>'d'</code> <code>in</code> <code>'abc'</code>

<code>False</code>

<code>&gt;&gt;&gt; lst </code><code>=</code> <code>[</code><code>'a'</code><code>,</code><code>'b'</code><code>,</code><code>'c'</code><code>]</code>

<code>&gt;&gt;&gt; </code><code>'a'</code> <code>in</code> <code>lst</code>

<code>&gt;&gt;&gt; </code><code>'d'</code> <code>in</code> <code>lst</code>

<code>&gt;&gt;&gt; </code><code>'a'</code> <code>not</code> <code>in</code> <code>'abc'</code>

<code>&gt;&gt;&gt; </code><code>'d'</code> <code>not</code> <code>in</code> <code>'abc'</code>   

<code>&gt;&gt;&gt; </code><code>'d'</code> <code>not</code> <code>in</code> <code>lst</code>

4.1.4 辨別運算符

is

記憶體位址相等

is not 

記憶體位址不相等

<code>&gt;&gt;&gt; a </code><code>=</code> <code>[]</code>

<code>&gt;&gt;&gt; b </code><code>=</code> <code>[]</code>

<code>&gt;&gt;&gt; </code><code>id</code><code>(a)</code>

<code>139741563903296</code>

<code>&gt;&gt;&gt; </code><code>id</code><code>(b)</code>

<code>139741563902144</code>

<code>&gt;&gt;&gt; a </code><code>is</code> <code>b</code>

<code>&gt;&gt;&gt; a </code><code>is</code> <code>not</code> <code>b</code>

這裡用到了id()函數,用于擷取對象在記憶體的位址。

4.2 條件判斷

4.2.1 單分支

<code>&gt;&gt;&gt; a </code><code>=</code> <code>20</code>    

<code>&gt;&gt;&gt; </code><code>if</code> <code>a &lt; </code><code>18</code><code>: </code>

有時候一個簡單的判斷語句,感覺這樣寫麻煩,有沒有一條指令搞定的。

有的,簡寫if語句:

<code>&gt;&gt;&gt; result </code><code>=</code> <code>(</code><code>"yes"</code> <code>if</code> <code>a </code><code>=</code><code>=</code> <code>20</code> <code>else</code> <code>"no"</code><code>)</code>

<code>&gt;&gt;&gt; result</code>

<code>'yes'</code>

<code>&gt;&gt;&gt; </code><code>type</code><code>(result)</code>

<code>&lt;</code><code>type</code> <code>'str'</code><code>&gt;</code>

<code>    </code> 

<code># 有時會看到别人代碼用中括号,意思把結果存儲為一個清單</code>

<code>&gt;&gt;&gt; result </code><code>=</code> <code>[</code><code>"yes"</code> <code>if</code> <code>a </code><code>=</code><code>=</code> <code>20</code> <code>else</code> <code>"no"</code><code>]    </code>

<code>[</code><code>'yes'</code><code>]</code>

<code>&lt;</code><code>type</code> <code>'list'</code><code>&gt;</code>

4.2.2 多分支

<code>&gt;&gt;&gt; a = 20</code>

<code>&gt;&gt;&gt; </code><code>if</code> <code>a &lt; 18:</code>

<code>...   print </code><code>"no"</code>

<code>... </code><code>elif</code> <code>a == 20:</code>

<code>...   print </code><code>"yes"</code>

<code>...   print </code><code>"other"</code>

4.2.3 pass語句

<code>&gt;&gt;&gt; </code><code>if</code> <code>a &lt; </code><code>18</code><code>:</code>

<code>... </code><code>elif</code> <code>a </code><code>=</code><code>=</code> <code>20</code><code>:</code>

<code>...   </code><code>pass</code>

<code>...   </code><code>print</code> <code>"other"</code>

pass語句作用是不執行目前代碼塊,與shell中的冒号做作用一樣。

部落格位址:http://lizhenliang.blog.51cto.com

QQ群:Shell/Python運維開發群 323779636

4.3 循環語句

4.3.1 for

1)疊代對象

周遊字元串,每個字元當做單個周遊:

<code>&gt;&gt;&gt; </code><code>for</code> <code>i </code><code>in</code> <code>"abc"</code><code>:        </code>

<code>...   </code><code>print</code> <code>i</code>

<code>a</code>

<code>b</code>

<code>c</code>

使用range()函數生成一個數字序列清單,并周遊:

<code>&gt;&gt;&gt; </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>,</code><code>5</code><code>):        </code>

<code>1</code>

<code>2</code>

<code>3</code>

<code>4</code>

回顧下第三章講的周遊字典:

<code>&gt;&gt;&gt; d </code><code>=</code> <code>{</code><code>'a'</code><code>:</code><code>1</code><code>, </code><code>'b'</code><code>:</code><code>2</code><code>, </code><code>'c'</code><code>:</code><code>3</code><code>}        </code>

<code>&gt;&gt;&gt; </code><code>for</code> <code>i </code><code>in</code> <code>d.iteritems():</code>

<code>...   </code><code>print</code> <code>"%s:%s"</code> <code>%</code><code>(i[</code><code>0</code><code>],i[</code><code>1</code><code>])</code>

<code>a:</code><code>1</code>

<code>c:</code><code>3</code>

<code>b:</code><code>2</code>

2)嵌套循環

逐個循環判斷外層清單裡元素是否存在内層清單:

<code>&gt;&gt;&gt; </code><code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>,</code><code>6</code><code>):        </code>

<code>...   </code><code>for</code> <code>x </code><code>in</code> <code>range</code><code>(</code><code>3</code><code>,</code><code>8</code><code>):</code>

<code>...     </code><code>if</code> <code>i </code><code>=</code><code>=</code> <code>x:</code>

<code>...       </code><code>print</code> <code>i</code>

<code>5</code>

3)簡寫語句

簡寫for語句:

<code>&gt;&gt;&gt; result </code><code>=</code> <code>(x </code><code>for</code> <code>x </code><code>in</code> <code>range</code><code>(</code><code>5</code><code>))        </code>

<code>&lt;generator </code><code>object</code> <code>&lt;genexpr&gt; at </code><code>0x030A4FD0</code><code>&gt;</code>

<code>&lt;</code><code>type</code> <code>'generator'</code><code>&gt;</code>

<code>說明:在這裡用小括号,會生成一個生成器,在這裡知道下就可以了,不過多講解,後面會專門生成器用途。</code>

<code>        </code> 

<code># 同樣用中括号會以清單存儲</code>

<code>&gt;&gt;&gt; result </code><code>=</code> <code>[ x </code><code>for</code> <code>x </code><code>in</code> <code>range</code><code>(</code><code>5</code><code>)]</code>

<code>[</code><code>0</code><code>, </code><code>1</code><code>, </code><code>2</code><code>, </code><code>3</code><code>, </code><code>4</code><code>]</code>

for和if語句寫一行:

<code>&gt;&gt;&gt; result </code><code>=</code> <code>[ x </code><code>for</code> <code>x </code><code>in</code> <code>range</code><code>(</code><code>5</code><code>) </code><code>if</code> <code>x </code><code>%</code> <code>2</code> <code>=</code><code>=</code> <code>0</code><code>]        </code>

<code>[</code><code>0</code><code>, </code><code>2</code><code>, </code><code>4</code><code>]</code>

4.3.2 while

文法:

while 表達式:

    執行語句...

1)輸出序列

當條件滿足時,停止循環:

<code>&gt;&gt;&gt; </code><code>while</code> <code>count &lt; </code><code>5</code><code>:        </code>

<code>...   </code><code>print</code> <code>count   </code>

<code>...   count </code><code>+</code><code>=</code> <code>1</code>   

<code>0</code>

2)死循環

<code>&gt;&gt;&gt; </code><code>import</code> <code>time        </code>

<code>&gt;&gt;&gt; i </code><code>=</code> <code>1</code>

<code>&gt;&gt;&gt; </code><code>while</code> <code>True</code><code>:     </code>

<code>...   </code><code>print</code> <code>i       </code>

<code>...   i </code><code>+</code><code>=</code> <code>1</code>         

<code>...   time.sleep(</code><code>0.5</code><code>)</code>

<code>......   </code>

<code># 會一直循環,直到海枯石爛,天荒地老...</code>

注意:當表達式值為true或者非零時,都會一直循環。

4.3.3 continue和break語句

continue當滿足條件時,跳出本次循環。

break當滿足條件時,跳出所有循環。

for和while用法一樣。

1)基本使用

滿足條件跳出目前循環:

16

17

18

19

20

21

22

23

24

25

<code>#!/usr/bin/env python        </code>

<code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>1</code><code>,</code><code>6</code><code>):</code>

<code>   </code><code>if</code> <code>i </code><code>=</code><code>=</code> <code>3</code><code>:</code>

<code>      </code><code>continue</code>

<code>   </code><code>else</code><code>:</code>

<code>      </code><code>print</code> <code>i</code>

<code># python test.py</code>

<code>#!/usr/bin/env python</code>

<code>count </code><code>=</code> <code>0</code>

<code>while</code> <code>count &lt; </code><code>5</code><code>:</code>

<code>   </code><code>count </code><code>+</code><code>=</code> <code>1</code>

<code>   </code><code>if</code> <code>count </code><code>=</code><code>=</code> <code>3</code><code>:</code>

<code>      </code><code>print</code> <code>count</code>

滿足條件終止循環:

<code>      </code><code>break</code>

<code>       </code><code>break</code>

<code>       </code><code>print</code> <code>count</code>

2)輸入錯誤次數超過三次退出

例如:提示使用者輸入名字,如果名字是xiaoming輸入正确退出,否則一直提示重新輸入,直到三次退出。

<code>#!/usr/bin/env python    </code>

<code>while</code> <code>1</code><code>:</code>

<code>  </code><code>if</code> <code>count &lt; </code><code>3</code><code>:</code>

<code>     </code><code>name </code><code>=</code> <code>raw_input</code><code>(</code><code>"Please input your name: "</code><code>).strip()    </code><code># .strip()去除首尾空格</code>

<code>     </code><code>if</code> <code>len</code><code>(name) </code><code>=</code><code>=</code> <code>0</code><code>:</code>

<code>        </code><code>print</code> <code>"Input can not be empty!"</code>

<code>        </code><code>count </code><code>+</code><code>=</code> <code>1</code>

<code>        </code><code>continue</code>

<code>     </code><code>elif</code> <code>name </code><code>=</code><code>=</code> <code>"xiaoming"</code><code>:</code>

<code>        </code><code>print</code> <code>"OK."</code>

<code>        </code><code>break</code>

<code>     </code><code>else</code><code>:</code>

<code>        </code><code>print</code> <code>"Name input error, please input again!"</code>

<code>  </code><code>else</code><code>:</code>

<code>     </code><code>print</code> <code>"Error three times, Exit!"</code>

<code>     </code><code>break</code>

4.3.4 else語句

else語句會在循環正常執行完才執行。在for循環用法也一樣。

<code>&gt;&gt;&gt; count </code><code>=</code> <code>0</code>       

<code>&gt;&gt;&gt; </code><code>while</code> <code>count &lt; </code><code>5</code><code>:</code>

<code>...   </code><code>print</code> <code>count</code>

<code>...   count </code><code>+</code><code>=</code> <code>1</code>

<code>...   </code><code>print</code> <code>"end"</code>

<code>end</code>

<code>...   </code><code>break</code>

<code></code>

本文轉自 李振良OK 51CTO部落格,原文連結:http://blog.51cto.com/lizhenliang/1853882,如需轉載請自行聯系原作者