標籤:對象 字典 語言 登入 可迭代對象 判斷語句 += 注意 sum
python中的迴圈
python中的 迴圈語句有兩種 for...in迴圈 和 while迴圈。迴圈控制語句,和其他的語言類似,也有break和continue。與其他語言不同的地方是for...in迴圈和while迴圈,後面可以有else語句,具體下面會依次介紹~
迴圈語句的控制結構圖如下:
for in 迴圈
for in 迴圈的文法如下:
for <variable> in <sequence>: <statements>
其中<sequence>可以是一個字串或者也可以是一個列表 等...
for i in ‘hello‘: # 遍曆字串 print(i)輸出結果:hello######for i in [‘a‘, ‘b‘, ‘c‘, ‘d‘]: # 遍曆列表 print(i)輸出結果:abcd######d = {‘a‘: 1, ‘b‘: 2, ‘c‘: 3} for k, v in d.items(): # 遍曆字典,可同時迭代key和value print(k, v)輸出結果:a 1b 2c 3
這些可以直接被迭代的對象 統稱為可迭代對象:Iterable(collections模組的Iterable類型),只要是Iterable對象就可以作用於for迴圈。可以使用 isinstance() 判斷一個對象是否是 Iterable 對象,樣本如下:
lst = (1, 2, 3) # 元群組類型flag = isinstance(lst, Iterable)print(flag)輸出結果:True # 元組為可迭代對象
如下兩種資料類型可以總用於for迴圈中:
1)集合資料類型,如:list、tuple、dict、set、str...
2)產生器(generator)和帶yield的generator function
range()函數
range()函數為python內建函數,能夠產生數列。
hello_range = range(3)print(isinstance(hello_range, Iterable)) for i in hello_range: # 迴圈遍曆 數列 print(i)輸出結果:True # range(3) 所產生的對象為 可迭代對象012
使用range指定數列的區間:
>>> for i in range(2,5):... print(i)...234
除了指定區間,還可以指定步長:
>>> for i in range(2, 10, 3):... print(i)...258
range()函數除了可以作用於for迴圈中,還可以用於建立list或者tuple:
hello_list = list(range(10)) # 產生 listprint(hello_list)hello_tuple = tuple(range(10)) # 產生 tupleprint(hello_tuple)
for...in 迴圈中的 else 語句
for...in 後面還可以有 else 語句,文法如下:
for <variable> in <sequence>: <statements>else: <statements>
else 中的語句,會在 for 迴圈結束之後執行:
>>> for i in range(5):... print(i)... else:... print(‘end...‘)...01234end...
Tip:若 for 迴圈被 break 終止,則 else 中的語句不會被執行,下面會介紹~
while迴圈
python中while迴圈的文法如下:
while <condition>: <statements>
條件滿足,則一直迴圈,知道條件不滿足,退出迴圈~
樣本如下,求1 ... 100 的總和:
sum = 0n = 1while n <= 100: sum += n n += 1print(sum) # 輸出結果:5050
while 迴圈中的 else 語句
類似於 for...in 迴圈,while 迴圈後面也可以有 else 語句,文法如下:
while <condition>: <statements>else: <statements>
當 while 後面的判斷語句傳回值為 false,則迴圈終止,然後執行 else 中的語句。同 for...in 迴圈一樣,若迴圈被 break 終止,則不會執行 else 中的語句。
sum = 0n = 1while n <= 100: sum += n n += 1else: print(‘end...loop‘)print(sum)輸出結果:end...loop5050
無限迴圈
可以使 while 後面的判斷語句一直返回為 True,這樣迴圈將不會被終止,一直執行迴圈體中的語句:
while True: username = input(‘請輸入使用者名稱:‘) print(‘welcome %s‘ % username)輸出結果:請輸入使用者名稱:Obamawelcome Obama請輸入使用者名稱:Trumpwelcome Trump請輸入使用者名稱:............
例如 Linux 終端使用者的登入,若使用者輸入的使用者名稱和密碼不正確,則會一直要求使用者重新輸入,直到輸入正確為止~
簡單類比下:
username = ‘baby‘passwd = ‘123456‘flag = Truewhile flag: login_username = input(‘請輸入使用者名稱:‘) login_passwd = input(‘請輸入密碼:‘) if login_username == username and login_passwd == passwd: flag = Falseelse: print(‘Welcome %s‘ % username)輸出結果:請輸入使用者名稱:Obama請輸入密碼:abc請輸入使用者名稱:Trump請輸入密碼:123請輸入使用者名稱:baby請輸入密碼:123456Welcome baby
break和continue語句
在迴圈語句中還可以使用 break ,contiune 來控制迴圈流程。
continue語句
continue 用於略過本次迴圈中剩下的語句,直接進入下一次迴圈,樣本如下:
# 計算1...100的奇數和sum =0count = 0while count < 100: count += 1 if count % 2 != 1: # 若不是奇數,直接進入下一次迴圈 continue sum += countprint(‘sum=%s‘ % sum)輸出結果:sum=2500
break語句
break 用於跳出最近的一個迴圈,樣本如下:
sum =0count = 1while count <= 100: if count == 51: break sum += count count += 1print(‘sum=%s‘ % sum)輸出結果:sum=1275
當count為51時,終止迴圈,則sum計算的是 1...50 的總和
Tip:break跳出迴圈,僅跳出最近的一個迴圈,若迴圈只有一層,執行break之後,迴圈就結束了;若迴圈有2層,則外側的迴圈還會繼續
lst_1 = [‘a......‘, ‘b......‘, ‘c......‘]lst_2 = [1, 2, 3]for i in lst_1: print(i) for j in lst_2: print(j)輸出結果:a......123b......123c......123
如上所示,這裡有兩層迴圈,現在,當內側迴圈至2時,使用break終止迴圈(見下面的樣本),可以看到,內側迴圈在輸出lst_2中的2之後終止,但是外側的迴圈還在繼續:
lst_1 = [‘a...‘, ‘b...‘, ‘c...‘]lst_2 = [1, 2, 3]for i in lst_1: print(i) for j in lst_2: print(j) if j == 2: break輸出結果:a...12b...12c...12
break還有一個注意點,就是當迴圈被break終止時,不會執行迴圈後面的 else 語句
lst_1 = [‘a...‘, ‘b...‘, ‘c...‘]for i in lst_1: print(i)else: print(‘end...‘)輸出結果:a...b...c...end... # 正常執行else中的內容lst_1 = [‘a...‘, ‘b...‘, ‘c...‘]for i in lst_1: print(i) if lst_1.index(i) == 1: # 當迴圈值lst_1下標為1的元素時,終止迴圈 breakelse: print(‘end...‘)輸出結果: # 沒有 c... 和 end... 輸出a...b...
while 迴圈也一樣,這裡就直接使用上面的例子:
sum = 0count = 1while count <= 100: if count == 51: break sum += count count += 1else: print(‘end loop...‘)print(‘sum=%s‘ % sum)輸出結果:sum=1275 # else 中的 end loop... 並沒有輸出
.................^_^
python迴圈語句