第5章 Python笔记 条件、循环和其他语句
2017-07-12 17:00
633 查看
一、print和import的更多信息
1、使用逗号输出
1.1 print在打印多个表达式时,需要用逗号隔开(打印后每个参数之间插入了一个空格):
可以在导入模板或者函数语句末尾增加as语句,为模板或者函数提供别名:
1、序列解包
1.1 多个赋值操作同时进行:
2、链式赋值
链式赋值是将同一个值赋给多个变量:
把表达式运算符放置在赋值运算符=的左边,这种写法叫做增量赋值。
语句块是在条件为真时执行或者执行多次(循环语句)的一组语句。在代码前放置空格来缩进语句即可创建语句块,块中的每行都应该缩进同样的量。
在Python中,冒号(:)用来标识语句块的开始,块中的每一个语句都是缩进的(缩进量相同)。当回退到和已经闭合的块一样的缩进量时,就表示当前快已经结束了。
四、条件和条件语句
1、布尔变量
下面的值在作为布尔变量是会被看做为假(false):
False None 0 "" () [] {}
也就是说标准值False和None、所有类型的数字0(包括浮点型、长整型和其他类型)、空序列(比如空字符串、元祖和列表)以及空的字典都为假。其他的一切都被解释为真,包括特殊值True。
bool函数可以将其他值转换为布尔值:
3、else子句
4、elif子句
elif是“else if”的简写。
if语句里面可以嵌套使用if语句
6.1 比较运算符
6.2 相等运算符
相等运算符为两个等号“==”
总结:==运算符用来判断两个对象是否相等,is运算符用来判断两者是否等同(同一个对象)。
6.4 in:成员资格运算符
字符串可以按照字母顺序排列进行比较:
在python2.5中有一个内置的条件表达式:
a if b else c
如果b为真,返回a,否则,返回c。
6.7 断言
如果需要
4000
确保程序中的某个条件一定为真才能让程序正常工作的话,可以使用assert语句,它可以在程序中置入检查点。
1、while循环
3、循环遍历字典元素
4.1 并行迭代
zip函数可以用来进行并行迭代,可以把两个序列“压缩”在一起,然后返回一个元祖的列表:
有些时候需要迭代序列中的对象,同时还要获取当前对象的索引。可以使用enumerate函数,这个函数可以在提供索引的地方迭代索引—值对。
reversed和sorted:它们同列表的reverse和sort(sorted和sort使用同样的参数)方法类似,但作用于任何序列或可迭代对象上,不是原地修改对象,而是返回翻转或排序后的版本:
5.1 break
结束(跳出)循环可以使用break语句
continue会让当前的迭代结束,“跳”到下一轮循环的开始。基本的意思是:跳过剩余的循环体,但是不结束循环。
5.3 while True/break习语
六、列表推导式——轻量级循环
列表推导式是利用其他列表创建新列表的一种方法。
1、pass
pass表示程序什么事都不用做。在python中空代码块是非法的,解决方法就是在语句快中加上一个pass语句:
del语句不仅移除一个对象的引用,也会移除那个名字的本身。
3.1 执行一个字符串的语句是exec:
>>> exec "print 'Hello,world!'"
Hello,world!exec语句最有用的地方在于可以动态地创建代码字符串。为了安全起见,可以增加一个字典,起到命名空间的作用。这可以通过增加in<scope>来实现,其中<scope>就是起到放置代码字符串命名空间作用的字典。下面两段代码进行对比:
3.2 eval会计算Python表达式(以字符串形式书写),并且返回结果值:
>>> eval(raw_input("Enter an arithemetic expression: "))
Enter an arithemetic expression: 6+18*2
42
1、使用逗号输出
1.1 print在打印多个表达式时,需要用逗号隔开(打印后每个参数之间插入了一个空格):
>>> print 'Age:',42 Age: 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,name Hello, 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,z 2 1 3上述行为就是序列解包的意思,或者称为可迭代解包——将多个值的序列解开,然后放到变量的序列中。比如:
>>> values=1,2,3 >>> values (1, 2, 3) >>> x,y,z=values >>> x 1所解包的序列中的元素数量必须和放置在=左边的变量数量一致:
>>> x,y,z=1,2 Traceback (most recent call last): File "<pyshell#19>", line 1, in <module> x,y,z=1,2 ValueError: need more than 2 values to unpack >>> x,y,z=1,2,3,4 Traceback (most recent call last): File "<pyshell#20>", line 1, in <module> x,y,z=1,2,3,4 ValueError: 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 >>> x 6 >>> 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子句是因为它不是独立的语句,而只能作为if语句的一部分。上述代码如果因为条件判断为假,第一个语句块没有执行,就会转入第二个语句块。
else:
print 'Hello,stranger'
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==y True >>> x==z True >>> x is y True >>> x is z False上述代码中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 断言
如果需要
4000
确保程序中的某个条件一定为真才能让程序正常工作的话,可以使用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 x x+=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 n break5.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': #还没完.... pass elif name == 'Bill Gates': print 'Access Denied'2、del
del语句不仅移除一个对象的引用,也会移除那个名字的本身。
>>> x=1 >>> del x >>> x Traceback (most recent call last): File "<pyshell#2>", line 1, in <module> x NameError: 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*2
42
相关文章推荐
- Python基础教程 第5章: 条件、循环和其他语句 学习笔记
- Python基础教程笔记——第5章:条件,循环和其他语句
- Python基础教程学习笔记----第五章 条件、循环和其他语句
- python笔记(8)----条件、循环及其他语句
- Python学习笔记-第五章 条件、循环和其他语句(上)
- python基础教程学习笔记---(5)条件、循环和其他语句
- Python学习笔记之条件、循环和其他语句
- [python学习笔记]条件,循环和其他语句
- Python学习笔记:条件、循环和其他语句
- Python学习笔记-第五章 条件、循环和其他语句(下)
- <<Python基础教程>>学习笔记 | 第05章 | 条件、循环和其他语句
- 【Python基础教程笔记(二)】字典,条件,循环和其他语句
- python 条件,循环和其他语句的学习笔记
- Python学习笔记(五)条件,循环和其他语句(上)
- python学习笔记5-条件,循环和其他语句
- python基础教程第5章——条件循环和其他语句
- python学习笔记——第五章 条件、循环和其他语句
- Python基础教程之第5章 条件, 循环和其他语句
- python学习笔记之四:条件,循环和其他语句
- python 学习笔记之条件循环等语句