python条件和循环的使用方法


Posted in Python onNovember 01, 2013

前面已经介绍过几种基本语句(print,import,赋值语句),下面我们来介绍条件语句,循环语句。
一. print和import的更多信息
1.1 使用逗号输出
A.打印多个表达式,用逗号隔开,会在每个参数之间插入一个空格符:

>>> print 'age:',42
age: 42

B.同时输出文本和变量值,却又不希望使用字符串格式化:
>>> name = 'Peter'
>>> greeting = 'Hello'
>>> print greeting,',',name
Hello , Peter

上面的例子中会在逗号前加入一个空格,我们可以这样优化:
>>> print greeting + ',',name
Hello, Peter

注意,如果在结尾处加上逗号,那么接下来的语句会与前一句在同一行打印:
>>> print 'Hello,',
    print 'world'
Hello,world
 

1.2 把某件事作为另一件事导入
从模块导入函数时,可以使用:
整个模块导入:import somemodule
导入其中一个函数:from somemodule import somefunction
导入其中几个函数:from somemodule import somefunction,anotherfunction,yetanotherfunction
导入全部函数:from somemodule import *
如果某2个模块都有相同名字的函数,比如叫open函数,那么可以这样给函数或者模块提供别名:
>>> import math
>>> import math as foobar
>>> foobar.sqrt(4)
2.0
>>> from math import sqrt as foobar2
>>> foobar2(4)
2.0

二. 赋值魔法
就算是不起眼的赋值语句也有一些特殊的技巧。
2.1 序列解包
序列解包就是将多个值的序列解开,然后放到变量的序列中。

>>> #'多个赋值操作同时进行'
>>> x,y,z = 1,2,3
>>> print x,y,z
1 2 3
>>> #'交换2个或多个变量'
>>> x,y = y,x
>>> print x,y
2 1
>>> #'当函数或方法返回元组时'
>>> s = {'a':1,'b':2,'c':3}
>>> key,value =  s.popitem()
>>> print key,value
a 1
最后一个例子可以看出,它允许函数返回一个以上的值并打包成元组,然后通过一个复制语句很容易进行访问。
注意:解包的序列中元素数量必须和放置在赋值符合=左边的变量数量完全一致,否则会引发异常。

2.2 链式赋值
链式赋值是将同一个值赋给多个变量的捷径。
>>> x = y = 'sss'

2.3 增量赋值
增量赋值可以让代码更紧凑简练。
对于+,-,*,/,%等标准运算符都适用:

>>> x = 2
>>> x += 1
>>> x *= 2
>>> x
6
>>> #对其他数据类型也适用
>>> f = 'foo'
>>> f += 'bar'
>>> f
'foobar'

三. 语句块:缩排的乐趣
 语句块是条件为真时执行一次或多次的一组语句。在python中,冒号(:)用来标识语句块的开始,块中的每一个语句都是缩进的。当回退到和已经闭合的块一样的缩进量时,就表示当前块已经结束了。

四. 条件和条件语句
4.1 这就是布尔变量的作用
下面的值在作为布尔表达式的时候,会被解释器看作假(False):
False None 0 “” () [] {}
其他的一切值都被解释为真,包括特殊值True。

4.2 条件执行和if语句
如果条件判断为真,那么后面的语句块就会被执行,也可以加入elif进行多个条件检查。作为if的一部分,还有else子句。
当然,我们可以在if语句里面嵌套使用if语句。

num = input ('enter a number? ')
if num > 0:
    if num > 50:
        print"num > 50"
    elif num > 10:
        print "num > 10"
    else:
        print "num > 0"
else:
    print "num <= 0"

4.3 更复杂的条件
下面我们回到条件本身,因为它们才是条件执行真正有趣的部分。
4.3.1. 比较运算符

 x == y;     x < y;     x > y;      x >= y;      x <= y;
 x != y;      x is y;     x is not y;   x in y;     x not in y;

4.3.2.  is:同一性运算符

>>> x = y = [1,2,3]
>>> z = [1,2,3]
>>> x is y
True
>>> x is z
False
>>> x == z
True

