扁平化 手機網(wǎng)站首頁5118大數(shù)據(jù)平臺官網(wǎng)
Python中有兩種類型的循環(huán): while 循環(huán) 和 for 循環(huán)
1. while 循環(huán)
while循環(huán)是: 檢查一個條件表達式,只要條件表達式計算結(jié)果為True 時, 就執(zhí)行下面縮進的代碼。
如此反復(fù),直到條件表達式計算結(jié)果為False時,結(jié)束 循環(huán)。
比如:
command = input("請輸入命令:")
while command != 'exit':print(f'輸入的命令是{command}')command = input("請輸入命令")
其中 while command != 'exit'
會判斷用戶輸入的命令 (command 變量) 是否等于字符串 'exit'
如果不等于, 就執(zhí)行下面縮進的代碼。下面縮進的代碼就是循環(huán)體內(nèi)的代碼,還會再次讓用戶輸入命令到變量command中。
如果等于字符串 'exit'
, 就結(jié)束循環(huán)。
如果用戶輸入的命令一直都不是字符串 'exit'
, 就會一直執(zhí)行循環(huán)。
用 while 循環(huán)要注意 循環(huán)條件的設(shè)置,處理不當(dāng),有可能導(dǎo)致 循環(huán)的條件始終為True,循環(huán)永遠不會結(jié)束,變成了死循環(huán)。
比如,我們要打印出 從 1 到 100 的數(shù)字,應(yīng)該寫成下面這樣
i = 1
while i <= 100:print(i)i += 1
如果不小心,漏掉最后一句,變成
i = 1
while i <= 100:print(i)
這樣 i 的值始終不變, 循環(huán)的條件 i <= 100
一直都是滿足的,就變成死循環(huán)了。程序一直打印 i 值為 1 ,永不結(jié)束。
2. for 循環(huán)
for循環(huán)的用法
for 循環(huán) 通常是從一個sequence類型,比如 字符串、列表 或者 元組中 依次取出每個元素進行操作。
比如,我要打印出 一個學(xué)生年齡 列表中所有的學(xué)生信息, 可以這樣寫
studentAges = ['小王:17', '小趙:16', '小李:17', '小孫:16', '小徐:18']for student in studentAges:print(student)
注意,for student in studentAges
這里的 student 變量就依次代表了 studentAges里面的每一個元素,執(zhí)行下面縮進的代碼 print(student)
。
這里有5個學(xué)生的信息, 那么這個循環(huán)就執(zhí)行了5次。
從循環(huán)的第1次到第5次,student 變量的值分別為:
'小王:17'
'小趙:16'
'小李:17'
'小孫:16'
'小徐:18'
所以上面的循環(huán)可以依次打印出上面的元素。
當(dāng)然上面的例子用while循環(huán)也一樣可以達到目的,就是稍微復(fù)雜一些
studentAges = ['小王:17', '小趙:16', '小李:17', '小孫:16', '小徐:18']idx = 0
while idx < len(studentAges):currentEle = studentAges[idx]print(currentEle)idx += 1
上面的代碼里,我們用一個變量idx代表 列表當(dāng)前元素的索引。 在循環(huán)體里面 每執(zhí)行一次就 讓idx 的值加1。 這樣的循環(huán),變量 currentEle就依次等于 列表里面的每個元素。
如果循環(huán)操作一個空列表,如下
for one in []:print(one)
循環(huán)體內(nèi)的代碼不會執(zhí)行。
循環(huán)n次
開發(fā)程序時,我們經(jīng)常需要 循環(huán)執(zhí)行某段代碼 n次
打印出100次,可以使用for 循環(huán) 和 一個內(nèi)置類型 range
,如下所示
# range里面的參數(shù)100 指定循環(huán)100次
# 其中 n 依次為 0,1,2,3,4... 直到 99
for n in range(100): print(n)
注意:
和Python 2 不同, Python 3 中的range 并不是一個函數(shù),不會返回一個數(shù)字列表。 Python 3 中的range 是一個 類,如果你想返回一個 從 0到99的數(shù)字列表, 可以這樣寫 : list(range(100))
range
range(100)傳入1個參數(shù)。從0,1,2,3,4… 直到 99。
range(50,100)傳入2個參數(shù)。從50… 直到 99。
range(50,100,5)傳入3個參數(shù)。從50… 直到 99,步長為5。
print(list(range(100)))
print('--------------------------------')
print(list(range(50, 100)))
print('--------------------------------')
print(list(range(50, 100, 5)))$ python main.py
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
--------------------------------
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
--------------------------------
[50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
enumerate 函數(shù)
有的時候,在使用for循環(huán)從列表或者元組中遍歷元素的時候,除了要獲取每個元素,還需要得到每個元素在列表元組里面的索引。
比如,找出下面列表中年齡大于17歲的學(xué)員,打印出他們在列表中的索引
studentAges = ['小王:17', '小趙:16', '小李:18', '小孫:16', '小徐:18']
這時候可以使用 enumerate 函數(shù),像下面這樣
# '小王:17'.split(':') 分割字符串成一個列表['小王', '17']
# '小王:17'.split(':')[-1] 取分割后列表的最后一個元素 '17'
print('小王:17'.split(':')) # 輸出 ['小王', '17']
print('小王:17'.split(':')[-1]) # 輸出 17studentAges = ['小王:17', '小趙:16', '小李:17', '小孫:16', '小徐:18']# enumerate (studentAges) 每次迭代返回 一個元組
# 里面有兩個元素,依次是 元素的索引和元素本身
for idx, student in enumerate(studentAges):if int(student.split(':')[-1]) > 17:print(idx)
$ python main.py
['小王', '17']
17
0 小王:17
1 小趙:16
2 小李:17
3 小孫:16
4 小徐:18
4
3. break 終止循環(huán)
循環(huán)體內(nèi)的代碼在發(fā)現(xiàn)某種條件滿足的時候,需要終止循環(huán)??梢允褂藐P(guān)鍵字 break
while True:command = input("請輸入命令:")if command == 'exit':breakprint(f'輸入的命令是{command}')print('程序結(jié)束')
注意,解釋器執(zhí)行到 循環(huán)內(nèi)的 break 語句,就會從循環(huán)while 退出,
接著執(zhí)行while 循環(huán)下面的代碼 print('程序結(jié)束')
。
break 對 for 循環(huán)也一樣有效,如下:
for i in range(100):command = input("請輸入命令:")if command == 'exit':breakprint(f'輸入的命令是{command}')print('程序結(jié)束')
4. 函數(shù)中的 break 和 return
return 只能用在函數(shù)里面, 表示從函數(shù)中返回。代碼主體部分是不能用return的。
函數(shù)中的循環(huán)體內(nèi)的代碼, 使用 return 和 break 都可以從循環(huán)中跳出。
但是,break 只是 跳出循環(huán), 如果循環(huán)后面還有代碼, 會進行執(zhí)行。
return 則會從函數(shù)里面立即返回, 函數(shù)體內(nèi)的后續(xù)任何代碼都不執(zhí)行了
5. continue
有時,我們循環(huán)體內(nèi)的代碼在發(fā)現(xiàn)某種條件滿足的時候,不是要終止整個循環(huán),而是只結(jié)束當(dāng)前這一輪循環(huán),后面還要繼續(xù)循環(huán)的執(zhí)行。
while True:command = input("請輸入命令:")if command == 'exit':breakif command == 'cont':continueprint(f'輸入的命令是{command}')print('程序結(jié)束')
continue
只是當(dāng)前這次循環(huán)結(jié)束,就是這次循環(huán) continue 后面的代碼不執(zhí)行了, 后續(xù)的循環(huán)還要繼續(xù)進行。
而break
是結(jié)束整個循環(huán)。
6. 列表推導(dǎo)式
我們經(jīng)常需要這樣處理一個列表:把一個列表里面的每個元素, 經(jīng)過相同的處理 ,生成另一個列表。
比如:一個列表1,里面都是數(shù)字,我們需要生成一個新的列表B,依次存放列表A中每個元素的平方
當(dāng)然可以用for循環(huán)處理,像這樣
list1 = [1,2,3,4,5,6]
list2 = []
for num in list1:list2.append(num*num)
Python還有更方便的語法,可以這樣寫
list1 = [1,2,3,4,5,6]
list2 = [num**2 for num in list1]
這種寫法,通常叫做 列表推導(dǎo)式 。
就是把一個列表里面的每個元素經(jīng)過簡單的處理生成另一個列表的操作。
其中 for 前面的部分,就是要對取出的元素進行的處理操作, 上面的例子是計算平方。