python条件和循环的使用方法 前面已经介绍过几种基本语句(print,import,赋值语句),下面我们来介绍条件语句,循环语句。一. print和import的更多信息1.1 使用逗号输出A.打印多个表达式,用逗号隔开,会在每个参数之间插入一个空格符:复制代码 代码如下:>>> print 'age:',42age: 42B.同时输出文本和变量值,却又不希望使用字符串格式化:复制代码 代码如下:>>> name = 'Peter'>>> greeting = 'Hello'>>> print greeting,',',nameHello , Peter上面的例子中会在逗号前加入一个空格,我们可以这样优化:复制代码 代码如下:>>> print greeting + ',',nameHello, 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,z1 2 3>>> #'交换2个或多个变量'>>> x,y = y,x>>> print x,y2 1>>> #'当函数或方法返回元组时'>>> s = {'a':1,'b':2,'c':3}>>> key,value = s.popitem()>>> print key,valuea 1最后一个例子可以看出,它允许函数返回一个以上的值并打包成元组,然后通过一个复制语句很容易进行访问。注意:解包的序列中元素数量必须和放置在赋值符合=左边的变量数量完全一致,否则会引发异常。2.2 链式赋值链式赋值是将同一个值赋给多个变量的捷径。>>> x = y = 'sss'2.3 增量赋值增量赋值可以让代码更紧凑简练。对于+,-,*,/,%等标准运算符都适用: >>> x = 2>>> x += 1>>> x *= 2>>> x6>>> #对其他数据类型也适用>>> 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 yTrue>>> x is zFalse>>> x == zTrue由此看出,使用==运算符来判定两个对象是否相等,使用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 < 100Traceback (most recent call last): File "", line 1, in assert 0 < age < 100AssertionError 五. 循环 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 = 0for 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 i5.3.2.continuecontinue语句会让当前迭代结束,跳到下一轮循环的开始。复制代码 代码如下:for i in range(0,10): if i % 2 == 0: continue print i5.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和execpass:什么都不做,用来在代码中做占位符使用,方便调试代码。复制代码 代码如下:if a == 'a': print 'yes'elif a == 'b': passelse: print 'no'del:删除不再使用的对象,也就是用作垃圾收集。复制代码 代码如下:>>> x = [1,2]>>> y = x>>> del x>>> xTraceback (most recent call last): File "", line 1, in xNameError: name 'x' is not defined>>> y[1, 2] del删除的只是名称,而不是列表本身,所以上面的例子中,删除x不会影响到y。exec:动态创造python代码,然后将其作为语句执行或作为表达式计算。但是这样做是会有很严重的潜在安全漏洞,如果程序将用户提供的一段内容中的一部分字符串作为代码执行,程序可能会失去对代码执行的控制。复制代码 代码如下:>>> exec "print 'hello,world'" hello,world