Python入门篇之条件、循环


Posted in Python onOctober 17, 2014

1.if语句

Python 中的if子句看起来十分熟悉. 它由三部分组成: 关键字本身, 用于判断结果真假的条件表达式, 以及当表达式为真或者非零时执行的代码块.
if 语句的语法如下:
if expression:

expr_true_suite
if 语句的 expr_true_suite代码块只有在条件表达式的结果的布尔值为真时才执行, 否则将继续执行紧跟在该代码块后面的语句.

(1)多重条件表达式

单个if语句可以通过使用布尔操作符and,or和not实现多重判断条件或是否定判断条件.

if not warn and (system_load >= 10): 

print "WARNING: losing resources" 

warn += 1

(2)单一语句的代码块

如果一个复合语句(例如 if 子句, while 或 for 循环)的代码块仅仅包含一行代码, 那么它可以和前面的语句写在同一行上:
if make_hard_copy: send_data_to_printer()

尽管它可能方便, 但这样会使得代码更难阅读, 所以我们推荐将这行代码移到下一行并合理地缩进.

2.else语句

Python提供了与if语句搭配使用的else语句.如果if语句的条件表达式的结果布尔值为假,那么程序将执行else语句后的代码.它的语法你甚至可以猜到:

if expression: 
expr_true_suite 

else: 

expr_false_suite

if passwd == user.passwd: 

    ret_str = "password accepted" 

    id = user.id valid = True 

else: 

    ret_str = "invalid password entered... try again!" 

    valid = False

3.elif(即else-if)语句

elif是Python的else-if语句,它检查多个表达式是否为真, 并在为真时执行特定代码块中的代码. 和else一样, elif声明是可选的, 然而不同的是: if语句后最多只能有一个else语句, 但可以有任意数量的elif语句.

if expression1: 
expr1_true_suite 

elif expression2: 

expr2_true_suite 

elif expressionN: 

exprN_true_suite 

else: 

none_of_the_above_suite

4.条件表达式(即"三元操作符")

Python 2.5 集成的语法确定为: X if C else Y .

>>> x, y = 4, 3

>>> smaller = x if x < y else y

>>> smaller

3

5.while语句

Python的while是本章我们遇到的第一个循环语句. 事实它上是一个条件循环语句.与if声明相比,如果if后的条件为真, 就会执行一次相应的代码块. 而while中的代码块会一直循环执行, 直到循环条件不再为真.
while 循环的语法如下:

while expression: 
suite_to_repeat

>>> x=1

>>> while x <=100:

    print x

    x+=10

6.for语句

Python提供给我们的另一个循环机制就是for语句. 它提供了Python中最强大的循环结构.它可以遍历序列成员, 可以用在列表解析和生成器表达式中,它会自动地调用迭代器的next()方法,捕获StopIteration异常并结束循环(所有这一切都是在内部发生的).和传统语言中的for语句不同, Python的for更像是 shell 或是脚本语言中的foreach循环.

for循环会访问一个可迭代对象(例如序列或是迭代器)中的所有元素, 并在所有条目都处理过后结束循环.它的语法如下:

for iter_var in iterable: 
suite_to_repeat

1.用于序列类型

>>> for c in 'names':

    print 'current letter: ', c
current letter:  n

current letter:  a

current letter:  m

current letter:  e

current letter:  s

迭代序列有三种基本方法:

1.通过序列项迭代:

>>> namelists = ['henry', 'john', 'steven']

>>> for eachName in namelists:

    print eachName, 'Lim'

    

henry Lim

john Lim

steven Lim

2.通过序列索引迭代:

>>> namelists = ['henry', 'john', 'steven']

>>> for nameindex in range(len(namelists)):

    print 'Liu, ', namelists[nameindex]
Liu,  henry

Liu,  john

Liu,  steven

3.使用项和索引迭代:

两全其美的办法是使用内建的 enumerate() 函数, 它是 Python 2.3 的新增内容. 代码如下:

>>> namelists = ['henry', 'john', 'steven']

>>> for i, eachLee in enumerate(namelists):

    print "%d %s Lee" % (i+1, eachLee)

    

1 henry Lee

2 john Lee

3 steven Lee

2.用于迭代器类型

迭代器对象有一个 next() 方法,调用后返回下一个条目. 所有条目迭代完后, 迭代器引发一个 StopIteration 异常告诉程序循环结束. for 语句在内部调用 next() 并捕获异常.

