《Python基础教程第二版》第五章-条件、循环和其他语句(二)

Sophisticated 2019-06-28

循环

while

代码1

x = 1
while x <= 100
    print x
    x += 1

代码2
在程序要求输入名字时按下回车,程序会再次要求输入名字,因为name是空字符串,值为false。

name = ''
while not name:
    name = raw_input('your name:')
print name 
# while not name or name.isspace()
# while not name.strip()

for

words = ['this','is','AJ1']
for word in words:
    print word

numbers = [1,2,4,5,6,7]
for num in numbers:
    print num

Range()
内建的范围函数range()

range(1,10)
#output: [0,1,2,3,4,5,6,7,8,9]

#打印1~100
for num in range(1,100):
    print num

Range() vs xrange()

range()一次创建整个序列
xrange()一次只创建一个数
迭代巨大的序列时,xrange()更加高效

遍历字典

遍历字典的所有键

d = {'x':1, 'y':2, 'z':3}
for key in d:
    print key, d[key]
# 取值: 用 d.values 代替 d.keys

items()方法
items()方法返回键值对元组,for可以循环中使用序列解包

for key, value in d.items():
    print key,value

注:字典元素顺序不确定

迭代工具

并行迭代
同时打印名字和对应年龄

names  = ['afra', 'ala', 'joe', 'bob']
ages = [1,2,3,4]

for i in range(len(names)):
    print name[i], age[i]
# i 为循环索引

zip()

zip()将多个序列组合成一个元组列表。处理不等长序列时,止于最短序列。

zip(names, age)
# [('afra',1),('ala',2),('joe',3),('bob',4)]

# 循环解包元组
for name, age in zip(name, ages):
    print name,age

#不等长序列
zip(range(5), xrange(10000))

按索引迭代
任务:访问序列对象,同时获取当前对象索引。例如,在字符串中替换包含‘xxx’的子字符串。
版本一(不推荐):

for string in strings:
    if 'xxx' in string:
        index = strings.index(string)
        string[index] = '[replace]'

版本二:

index = 0
for string in strings:
    if 'xxx' in string:
        strings[index] = '[replace]'
    index += 1
# 这段代码在《Python基础教程第二版》P79, 我认为原书代码中 index+=1 的缩进格式应该是错了?

版本三(推荐):
使用内建函数 enumerate()

翻转和排序迭代

break 、continue、while true/break

else子句

列表推导式-轻量级循环

pass、del、exec

相关推荐