Python学习笔记-第五章 条件、循环和其他语句(下)
来源:互联网 发布:张家口 承德 知乎 编辑:程序博客网 时间:2024/05/24 15:38
第五章 条件、循环和其他语句
5.5 循环
5.5.1 while循环
name=''while not name:name=input('please enter your name:')print('hello,%s!' % name)
5.5.2 for 循环
words=['this','is','an','ex','parrot']for word in words: #这里的for如果换成while,会报错,word没有定义过。print(word)#打印1~100的数字for number in range(1,101): print(number)能用for循环就尽量不要用while循环
range(0,10) #返回值range(0,10)。range函数包括下限,不包含上限。range(10) #返回值range(0,10),python3后有变化,xrange不存在。
5.5.3 循环遍历字典元素
d={'x':1,'y':2,'z':3}for key in d:print(key,'corresponds to',d[key]) #返回值x corresponds to 1 y corresponds to 2 z corresponds to 3for key.value in d.items(): #会报错,字符串不能用value。 print(key,'corresponds to',value)
5.5.4 一些迭代工具
1.并行迭代
同时迭代两个序列。
names=['anne','beth','george','damon']ages=[12,45,32,102]for i in range(len(names)):print(names[i],'is',ages[i],'years old.') #返回值anne is 12 years old.beth is 45 years old.george is 32 years old.damon is 102 years old.
zip(names,ages) #返回值<zip object at 0x00000000035C0C08>,新版本变化。for name,age in zip(names,ages): print(name,'is',age,'years old') #返回结果同上个例子。zip(range(5),range(100000000)) #后一个原文推荐xrange,但是这个函数在新版本中已经不存在。返回值<zip object at 0x00000000035DDEC8>
2.编号迭代
#在一个字符串列表中替换所有包含‘xxx'的子字符串for string in strings:if 'xxx' in string: #如果string中含有'xxx'子字符串则往下执行index=strings.index(string) #获取有'xxx'子字符串的字符的编号string[index]='[censored]' #将该字符替换为[censored]。这段代码只是一部分,无法单独执行。#更好的方法for string in strings: if 'xxx' in string: strings[index]='[censored]' index+=1 #加了这一行代码会更好,搜索不会返回错误的索引。#使用内建enumerate函数for index.string in enumerate(strings): if 'xxx' in string: string[index]='[censored]' #报错,'int' object has no attribute 'string'
3.翻转和排序迭代
>>> 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.5 跳出循环
循环会一直执行到条件为假,或者序列元素用完时。如果想要提前结束循环。
1.break
from math import sqrtfor n in range(99,0,-1): #-1是range函数的第三个参数,表示步长,每对相邻数字之间的差别,负值表示反向迭代root=sqrt(n)if root==int(root):print(n)break #第一次执行完后就结束了,返回值为81.2.continue
让当前迭代结束,“跳”到下一轮循环的开始。
5.5.6 循环中的else子句
循环内使用break语句,通常是因为“找到”了某物或某事“发生了。如果想要在没有跳出之前做些事情,可以用布尔变量,在循环前将其设定为False,跳出后设定为True,然后用if语句查看循环是否跳出。
broke_out=Falsefor x in seq:do_something(x)if condition(x):broke_out=Truebreakdo_something_else(x)if not broke_out:print("I didn't break out!")更简单的方法,循环中增加else
from math import sqrtfor n in range(99,81,-1): root=sqrt(n)if root==int(root):print(n)break #只要找到一个平方数,就结束循环,没有找到就做else后面的事情。测试过不加break,结果没有变化。else: print("didn't find it!") #结果一共打印了18个didn't find it.
5.6 列表推导式——轻量级循环
列表推导式是利用其它列表创建新列表(类似集合推导),工作方式类似于for循环
<pre name="code" class="python">>>>[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] #打印能被3整除的平方数[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)]也可以用for 循环
result=[]for x in range(3):for y in range(3):result.append((x,y)) #这里没有输出语句,所以代码写完不会有任何反馈结果。但是result的结果已经变了。girls=['alice','bernice','clarice']boys=['chris','arnold','bob'][b+'+'+g for b in boys for g in girls if b[0]==g[0]] #返回首字母相同的男孩和女孩。#推荐的代码girls = ['alice','bernice','clarice']boys = ['chris','arnold','bob']for girl in girls:letterGirls.setdefault(girl[0],[]).append(girl)print([b+'+'+g for b in boys for g in letterGirls[b[0]]]) #一直报错Traceback (most recent call last): File "<pyshell#121>", line 3, in <module> print([b+'+'+g for b in boys for g in letterGirls[b[0]]]) File "<pyshell#121>", line 3, in <listcomp> print([b+'+'+g for b in boys for g in letterGirls[b[0]]])KeyError: 'c'
5.7 三人行
5.7.1 什么都没发生
pass在代码中做占位符用。
if name=='Ralph Auldus Melish':print('Welcome!')elif name=='Enid':pass #表示还没完,如果不写这个,会报错,空代码块是非法的。elif name=='Bill Gates':print('Access Denied')
5.7.2 使用del删除
scoundrel={'age':42,'first name':'Robin','last name':'of Locksley'}>>> robin=scoundrel>>> scoundrel{'age': 42, 'last name': 'of Locksley', 'first name': 'Robin'}>>> robin{'age': 42, 'last name': 'of Locksley', 'first name': 'Robin'}>>> scoundrel=None>>> robin #scoundrel与字典解绑时不影响robin的使用{'age': 42, 'last name': 'of Locksley', 'first name': 'Robin'} >>> robin=None #字典没有任何名字绑在它上面,会被直接删除
x=1del xx #报错,x不存在了。x=['Hello','world']y=xy[1]='python'x #返回['Hello', 'python']del xy #返回['Hello', 'python'],x的删除对y不影响。删除的只是名字,而不是列表本身。python无法通过代码删除值,当某个值不再使用时,解释器会负责内存的回收。
5.7.3 使用exec和eval执行和求值字符串
1.exec
exec最有用的地方是可以动态的创建代码字符串。
exec("print( 'Hello world!')") #又是该死的版本差异。from math import sqrtscope={}exec('sqrt=1', scope) #不用scope会报错,scope是起到放置代码字符串命名空间作用的字典。sqrt(4) #返回值2.0scope['sqrt'] #返回值1,原来的函数能正常使用
2.eval
用于求值,是类似于exec的内建函数。
eval(input("Enter an arthmetic expression:"))Enter an arthmetic expression:6+18*242初探作用域
>>> scope={}>>> scope['x']=2>>> scope['y']=3>>> eval('x*y',scope)6>>> scope={}>>> exec("x=2",scope)>>> eval('x*x',scope)4
0 0
- Python学习笔记-第五章 条件、循环和其他语句(下)
- Python学习笔记-第五章 条件、循环和其他语句(上)
- Python基础教程学习笔记----第五章 条件、循环和其他语句
- python学习笔记——第五章 条件、循环和其他语句
- Python基础教程第五章学习笔记——条件、循环和其他语句
- 第五章-条件、循环和其他语句——python基础教程(第二版)笔记
- 【python】第五章——条件、循环和其他语句
- 第五章 条件、循环和其他语句
- 第五章 条件,循环和其他语句
- python 条件,循环和其他语句的学习笔记
- Python学习笔记:条件、循环和其他语句
- Python学习笔记(五)条件,循环和其他语句(上)
- 《Python基础教程》学习笔记 Chap5 条件、循环和其他语句
- python学习笔记5-条件,循环和其他语句
- 第5章 Python笔记 条件、循环和其他语句
- <<Python基础教程>>学习笔记 | 第05章 | 条件、循环和其他语句
- Python学习笔记(五),条件,循环和其它语句(下)
- Python学习笔记【五】——《python基础教程》:: 条件、循环和其他语句
- 第13周 项目2-成绩处理
- Memcache and Mongodb
- UML——宏观总结
- UISegmentedControl 基本属性,
- 数据结构之单链表
- Python学习笔记-第五章 条件、循环和其他语句(下)
- Primes Problem (HDU5104) 素数问题
- 第13周项目1-数组大折腾-(3)
- 我是项目新手,我的项目经验总结
- P2P系统中的典型的DHT系统-----------Chord算法
- 应用层
- Android:Layout_weight的深刻理解
- 循环与判断3
- 软件工程:(六)面向对象技术