3.range()内建函数

内建函数 range() 可以把类似 foreach 的 for 循环变成你更加熟悉的语句

Python 提供了两种不同的方法来调用range().完整语法要求提供两个或三个整数参数:
range(start, end, step =1)
range() 会返回一个包含所有k的列表,这里start <= k < end ,从start到end, k每次递增step. step不可以为零,否则将发生错误.

>>> range(2, 19, 3) 

[2, 5, 8, 11, 14, 17]

如果只给定两个参数,而省略step,step就使用默认值1.

>>> range(3, 7) 

[3, 4, 5, 6]

range() 还有两种简略的语法格式:
range(end)
range(start, end)

4.xrange()内建函数

xrange()类似range(),不过当你有一个很大的范围列表时, xrange()可能更为适合, 因为它不会在内存里创建列表的完整拷贝. 它只被用在for循环中, 在for循环外使用它没有意义。同样地,你可以想到,它的性能远高出range(),因为它不生成整个列表。

5.与序列相关的内建函数

sorted(), reversed(), enumerate(), zip()

sorted() 和 zip() 返回一个序列(列表), 而另外两个函数 reversed() 和 enumerate() 返回迭代器(类似序列)

7.break语句

Python中的 break 语句可以结束当前循环然后跳转到下条语句, 类似 C 中的传统 break.常用在当某个外部条件被触发(一般通过if 语句检查),需要立即从循环中退出时break 语句可以用在 while 和 for 循环中.

8.continue语句

Python里的continue语句和其他高级语言中的传统continue并没有什么不同.它可以被用在while和for循环里.while循环是条件性的, 而for循环是迭代的, 所以continue 在开始下一次循环前要满足一些先决条件,否则循环会正常结束.

valid = False 

count = 3 

while count > 0: 
input = raw_input("enter password") 

# check for valid passwd 

for eachPasswd in passwdList: 


if input == eachPasswd: 



valid = True 



break 


if not valid: # (or valid == 0) 



print "invalid input" 



count -= 1 



continue 


else: 



break

这里例子结合使用了 while , for , if , break以及 continue ,用来验证用户输入. 用户有三次机会来输入正确的密码, 如果失败, 那么 valid变量将仍为一个布尔假(0 ), 然后我们可以采取必要的操作阻止用户猜测密码.

9.pass语句

Python提供了pass语句,它不做任何事情 - 即NOP,(No OPeration ,无操作)我们从汇编语言中借用这个概念.pass同样也可作为开发中的小技巧,标记你后来要完成的代码,例如这样:

def foo_func(): 

    pass 

#或是 

if user_choice == 'do_calc': 

    pass else: 

    pass

这样的代码结构在开发和调试时很有用, 因为编写代码的时候你可能要先把结构定下来,但你不希望它干扰其他已经完成的代码. 在不需要它做任何事情地方, 放一个pass 将是一个很好的主意.

10.迭代器和iter()函数

迭代器就是有一个 next() 方法的对象, 而不是通过索引来计数. 当你或是一个循环机制(例如 for 语句)需要下一个项时, 调用迭代器的 next()方法就可以获得它.条目全部取出后, 会引发一个 StopIteration 异常, 这并不表示错误发生, 只是告诉外部调用者, 迭代完成.

限制:不能向后移动, 不能回到开始, 也不能复制一个迭代器.

reversed() 内建函数将返回一个反序访问的迭代器. enumerate() 内建函数同样也返回迭代器. 另外两个新的内建函数,any()和all()

Python 还提供了一整个itertools模块,它包含各种有用的迭代器.

>>> tupe=(12,'2',45.45)

>>> i = iter(tupe)

>>> i.next()

12

>>> i.next()

'2'

>>> i.next()

45.45

>>> i.next()

Traceback (most recent call last):

  File "<pyshell#72>", line 1, in <module>

    i.next()

StopIteration

创建迭代器

对一个对象调用 iter() 就可以得到它的迭代器. 它的语法如下:
iter(obj)
iter(func, sentinel )
如果你传递一个参数给iter(),它会检查你传递的是不是一个序列,如果是,那么很简单:根据索引从0一直迭代到序列结束. 另一个创建迭代器的方法是使用类, 一个实现了__iter__()和next()方法的类可以作为迭代器使用.

如果是传递两个参数给iter(),它会重复地调用 func ,直到迭代器的下个值等于sentinel .

