1.while 循环
x = 1
while x <= 100 :
print (x)
x += 1
name = ''
while not name : #在这种情况下,输入空格作为名字会被接受,因为包含一个空格的字符串并不是空的
#while not name or name.isspace() : #可以用这两种方法对程序进行修改
#while not name.strip()
name = input('Please enter your name : ')
print(('Hello, %s!') % name)
2.for 循环
#能用for循环,就尽量不要用while循环
'''words = ['this','is','an','ex','parrot']
for word in words :
print(word)'''
numbers = [0,1,2,3,4,5,6,7,8,9]
for number in numbers :
print(number)
range() 函数是个范围函数,工作方式类似于分片,包含下限不包含上限,可以只提供上限(下限为0)
#在Python3.0中,range()函数会被转换成xrange()函数,不支持xrange
>>> range(5)
range(0, 5)
>>> list(range(5)) #list方法可以显示出来
[0, 1, 2, 3, 4]
for number in range(1,101) :
print(number)
3.循环遍历字典元素
#字典元素顺序通常是没有定义的,迭代的时候可以保证键和值都能被处理,但是处理顺序是不确定的,如果顺序很重要的话,可以将键值保存在单独的列表中,例如在迭代前进行排序。
d = {'x' : 1, 'y' : 2, 'z' : 3}
for key in d :
print(key,'corresponds to',d[key])
在循环中使用序列解包
d = {'x' : 1, 'y' : 2, 'z' : 3}
for key,value in d.items() : #d.items()方法会将键-值对作为元祖返回
print(key,'corresponds to',value)
只打印值
d = {'x' : 1, 'y' : 2, 'z' : 3}
for value in d.values() : #d.values()方法只返回值
print(value)
4.一些迭代工具
(1)并行迭代
#内建的zip函数可以用来进行并行迭代,可以把两个序列‘压缩’在一起,然后返回一个元组的列表
>>> names = ['name','beth','george','damon']
>>> ages = [12,45,32,102]
>>> zip(names,ages)
<zip object at 0x000001B8207FAE88>
>>> list(zip(names,ages)) #zip返回的是一个可迭代对象,list方法可以进行显示
[('name', 12), ('beth', 45), ('george', 32), ('damon', 102)]
#zip函数可以作用于任意多的序列
#zip可以处理不等长的序列,当最短的序列“用完”的时候就会停止
names = ['name','beth','george','damon']
ages = [12,45,32,102]
#for i in range(len(names)) : #这里i是循环索引的标准变量名
# print(names[i], 'is', ages[i], 'years old')
for name, age in zip(names, ages) : #在循环中解包元组
print(name,'is',age,'years old')
(2)按索引迭代
#内建的enumerate函数可以在提供索引的地方迭代索引-值对
for index, string in enumerate(strings) :
if 'xxx' in string :
strings[index] = '[cencored]'
(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!'))
'! d l r o w , o l l e H'
#虽然sorted方法返回列表,reversed 方法却返回一个更加不可思议的可迭代对象,可在for循环以及join方法中使用,而不会有任何问题。但却不能直接对它使用索引,分片以及调用list方法,如要要这样做,可以使用list类型转换返回的对象
5.跳出循环
(1) break
from math import sqrt
for n in range(99,9,-1) : #第三个参数表示步长,表示每对相邻数字之间的差别,负值是进行反向迭代
root = sqrt(n)
if root == int(root) :
print(n)
break
(2) continue
#跳过本次剩余的循环体,进行下一次循环
#伪代码
for x in seq :
if condition1 : continue
if condition2 : continue
if condition3 : continue
do_something()
do_something_else()
do_another_thing()
etc()
(3) while True/break
while True :
word = input('Please enter a word : ')
if not word : break
print('The word was ' + word)
#while True的部分实现了一个永远不会自己停止的循环,但是在循环内部的if语句中加入条件是可以的。在条件满足时调用break语句,这样以来就可以在循环内部任何地方而不是只在开头终止循环。
#if/break语句自然地将循环分为两部分:第一部分负责初始化,第二部分则在循环条件为真的情况下使用第一部分内初始化好的数据
while True :
word = input('Please enter a word : ')
if not word : break
print('The word was ' + word)
6.循环中的else语句
from math import sqrt
for n in range(99,81,-1) :
root = sqrt(n)
if root == int(root) :
print(n)
break
else :
print("Didn't find it!") #仅在没有调用break时执行
#for和while循环都可以使用continue,break和else子句
7.列表推导式
#是利用其他列表创建新列表的一种方法,工作方式类似于for循环
>>> [x * x for x in range(10)] #列表由range(10)中每个x的平方组成
[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)] #可以使用多个for语句
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
>>> girls = ['alice', 'benice', 'clarice']
>>> boys = ['chris', 'arnolb', 'bob']
>>> [b+'+'+g for b in boys for g in girls if b[0] == g[0]] #可以和if语句联合使用
['chris+clarice', 'arnolb+alice', 'bob+benice']
8. pass语句
#它可以在代码中做占位符使用,比如程序需要一个if语句,然后进行测试,但是缺少其中一个语句块的代码
if name == 'Ralph Auldus Melish' :
print("Welcome!")
elif name =='Enid' : #Python中空代码块是非法的
#还没完... #注释和pass语句联合的代替方案是插入字符串
pass
elif name == 'Bill Gates' :
print('Access Denied')
9. 使用del删除
#它不仅会移除一个对象的引用,也会移除那个名字本身
>>> x = 1
>>> del x
>>> x
Traceback (most recent call last):
File "<pyshell#35>", line 1, in <module>
x
NameError: name 'x' is not defined
#x和y都指向都一个列表,但是删除x并不会影响y
>>> x = ['Hello', 'world']
>>> y = x
>>> y[1] = 'Python'
>>> x
['Hello', 'Python']
>>> del x
>>> y
['Hello', 'Python']
#删除的只是名称,而不是列表本身(值),事实上,在Python中是没有办法删除值得,因为在某个值不再使用的时候,Python解释器会负责内存的回收
10.使用exec和eval执行和求值字符串
(1) exec
#执行一个字符串的语句
>>> exec("print('Hello,world')")
Hello,world
(2) eval
#会计算Python表达(以字符串形式书写),并且返回结果值
>>> eval(input('Enter an arithmetic expression : '))
Enter an arithmetic expression : 6 + 18 * 2
42