由此看出,使用==运算符来判定两个对象是否相等,使用is判定两者是否同一个对象。

4.3.3. in:成员资格运算符

name = raw_input("what is your name?")
if 's' in name:
    print 'your name contains the letter s'
else:
    print 'your name does not contain the letter s'
 

4.3.4.字符串和序列比较
字符串可以按照字符顺序排列进行比较。
>>> 'alpha' < 'beta'
True
字符是按照本身的顺序值排列的,一个字母的顺序值可以用ord函数查到。
其他的序列也可以用同样的方式进行比较,不过比较的是元素的其他类型。
>>> [1,2] > [2,1]
False
>>> [1,[2,3]] < [1,[3,2]]
True
 

4.3.5. 布尔运算符
and运算符是所谓的布尔运算符,它连接2个布尔值,并且在两者都为真时返回真,否则返回假。与它同类的还有2个运算符,or和not。
number = raw_input("enter a number?")
if number <=10 and number >= 1:
    print "great!"

4.3.6. 断言
if语句有个近亲,工作方式类似于:
if not condition:
      crash program

这是因为与其让程序在晚些时候崩溃,不如在错误条件出现时直接让它崩溃。语句中使用的关键字是assert。它确保程序中的某个条件为真时才能让程序正常工作。
>>> age = -1
>>> assert 0 < age < 100
Traceback (most recent call last):
  File "<pyshell#52>", line 1, in <module>
    assert 0 < age < 100
AssertionError
 

 五. 循环
 5.1 while循环
while语句非常灵活,可以在任何条件为真的情况下重复执行一个代码块。
name = ''
while not name:
    name = raw_input('please enter your name: ')
print 'hello,%s!' % name

 5.2 for循环
当要为一个集合(序列和其他可迭代对象)的每个元素都执行一个代码块时,我们就需要for循环了。
5.2.1.循环遍历字典元素
一个简单的for语句就能循环字典的所有键,就像处理序列一样:
d = {'x':1,'y':2,'z':3}
for key in d:
    print key,'corrensponds to ',d[key]
5.2.2.一些迭代工具
A.并行迭代
names = ['a','b','c','d']
ages = [12,23,45,32]
#循环索引迭代
for i in range(len(names)):
    print names[i],'is',ages[i],'years old.'
#内建zip函数迭代
for name,age in zip(names,ages):
    print name,'is',age,'years old.'

B.编号迭代
有时候迭代序列中的对象时,同时要获取当前对象的索引。
#index计数
index = 0
for string in strings:
    if 'xxx' in string:
        string[index] = 'sss'
    index += 1#内建enumerate函数迭代
for index,string in strings:
    if 'xxx' in string:
        string[index] = 'sss'

C.翻转和排序迭代
函数reversed和sorted,作用于任何序列或可迭代对象上,不是原地修改对象,而是返回翻转或排序后的版本:
>>> sorted([2,6,3,7])
[2, 3, 6, 7]
>>> list(reversed('hello'))
['o', 'l', 'l', 'e', 'h']

 5.3 跳出循环
一般情况下循环会一直执行到条件为假,或者到序列元素用完时。但是有时候需要提前中断一个循环。
5.3.1.break
结束循环可以使用break语句。
for i in range(0,10):
    if i == 5:
        print 'quit'
        break
    print i

5.3.2.continue
continue语句会让当前迭代结束,跳到下一轮循环的开始。
for i in range(0,10):
    if i % 2 == 0:
        continue
    print i

5.3.3.while True/break
比如当用户在提示符下输入单词时做一些事情,并在用户不输入单词后结束循环。
while True:
    word = raw_input('enter a word: ')
    if not word:
        break
    print 'The word is '+ word

六. 列表推导式--轻量级循环
列表推导式是利用其他列表创建新列表的一种方法,工作方式类似于for循环:
>>> [x**2 for x in range(10) if x % 3 == 0]
[0, 9, 36, 81]
>>> [(x,y) for x in range(3) for y in range(3)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)
 

 七. 三人行
作为最后的结束,我们来看3个语句:pass,del和exec
pass:什么都不做,用来在代码中做占位符使用,方便调试代码。
if a == 'a':
    print 'yes'