11.将某件事作为另一事件导入

从模块导入函数的时候,可以使用

import somemodule

或者

from somemodule import somefunction

或者
from somemodule import somefunction, anotherfunction, yetanotherfunction

或者
from somemodule import *

如果两个模块都有open函数,只需要使用第一种方式导入,然后像下面这样使用函数:
module1.open(...)
module2.open(...)

或者:可以在语句末尾增加一个as子句,在该子句后给出名字,或为整个模块提供别名:

>>> import math as foobar

>>> foobar.sqrt(4)

2.0

>>> #也可以为函数提供别名;

>>> from math import sqrt as foobar

>>> foobar(4)

2.0

这里所做的事情叫做序列解包--将多个值的序列解开,然后放到变量的序列中,更加形象一点的表达出来就是:

>>> values=1,2,3

>>> values

(1, 2, 3)

>>> x,y,z=values

>>> x

1

>>> y

2

>>> z

3
Python 相关文章推荐
Python入门篇之文件
Oct 20 Python
Python中的面向对象编程详解(上)
Apr 13 Python
Python字符串转换成浮点数函数分享
Jul 24 Python
Python 自动刷博客浏览量实例代码
Jun 14 Python
Python 实现购物商城,含有用户入口和商家入口的示例
Sep 15 Python
Python实现的选择排序算法示例
Nov 29 Python
python自制包并用pip免提交到pypi仅安装到本机【推荐】
Jun 03 Python
Python使用百度api做人脸对比的方法
Aug 28 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
Jan 09 Python
Python如何获取文件指定行的内容
May 27 Python
python爬取音频下载的示例代码
Oct 19 Python
Python的collections模块真的很好用
Mar 01 Python
Python入门篇之字典
Oct 17 #Python
Python入门篇之字符串
Oct 17 #Python
Python入门篇之列表和元组
Oct 17 #Python
Python入门篇之对象类型
Oct 17 #Python
Python入门篇之编程习惯与特点
Oct 17 #Python
python中正则表达式的使用详解
Oct 17 #Python
基于python编写的微博应用
Oct 17 #Python
You might like
别人整理的服务器变量:$_SERVER
2006/10/20 PHP
PHP zlib扩展实现页面GZIP压缩输出
2010/06/17 PHP
yii2控制器Controller Ajax操作示例
2016/07/23 PHP
php实现遍历文件夹的方法汇总
2017/03/02 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
php实现微信模板消息推送
2018/03/30 PHP
javascript 使用 NodeList需要注意的问题
2013/03/04 Javascript
jQuery点击自身以外地方关闭弹出层的简单实例
2013/12/24 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
javascript实现下拉提示选择框
2015/12/29 Javascript
Uploadify上传文件方法
2016/03/16 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
canvas实现图像放大镜
2017/02/06 Javascript
React中ES5与ES6写法的区别总结
2017/04/21 Javascript
基于vue-simplemde实现图片拖拽、粘贴功能
2018/04/12 Javascript
vue如何安装使用Quill富文本编辑器
2018/09/21 Javascript
用Object.prototype.toString.call(obj)检测对象类型原因分析
2018/10/11 Javascript
Antd下拉选择,自动匹配功能的实现
2020/10/24 Javascript
[02:50]2014DOTA2 TI预选赛预选赛 大神专访第一弹!
2014/05/21 DOTA
python生成随机mac地址的方法
2015/03/16 Python
Python在不同目录下导入模块的实现方法
2017/10/27 Python
速记Python布尔值
2017/11/09 Python
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
利用Python yagmail三行代码实现发送邮件
2018/05/11 Python
python爬取个性签名的方法
2018/06/17 Python
django框架自定义用户表操作示例
2018/08/07 Python
python获取Linux发行版名称
2019/08/30 Python
python调用函数、类和文件操作简单实例总结
2019/11/29 Python
keras中epoch,batch,loss,val_loss用法说明
2020/07/02 Python
使用html2canvas实现浏览器截图的示例代码
2018/01/26 HTML / CSS
沙特阿拉伯排名第一的在线时尚购物应用程序:1Zillion
2020/08/08 全球购物
煤矿班组长的职责
2013/12/25 职场文书
早餐连锁店计划书
2014/01/08 职场文书
个人作风剖析材料
2014/02/02 职场文书
社区综治工作汇报
2014/10/27 职场文书
防止web项目中的SQL注入
2021/12/06 MySQL