第5章 Python笔记 条件、循环和其他语句
来源:互联网 发布:51单片机视频教程全集 编辑:程序博客网 时间:2024/05/16 05:03
一、print和import的更多信息
1、使用逗号输出
1.1 print在打印多个表达式时,需要用逗号隔开(打印后每个参数之间插入了一个空格):
>>> print 'Age:',42Age: 42同时输出文本和变量:
>>>greeting='Hello'>>> name='Gumby'>>> salutation='Mr.'>>> greeting='Hello,'>>> print greeting,salutation,name
Hello, Mr. Gumby如果变量greeting中不带逗号的话,还想再输出语句加上逗号,解决方案可以为:
>>> name='Gumby'>>> salutation='Mr.'>>> greeting='Hello'>>> print greeting+',',salutation,nameHello, Mr. Gumby上述解决方案中可以使Hello后面紧跟着逗号,如果使用下面的语句就会在Hello后面有空格:
print greeting,',',salutation,name1.2 如果在结尾处加上逗号,那么接下来的语句会与前一条语句在同一行打印:
print 'Hello,',print 'world!'Hello, world!2、导入模板
可以在导入模板或者函数语句末尾增加as语句,为模板或者函数提供别名:
>>> import math as foobar>>> foobar.sqrt(4)2.0>>> from math import sqrt as foobar>>> foobar(4)2.0二、赋值的拓展
1、序列解包
1.1 多个赋值操作同时进行:
>>> x,y,z=1,2,3>>> print x,y,z
1 2 3交换变量:
>>> x,y=y,x>>> print x,y,z2 1 3上述行为就是序列解包的意思,或者称为可迭代解包——将多个值的序列解开,然后放到变量的序列中。比如:
>>> values=1,2,3>>> values(1, 2, 3)>>> x,y,z=values>>> x1所解包的序列中的元素数量必须和放置在=左边的变量数量一致:
>>> x,y,z=1,2Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> x,y,z=1,2ValueError: need more than 2 values to unpack>>> x,y,z=1,2,3,4Traceback (most recent call last): File "<pyshell#20>", line 1, in <module> x,y,z=1,2,3,4ValueError: too many values to unpack1.2 popitem方法将键-值作为元祖返回,那么这个元祖就可以直接赋值到两个变量中:
>>> scoundrel={'name':'Robin','girlfriend':'Marion'}>>> key,value=scoundrel.popitem()>>> key'girlfriend'>>> value'Marion'1.3 在Python 3.0 中有另外一个解包的特性:可以使用星号运算符。例如,a,b,rest*=[1,2,3,4]最终会在a和b都被赋值之后将所有其他的参数都收集到rest中。本例中,rest的结果将会是[3,4]。
2、链式赋值
链式赋值是将同一个值赋给多个变量:
x=y=somefunction()和下面的语句效果一样:
y=somefunction()x=y3、增量赋值
把表达式运算符放置在赋值运算符=的左边,这种写法叫做增量赋值。
>>> x=2>>> x+=1>>> x*=2>>> x6>>> fnord='foo'>>> fnord+='bar'>>> fnord*=2>>> fnord'foobarfoobar'三、语句块
语句块是在条件为真时执行或者执行多次(循环语句)的一组语句。在代码前放置空格来缩进语句即可创建语句块,块中的每行都应该缩进同样的量。
在Python中,冒号(:)用来标识语句块的开始,块中的每一个语句都是缩进的(缩进量相同)。当回退到和已经闭合的块一样的缩进量时,就表示当前快已经结束了。
四、条件和条件语句
1、布尔变量
下面的值在作为布尔变量是会被看做为假(false):
False None 0 "" () [] {}
也就是说标准值False和None、所有类型的数字0(包括浮点型、长整型和其他类型)、空序列(比如空字符串、元祖和列表)以及空的字典都为假。其他的一切都被解释为真,包括特殊值True。
bool函数可以将其他值转换为布尔值:
>>> bool('I think,therefore I am')True>>> bool(42)True>>> bool('')False>>> bool(0)False2、if语句
name=raw_input('what is your name? ')if name.endswith('Gumby'): print 'Hello,Mr.Gumby'上面就是if语句,如果条件(在if 和冒号之间的表达式)判断为真,那么后面的语句块(本例中是单个的print语句)就会被执行。如果条件为假,语句块就不会执行。
3、else子句
name=raw_input('what is your name? ')if name.endswith('Gumby'): print 'Hello,Mr.Gumby'else: print 'Hello,stranger'之所以叫else子句是因为它不是独立的语句,而只能作为if语句的一部分。上述代码如果因为条件判断为假,第一个语句块没有执行,就会转入第二个语句块。
4、elif子句
elif是“else if”的简写。
num=input('Enter a number: ')if num>0: print 'the number is positive'elif num<0: print 'the number is negative'else: print 'the number is zero'5、嵌套代码块
if语句里面可以嵌套使用if语句
name=raw_input('What is your name? ')if name.endswith('Gumby'): if name.startswith('Mr.'): print 'Hello,Mr.Gumby' elif name.startswith('Mrs.'): print 'Hello,Mrs.Gumby' else: print 'Hello.Gumby'else: print 'Hello,stranger'6、更复杂的条件
6.1 比较运算符
6.2 相等运算符
相等运算符为两个等号“==”
>>> "foo"=="foo"True>>> "foo"=="bar"False6.3 is:同一性运算符
>>> x=y=[1,2,3]>>> z=[1,2,3]>>> x==yTrue>>> x==zTrue>>> x is yTrue>>> x is zFalse上述代码中x is z的结果为False,是因为is运算符是判断同一性而不是相等性的。x和z它们的值相等,但是却不是同一个对象。
总结:==运算符用来判断两个对象是否相等,is运算符用来判断两者是否等同(同一个对象)。
6.4 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".'6.5 字符串和序列比较
字符串可以按照字母顺序排列进行比较:
>>> "alpha"<"beta"True其他的序列也可以用同样的方式进行比较:
>>> [1,2]<[2,1]True>>> [2,[1,4]]<[2,[1,5]]True6.6 布尔运算符
number=input('Enter a number between 1 and 10: ')if number <=10 and number >=1: print 'Great!'else: print 'Wrong!'上述代码中的and运算符就是所谓的布尔运算符。它连接两个布尔值,并且在两者都为真时返回真,否则返回假。此外还有or和not。
在python2.5中有一个内置的条件表达式:
a if b else c
如果b为真,返回a,否则,返回c。
6.7 断言
如果需要确保程序中的某个条件一定为真才能让程序正常工作的话,可以使用assert语句,它可以在程序中置入检查点。
>>> age=-1>>> assert 0<age<100,'The age must be realistic'Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> assert 0<age<100,'The age must be realistic'AssertionError: The age must be realistic五、循环
1、while循环
>>> x=1>>> while x<=100:print xx+=12、for循环
>>> words=['this','is','an','ex','paarrot']>>> for word in words:print word
>>> numbers=[0,1,2,3,4,5,6,7,8,9]>>> for number in numbers:print numberrange函数的工作方式类似于分片,同样包头不包尾。
>>> range(0,10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(10)[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]下面的程序会打印1~100的数字:
>>> for number in range(1,101):print numberxrange函数的循环行为类似于range函数,区别在于range函数一次创建整个序列,而xrange一次只创建一个数。
3、循环遍历字典元素
>>> d={'x':1,'y':2,'z':3}>>> for key in d:print key,'corresponds to',d[key]d.items方法会将键—值对作为元祖返回,for循环的一大好处就是可以循环中使用序列解包:
>>> for key,value in d.items():print key,'corresponds to',value4、一些迭代工具
4.1 并行迭代
zip函数可以用来进行并行迭代,可以把两个序列“压缩”在一起,然后返回一个元祖的列表:
>>> names=['anne','beth','george''damon']>>> ages=[12,45,32,102]>>> zip(names,ages)[('anne', 12), ('beth', 45), ('georgedamon', 32)]>>> for name,age in zip(names,ages):print name,'is',age,'years old'zip函数也可以应付不等长的序列:当最短的序列“用完”的时候就会停止:
>>> zip(range(5),xrange(100000000))[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4)]4.2 编号迭代
有些时候需要迭代序列中的对象,同时还要获取当前对象的索引。可以使用enumerate函数,这个函数可以在提供索引的地方迭代索引—值对。
for index,string in enumerate(strings): if 'xxx' in string: strings[index]='[censored]'4.3 翻转和排序迭代
reversed和sorted:它们同列表的reverse和sort(sorted和sort使用同样的参数)方法类似,但作用于任何序列或可迭代对象上,不是原地修改对象,而是返回翻转或排序后的版本:
>>> sorted([4,3,6,8,3])[3, 3, 4, 6, 8]>>> sorted('Hello,world!')['!', ',', 'H', 'd', 'e', 'l', 'l', 'l', 'o', 'o', 'r', 'w']>>> list(reversed('Hello,world!'))['!', 'd', 'l', 'r', 'o', 'w', ',', 'o', 'l', 'l', 'e', 'H']>>> ''.join(reversed('Hello,world!'))'!dlrow,olleH'5、跳出循环
5.1 break
结束(跳出)循环可以使用break语句
>>> from math import sqrt>>> for n in range(99,0,-1):root=sqrt(n)if root==int(root):print nbreak5.2 continue
continue会让当前的迭代结束,“跳”到下一轮循环的开始。基本的意思是:跳过剩余的循环体,但是不结束循环。
5.3 while True/break习语
while True: word=raw_input('Please enter a word: ') if not word:break print 'The word was '+wordwhile True/break 可以在循环内部任何地方而不是只在开头(像普通的while循环一样)终止循环。
六、列表推导式——轻量级循环
列表推导式是利用其他列表创建新列表的一种方法。
>>> [x*x for x in range(10)][0, 1, 4, 9, 16, 25, 36, 49, 64, 81]>>> [x*x 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)]七、pass、del和exec
1、pass
pass表示程序什么事都不用做。在python中空代码块是非法的,解决方法就是在语句快中加上一个pass语句:
if name == 'Ralph Auldus Melish': print 'Welcome!'elif name == 'Enid': #还没完.... passelif name == 'Bill Gates': print 'Access Denied'2、del
del语句不仅移除一个对象的引用,也会移除那个名字的本身。
>>> x=1>>> del x>>> xTraceback (most recent call last): File "<pyshell#2>", line 1, in <module> xNameError: name 'x' is not defined下面的代码中删除x后,y并没有随之消失。原因是删除的只是名称,而不是列表本身(值)。事实上,在Python中是没有办法删除值的,也不需要过多考虑删除值的问题,因为在某个值不再使用的时候,Python解释器会负责内存的回收。
>>> x=["Hello","world"]>>> y=x>>> y[1]="Python">>> x['Hello', 'Python']>>> del x>>> y['Hello', 'Python']3、使用exec和eval执行和求值字符串
3.1 执行一个字符串的语句是exec:
>>> exec "print 'Hello,world!'"Hello,world!exec语句最有用的地方在于可以动态地创建代码字符串。为了安全起见,可以增加一个字典,起到命名空间的作用。这可以通过增加in<scope>来实现,其中<scope>就是起到放置代码字符串命名空间作用的字典。下面两段代码进行对比:
>>> from math import sqrt>>> exec "sqrt=1">>> sqrt(4) #已经破坏了原有的sqrt函数。Traceback (most recent call last): File "<pyshell#3>", line 1, in <module> sqrt(4)TypeError: 'int' object is not callable
>>> from math import sqrt>>> scope={}>>> exec 'sqrt=1' in scope>>> sqrt(4)2.0>>> scope['sqrt']1有上述可以看到潜在的破坏性代码并不会覆盖sqrt函数,原来的函数可以正常工作,而通过exec赋值的变量sqrt只在它的作用域内有效。
3.2 eval会计算Python表达式(以字符串形式书写),并且返回结果值:
>>> eval(raw_input("Enter an arithemetic expression: "))Enter an arithemetic expression: 6+18*242
- 第5章 Python笔记 条件、循环和其他语句
- <<Python基础教程>>学习笔记 | 第05章 | 条件、循环和其他语句
- python学习笔记5-条件,循环和其他语句
- Python基础教程之第5章 条件, 循环和其他语句
- python 条件,循环和其他语句的学习笔记
- Python学习笔记:条件、循环和其他语句
- Python学习笔记(五)条件,循环和其他语句(上)
- Python基础教程笔记——条件,循环和其他语句
- Python基础教程笔记——条件,循环和其他语句
- 《Python基础教程》学习笔记 Chap5 条件、循环和其他语句
- [Python 05] 条件,循环和其他语句
- python 条件,循环和其他语句
- Python条件、循环和其他语句
- python条件循环和其他语句
- Python条件、循环和其他语句
- python基础知识--条件,循环和其他语句
- python--条件, 循环和其他语句
- python条件,循环和其他语句
- <Java虚拟机>读书记录2-对象的创建
- 处理横竖屏幕切换的一个方案。
- android 在adapter里面finish自己在的activity
- static理解
- SQLite将一个数据库中的全部信息完全复制到另一个数据库中
- 第5章 Python笔记 条件、循环和其他语句
- Win7双机调试环境搭建
- python打包exe可执行文件
- ASP.NET中使用JqGrid完整实现
- 原码、反码、补码
- 我的个人网站(1)
- Android6.0找不到org.apache.http.Header的问题
- 学习SpringMVC——从HelloWorld开始
- spring boot框架入门实例 笔记