elif a == 'b':
    pass
else:
    print 'no'

del:删除不再使用的对象,也就是用作垃圾收集。
>>> x = [1,2]
>>> y = x
>>> del x
>>> x
Traceback (most recent call last):
  File "<pyshell#62>", line 1, in <module>
    x
NameError: name 'x' is not defined
>>> y
[1, 2]
 

del删除的只是名称,而不是列表本身,所以上面的例子中,删除x不会影响到y。
exec:动态创造python代码,然后将其作为语句执行或作为表达式计算。但是这样做是会有很严重的潜在安全漏洞,如果程序将用户提供的一段内容中的一部分字符串作为代码执行,程序可能会失去对代码执行的控制。
>>> exec "print 'hello,world'" 
hello,world
Python 相关文章推荐
python对数组进行反转的方法
May 20 Python
Python实现批量读取word中表格信息的方法
Jul 30 Python
Python调用SQLPlus来操作和解析Oracle数据库的方法
Apr 09 Python
python2.7的编码问题与解决方法
Oct 04 Python
对python字典过滤条件的实例详解
Jan 22 Python
Python从函数参数类型引出元组实例分析
May 28 Python
python开发之anaconda以及win7下安装gensim的方法
Jul 05 Python
django连接oracle时setting 配置方法
Aug 29 Python
基于Python中的yield表达式介绍
Nov 19 Python
Python内存泄漏和内存溢出的解决方案
Sep 26 Python
python 获取谷歌浏览器保存的密码
Jan 06 Python
python将YUV420P文件转PNG图片格式的两种方法
Jan 22 Python
讲解python参数和作用域的使用
Nov 01 #Python
python列表与元组详解实例
Nov 01 #Python
python创建和使用字典实例详解
Nov 01 #Python
python分割和拼接字符串
Nov 01 #Python
python list语法学习(带例子)
Nov 01 #Python
python读取Android permission文件
Nov 01 #Python
Python读写Excel文件的实例
Nov 01 #Python
You might like
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
PHP使用CURL_MULTI实现多线程采集的例子
2014/07/29 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
在chrome浏览器中,防止input[text]和textarea在聚焦时出现黄色边框的解决方法
2011/05/24 Javascript
Jquery工作常用实例 使用AJAX使网页进行异步更新
2011/07/26 Javascript
理解JAVASCRIPT中hasOwnProperty()的作用
2013/06/05 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
js实现微信分享代码
2020/10/11 Javascript
深入学习AngularJS中数据的双向绑定机制
2016/03/04 Javascript
用jQuery获取table中行id和td值的实现代码
2016/05/19 Javascript
JavaScript实现星级评分
2017/01/12 Javascript
Bootstrap 手风琴菜单的实现代码
2017/01/20 Javascript
Bootstrap Paginator+PageHelper实现分页效果
2018/12/29 Javascript
vue elementUI table表格数据 滚动懒加载的实现方法
2019/04/04 Javascript
JavaScript中十种一步拷贝数组的方法实例详解
2019/04/22 Javascript
vue 在methods中调用mounted的实现操作
2020/08/07 Javascript
[04:26]2014DOTA2国际邀请赛-Newbee顺利进入胜者组决赛 独家专访战神7
2014/07/19 DOTA
[38:40]2018DOTA2亚洲邀请赛 4.6淘汰赛 mineski vs LGD 第一场
2018/04/10 DOTA
python写xml文件的操作实例
2014/10/05 Python
python解决字符串倒序输出的问题
2018/06/25 Python
python实现烟花小程序
2019/01/30 Python
python使用配置文件过程详解
2019/12/28 Python
Python 写了个新型冠状病毒疫情传播模拟程序
2020/02/14 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
Jabra捷波朗美国官网:用于办公、车载和运动的无线蓝牙耳麦
2017/02/01 全球购物
公职人员索取回扣检举信
2014/04/04 职场文书
2014最新党员违纪检讨书
2014/10/12 职场文书
运动会通讯稿600字
2015/07/20 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
插件导致ECharts被全量引入的坑示例解析
2022/09/23 Javascript