《Python基礎教程第二版》第五章-條件、迴圈和其他語句(二)

afra發表於2019-02-16

迴圈

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

相關文章