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中实现定制类的特殊方法总结
Sep 28 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
django允许外部访问的实例讲解
May 14 Python
Python3.4解释器用法简单示例
Mar 22 Python
如何使用Flask-Migrate拓展数据库表结构
Jul 24 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
python输入一个水仙花数(三位数) 输出百位十位个位实例
May 03 Python
如何利用python web框架做文件流下载的实现示例
Jun 02 Python
django下创建多个app并设置urls方法
Aug 02 Python
Django 权限管理(permissions)与用户组(group)详解
Nov 30 Python
matplotlib绘制多子图共享鼠标光标的方法示例
Jan 08 Python
python numpy中setdiff1d的用法说明
Apr 22 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/13 PHP
php目录遍历函数opendir用法实例
2014/11/20 PHP
php采用curl实现伪造IP来源的方法
2014/11/21 PHP
Thinkphp 框架扩展之应用模式实现方法分析
2020/04/27 PHP
Javascript 模式实例 观察者模式
2009/10/24 Javascript
JavaScript子窗口ModalDialog中操作父窗口对像
2012/12/11 Javascript
javascript初学者常用技巧
2014/09/02 Javascript
基于javascript的COOkie的操作实现只能点一次
2014/12/26 Javascript
JavaScript使用indexOf获得子字符串在字符串中位置的方法
2015/04/06 Javascript
jQuery实现的五子棋游戏实例
2015/06/13 Javascript
JavaScript中的this到底是什么(一)
2015/12/09 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
js如何准确获取当前页面url网址信息
2020/09/13 Javascript
整理JavaScript对DOM中各种类型的元素的常用操作
2016/05/05 Javascript
jQuery下拉菜单的实现代码
2016/11/03 Javascript
基于JavaScript实现本地图片预览
2017/02/08 Javascript
bootstrap timepicker在angular中取值并转化为时间戳
2017/06/13 Javascript
jQuery实现的上传图片本地预览效果简单示例
2018/03/29 jQuery
vue+element实现表单校验功能
2019/05/20 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
vue页面跳转实现页面缓存操作
2020/07/22 Javascript
[04:26]2014DOTA2西雅图国际邀请赛 总决赛TOPPLAY
2014/07/22 DOTA
Python模拟登录的多种方法(四种)
2018/06/01 Python
Python3匿名函数用法示例
2018/07/25 Python
Python FFT合成波形的实例
2019/12/04 Python
Python list运算操作代码实例解析
2020/01/20 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
介绍一下常见的木马种类
2014/11/15 面试题
幼儿园义卖活动方案
2014/01/17 职场文书
自动化毕业生专业自荐书范文
2014/02/04 职场文书
迎元旦广播稿
2014/02/22 职场文书
常务副县长“四风”个人对照检查材料思想汇报
2014/10/02 职场文书
有限公司股东合作协议书
2014/10/29 职场文书
Python利用folium实现地图可视化
2021/05/23 Python
my.ini优化mysql数据库性能的十个参数(推荐)
2021/05/26 MySQL
Python如何导出导入所有依赖包详解
2021/06/08 Python