在第一章的时候讲解了运算操作符和赋值操作符,这章来学习下其他常用操作符。
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>>>> a </code><code>=</code> <code>"a"</code>
<code>>>> b </code><code>=</code> <code>"b"</code>
<code>>>> a </code><code>and</code> <code>b</code>
<code>'b'</code>
<code>>>> a </code><code>or</code> <code>b</code>
<code>'a'</code>
<code>>>> a </code><code>=</code> <code>""</code>
<code>''</code>
and操作符判断表达式,如果a和b都为真,返回b的值,否则返回a的值。
or操作符也是判断表达式,如果a和b都为真,返回a的值,否则返回b的值。
类似于shell里的&&和||:[ 'a' == 'b' ] && echo no || echo yes
13
14
<code>>>> </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>>>> </code><code>if</code> <code>a:</code>
4.1.3 成员运算符
in
在对象里
not in
不在对象里
15
<code>>>> </code><code>'a'</code> <code>in</code> <code>'abc'</code>
<code>True</code>
<code>>>> </code><code>'d'</code> <code>in</code> <code>'abc'</code>
<code>False</code>
<code>>>> lst </code><code>=</code> <code>[</code><code>'a'</code><code>,</code><code>'b'</code><code>,</code><code>'c'</code><code>]</code>
<code>>>> </code><code>'a'</code> <code>in</code> <code>lst</code>
<code>>>> </code><code>'d'</code> <code>in</code> <code>lst</code>
<code>>>> </code><code>'a'</code> <code>not</code> <code>in</code> <code>'abc'</code>
<code>>>> </code><code>'d'</code> <code>not</code> <code>in</code> <code>'abc'</code>
<code>>>> </code><code>'d'</code> <code>not</code> <code>in</code> <code>lst</code>
4.1.4 标识运算符
is
内存地址相等
is not
内存地址不相等
<code>>>> a </code><code>=</code> <code>[]</code>
<code>>>> b </code><code>=</code> <code>[]</code>
<code>>>> </code><code>id</code><code>(a)</code>
<code>139741563903296</code>
<code>>>> </code><code>id</code><code>(b)</code>
<code>139741563902144</code>
<code>>>> a </code><code>is</code> <code>b</code>
<code>>>> a </code><code>is</code> <code>not</code> <code>b</code>
这里用到了id()函数,用于获取对象在内存的地址。
4.2 条件判断
4.2.1 单分支
<code>>>> a </code><code>=</code> <code>20</code>
<code>>>> </code><code>if</code> <code>a < </code><code>18</code><code>: </code>
有时候一个简单的判断语句,感觉这样写麻烦,有没有一条命令搞定的。
有的,简写if语句:
<code>>>> 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>>>> result</code>
<code>'yes'</code>
<code>>>> </code><code>type</code><code>(result)</code>
<code><</code><code>type</code> <code>'str'</code><code>></code>
<code> </code>
<code># 有时会看到别人代码用中括号,意思把结果存储为一个列表</code>
<code>>>> 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><</code><code>type</code> <code>'list'</code><code>></code>
4.2.2 多分支
<code>>>> a = 20</code>
<code>>>> </code><code>if</code> <code>a < 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>>>> </code><code>if</code> <code>a < </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>>>> </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>>>> </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>>>> 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>>>> </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>>>> </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>>>> 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><generator </code><code>object</code> <code><genexpr> at </code><code>0x030A4FD0</code><code>></code>
<code><</code><code>type</code> <code>'generator'</code><code>></code>
<code>说明:在这里用小括号,会生成一个生成器,在这里知道下就可以了,不过多讲解,后面会专门生成器用途。</code>
<code> </code>
<code># 同样用中括号会以列表存储</code>
<code>>>> 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>>>> 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>>>> </code><code>while</code> <code>count < </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>>>> </code><code>import</code> <code>time </code>
<code>>>> i </code><code>=</code> <code>1</code>
<code>>>> </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 < </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 < </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>>>> count </code><code>=</code> <code>0</code>
<code>>>> </code><code>while</code> <code>count < </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,如需转载请自行联系原作者