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设置windows桌面壁纸的实现代码
Jan 28 Python
web.py在模板中输出美元符号的方法
Aug 26 Python
Python根据区号生成手机号码的方法
Jul 08 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
Dec 27 Python
详解python实现识别手写MNIST数字集的程序
Aug 03 Python
python爬虫解决验证码的思路及示例
Aug 01 Python
Python调用.NET库的方法步骤
Dec 27 Python
Python实现计算长方形面积(带参数函数demo)
Jan 18 Python
Python实现井字棋小游戏
Mar 09 Python
详解Python中list[::-1]的几种用法
Nov 16 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
OpenCV-Python直方图均衡化实现图像去雾
Jun 07 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
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
Laravel 5框架学习之向视图传送数据
2015/04/08 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
Laravel中GraphQL接口请求频率实战记录
2020/09/01 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
复制Input内容的js代码_支持所有浏览器,修正了Firefox3.5以上的问题
2010/06/21 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
Mac地址验证的javascript代码
2013/11/09 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
基于cropper.js封装vue实现在线图片裁剪组件功能
2018/03/01 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
如何解决webpack-dev-server代理常切换问题
2019/01/09 Javascript
ES6 对象的新功能与解构赋值介绍
2019/02/05 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
Python yield使用方法示例
2013/12/04 Python
python自动化测试之setUp与tearDown实例
2014/09/28 Python
pygame学习笔记(6):完成一个简单的游戏
2015/04/15 Python
Python中import导入上一级目录模块及循环import问题的解决
2016/06/04 Python
Python 编码处理-str与Unicode的区别
2016/09/06 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
python多线程案例之多任务copy文件完整实例
2019/10/29 Python
Python2与Python3的区别详解
2020/02/09 Python
python使用pyecharts库画地图数据可视化的实现
2020/03/25 Python
Django中文件上传和文件访问微项目的方法
2020/04/27 Python
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
Camille Jewelry官网:现代女性时尚首饰
2019/07/07 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
大学生就业推荐信范文
2013/11/29 职场文书
毕业生实习鉴定
2013/12/11 职场文书
党的群众路线教育实践活动对照检查材料(四风)
2014/09/27 职场文书
2015年保险业务员工作总结
2015/05/27 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
python析构函数用法及注意事项
2021/06/22 Python