1. 程式人生 > >Python(14)--迴圈

Python(14)--迴圈

while迴圈格式:

# 語法格式
while 條件:
    滿足條件執行的迴圈體



# 列印1到9
x = 1
while x <10:
    print(x)
    x += 1

# 接收使用者輸入姓名,不能為空
name = ""
while not name or name.isspace():
    name = input("name:")
print("hello, {}".format(name))

  


 

for迴圈:

  while語句可用於在條件為真的情況下反覆執行程式碼塊,但是有需要特定的情況,比如遍歷可迭代物件(序列就是可迭代物件),需要使用for迴圈語句

ages = [12, 32, 43, 35, 46]
for age in ages:
    print(age)

words = ["is", "is", "name"]
for word in words:
    print(word)

  

range(start, stop[, step]):

  函式range返回的是一個可迭代物件

  start: 計數從 start 開始。預設是從 0 開始。例如range(5)等價於range(0, 5);

  stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5

  step:步長,預設為1。例如:range(0, 5) 等價於 range(0, 5, 1)

# 列印0-5
for i in range(6):
    print(i)

# 列印10以內奇數:指定步長,每兩步取一次值
for i in range(1, 10, 2):
    print(i)

# 列印99乘法表:
for i in range(1, 10):
    for j in range(1, i+1):
        print("%s*%s=%s" %(j, i, j*i), end="\t")
    print()

  

注:只要能使用for迴圈,就不要使用while迴圈

 


 

迭代字典:

  遍歷字典,可以像遍歷序列那樣使用for語句

d = {"x" : 1, "y" : 3, "z": 6}
for key in d:
    print(key, d[key])
# x 1
# y 3
# z 6

  也可以使用d.keys獲取所有鍵

  d.values獲取所有值

  d.items以元組方式返回鍵值對

d = {"x" : 1, "y" : 3, "z": 6}
print(d.keys())
print(d.values())
print(d.items())
# dict_keys(['x', 'y', 'z'])
# dict_values([1, 3, 6])
# dict_items([('x', 1), ('y', 3), ('z', 6)])

  for迴圈的一個優點是可以在其中使用序列解包

d = {"x" : 1, "y" : 3, "z": 6}
for key, value in d.items():
    print(key, value)
# x 1
# y 3
# z 6

  


 

並行迭代:

  可能有時候會想要同時迭代兩個序列

# 列印名字和對應的年齡, i用作迴圈索引的變數
names = ["an", "yuan", "li"]
ages = [12, 34, 25]
for i in range(len(names)):
    print(names[i], ages[i])

  zip函式:內建函式,將兩個序列縫合,返回一個元組組成的序列,返回的是一個可迭代物件,可以使用list轉換為列表

names = ["an", "yuan", "li"]
ages = [12, 34, 25]
print(list(zip(names, ages)))   # [('an', 12), ('yuan', 34), ('li', 25)]

# 縫合後就可以迴圈中解包
for name, age in zip(names, ages):
    print(name, age)
# an 12
# yuan 34
# li 25


# zip可以縫合任意數量的序列,當序列長度不同時,將終在最短的序列用完時停止
names = ["an", "yuan", "li"]
a = [333, 444, 555]
ages = [12, 34, 25, 34, 56, 66]
print(list(zip(names, ages, a)))   # [('an', 12, 333), ('yuan', 34, 444), ('li', 25, 555)]

  


 

迭代時獲取索引:

  在迭代序列物件的同時要獲取索引

  函式:enumerate

s = "banana"
for string in s:
	if "a" in string:
		index = s.index("a")
		print(index)
# 如果自讀沒有重複,那麼可行,但是有重複的,返回的是該字串中首次出現的字元索引,除非將字元替換,才會查詢到後面字元的索引

for index, string in enumerate(s):
	if "a" in s:
		print(index, string)
# 0 b
# 1 a
# 2 n
# 3 a
# 4 n
# 5 a

#使用內建函式enumerate,該函式能夠迭代索引和值,索引是自動提供的

  


 

反向迭代和排序後迭代:

  函式:reversed和sorted,類似列表方法reverse和sort,用於任何序列和可迭代物件,不就地修改物件,返回反轉後排序後的版本

s = [1, 5, 3, 8, 2,6]
print(sorted(s))    # [1, 2, 3, 5, 6, 8]

s1 = "hi, world"
print(sorted(s1))   # [' ', ',', 'd', 'h', 'i', 'l', 'o', 'r', 'w']

print(list(reversed(s1)))   # ['d', 'l', 'r', 'o', 'w', ' ', ',', 'i', 'h']
print("".join(reversed(s1)))    # dlrow ,ih

  注:sorted返回一個列表,而reversed有點像zip

    要按字母表排序,可先轉換為小寫。為此,可將sort或sorted的key引數設定為str.lower。例如,sorted("aBc",key=str.lower)返回['a','B','c']。

 


 

跳出迴圈:

  break

  用於跳出迴圈,當執行到break時,會跳出整個迴圈,繼續往下執行

for i in range(6):
	if i == 3:
		break
	print(i)
# 0
# 1
# 2

  continue

  用於跳出當前迴圈,執行下一次迴圈

for i in range(6):
	if i == 3:
		continue
	print(i)
# 0
# 1
# 2
# 4
# 5

  


 

死迴圈和迴圈中使用else:

  使用標誌位tag來控制迴圈:

  登入成功,接收使用者命令,直到輸入“q”退出

tag = True
while tag:
    name = input("name:")
    passwd = input("password:")
    if name == "yuan" and passwd == "123456":
        print("login ok!")
        while tag:
            cmd = input(">>>:")
            if cmd == "q":
                tag = False
            print("your enter is %s" %cmd)
    else:
        print("login error!")