|
文章目錄
- 1. while循環
- 1.1 while循環的嵌套
- 1.2 補充學習:print函數
- 2. for循環
- 2.1 range函數
- 2.2 for循環
- 2.3 continue和break以及return
- 2.4 for循環的嵌套
- 3. 補充學習
- 3.1 enumerate函數
- 3.2 zip函數
- 3.3 不要在遍歷列表的過程中刪除元素

循環 是編程語言常見的一種流程控制
所謂循環 就是反復的執行一段代碼
我們人類語言要讓別人反復的做一些事,可以這樣說: 請你一直怎樣怎樣,或者請你反復怎樣怎樣
Python語言要讓計算機反復的做一些事 就要使用循環語句
Python中有兩種類型的循環: while 循環 和 for 循環
1. while循環
while循環 是: 檢查一個條件表達式,只要條件表達式計算結果為True 時, 就執行下面縮進的代碼
如此反復,直到條件表達式計算結果為False時,結束 循環
while循環的基本語法:
while 條件:條件滿足時,做的事情1條件滿足時,做的事情2passi = 0# 冒號和縮進不要忘了.# 當條件的運算結果為True的時候, 會運行while代碼塊下的代碼.# 若while后的條件一直為True, 則會一直循環運行while代碼塊下的代碼.# 若為False, 則表示結束循環.# 所以需要設置循環終止的條件,否則將進入無限循環.
案例:
*******************************************************# 打印這樣的一個高為10的直角三角形.i = 1while i <= 10:print('*' * i)i += 1
對于while循環的使用需要當心死循環, 所以需要注意循環條件.
1.1 while循環的嵌套
當我們需要在while循環內執行另一個循環時,我們可以使用while循環嵌套的形式
while循環嵌套的基本語法
while 條件1:條件1滿足時,做的事情1條件1滿足時,做的事情2passwhile 條件2:條件2滿足時,做的事情1條件2滿足時,做的事情2pass# 第一個while循環將重復執行內部代碼塊,直到條件1不再滿足為止。在內部代碼塊中,我們有另一個while循環,它將重復執行內部代碼塊,直到條件2不再滿足為止。這種嵌套的循環結構可以用于處理許多問題.# 需要注意的是,在使用嵌套循環時,我們需要仔細考慮內部和外部循環之間的交互,以確保程序能夠正確地執行。另外,需要注意的是,循環嵌套可能會導致程序的執行速度變慢,因此我們應該盡可能地避免不必要的循環嵌套.
案例1: 打印99乘法表
1x1=1 1x2=2 2x2=4 1x3=3 2x3=6 3x3=9 1x4=4 2x4=8 3x4=12 4x4=16 1x5=5 2x5=10 3x5=15 4x5=20 5x5=25 1x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=36 1x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=49 1x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=64 1x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
"""1x1=11x2=2 2x2=41x3=3 2x3=6 3x3=91x4=4 2x4=8 3x4=12 4x4=161x5=5 2x5=10 3x5=15 4x5=20 5x5=251x6=6 2x6=12 3x6=18 4x6=24 5x6=30 6x6=361x7=7 2x7=14 3x7=21 4x7=28 5x7=35 6x7=42 7x7=491x8=8 2x8=16 3x8=24 4x8=32 5x8=40 6x8=48 7x8=56 8x8=641x9=9 2x9=18 3x9=27 4x9=36 5x9=45 6x9=54 7x9=63 8x9=72 9x9=81
"""# 1. 外部循環 ?右邊是外部循環# 2. 內部循環 ?左邊是內部循環i = 1while i <= 9:j = 1while j <= i:print(f'{j}x{i}={j*i}', end='\t')j += 1print('')i += 1
1.2 補充學習:print函數
系統方法print的定義:
def print(self, *args, sep=' ', end='\n', file=None):pass
默認情況下調用print()方法會自動換行,因為參數end的缺省值是'\n'
比如:
print('hello world')
`如果想要指定結尾的表現,可以修改參數end的取值``,比如設置為空就和C語言中的printf函數一樣了,不會默認換行
print('hello world', end='')
2. for循環
2.1 range函數
在學習for循環之前, 先來學習range語句. 這是一個最常與for循環一起用的語句.
語法:
range(start, stop[, step])
參數說明:
- 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)
2.2 for循環
在python中, 除了while循環語句, 還提供了另外一種循環: for循環語句. 也叫做遍歷.
語法:
for 臨時變量 in 序列(可迭代對象):# for循環體的代碼塊# for循環中定義了一個臨時變量,那么在整個循環體中都可以使用這個變量,包括循環體內部的if語句或者嵌套的循環, 但是在for循環的循環體外就不要使用此臨時變量了.
for循環是一種常見的迭代結構, 用于遍歷序列中的元素, 在python中, for循環可以用于遍歷列表, 元組, 字符串, 字典, 集合等容器類型中的元素, 并將這些元素逐一賦值給循環中的臨時變量. 然后執行特定的操作, 循環會一直重復執行, 直到序列中的所有元素都被遍歷完成. 對于序列中的每個元素, 都會執行一次循環體中的代碼塊.
for循環通常有一個循環變量, 一個序列,和一個代碼塊組成, 循環變量用于存儲當前迭代的元素, 序列是要遍歷的容器類型, 代碼塊則是在每個迭代步驟中要執行的操作, 在每個迭代步驟中, 循環變量都會被賦值為序列中的下一個元素, 然后執行代碼塊. 當序列中的所有元素都被遍歷完成后, 循環結束.
for循環簡單易懂, 代碼結構清晰, 可讀性強, 是一種高效的可靠的循環結構.
for循環和while循環兩者能完成的功能差不多.
但是也是有區別的:
- for循環用于遍歷序列(例如列表、元組、字符串等)或其他可迭代對象,并且在每次迭代中,都會將序列中的一個元素賦值給循環變量,直到序列中的所有元素都被遍歷完畢,循環結束. while循環則用于在條件為真時執行一段代碼塊,直到條件為假為止.
- for循環不需要顯式地計數器變量,也不需要顯式地定義循環條件,因為循環變量會自動遍歷整個序列.而while循環則需要顯式地定義循環條件,并在代碼塊內控制循環計數器的更新.
總之,for循環適用于已知數量的序列或可迭代對象的遍歷,而while循環適用于未知數量的循環執行,需要手動控制循環計數器和條件.
2.3 continue和break以及return
continue 語句用來告訴Python跳過當前循環的剩余語句,然后繼續進行下一輪循環.
break用來跳出整個循環
很多初學者,經常會搞不清 break 和 return的區別
首先, return 只能用在函數里面, 表示 從函數中返回
代碼主體部分是不能用return的
比如,下面的代碼執行起來就會報錯
while True:command = input("請輸入命令:")if command == 'exit':returnprint(f'輸入的命令是{command}')print('程序結束')
提示:
SyntaxError: 'return' outside function
因為 return 是表示從函數中返回,它 是不能用在 函數外面的
函數中的循環體內的代碼, 使用 return 和 break 都可以從循環中跳出
但是,break 只是 跳出循環, 如果循環后面還有代碼, 會進行執行,如下
def inputCommand():while True:command = input("請輸入命令:")if command == 'exit':breakprint(f'輸入的命令是{command}')print('末尾語句')inputCommand()
執行該函數,輸入 exit 發現,還會打印出 末尾語句 這句話
return 則會從函數里面立即返回, 函數體內的后續任何代碼都不執行了,我們把上面的代碼中的break 換成return, 如下
def inputCommand():while True:command = input("請輸入命令:")if command == 'exit':returnprint(f'輸入的命令是{command}')print('末尾語句')inputCommand()
執行該函數,輸入 exit 發現,就不會打印出 末尾語句 這句話.
2.4 for循環的嵌套
語法:
for 臨時變量1 in 序列1(可迭代對象):# for循環體的代碼塊# for循環體的代碼塊# for循環體的代碼塊for 臨時變量2 in 序列2(可迭代對象):# for循環體的代碼塊# for循環體的代碼塊# for循環體的代碼塊for i in range(10):print(f"外層循環i:{i}")for j in range(10):print(f"內層循環j:{j}")
注意點:
continue和break在嵌套循環中, 只對當前循環起作用.
for i in range(10):print(f"外層循環i:{i}")for j in range(10):print(f"內層循環j:{j}")breakprint(f'哈哈哈哈{i}')
3. 補充學習
3.1 enumerate函數
有的時候, 在使用for循環從列表或者元組中遍歷元素的時候, 除了要獲取每個元素, 還需要得到每個元素在列表元組里面的索引.
enumerate() 執行之后每次迭代都會返回一個元組, 元組里面有兩個元素, 依次是元素的索引和元素本身
比如, 找出下面列表中年齡大于17歲的學員, 打印出他們在列表中的索引:
studentAges = ['小王:17', '小趙:16', '小李:18', '小孫:16', '小徐:18']
這時候可以使用 enumerate 函數, 像下面這樣:
studentAges = ['小王:17', '小趙:16', '小李:18', '小孫:16', '小徐:18']# enumerate(studentAges) 執行之后每次迭代返回一個元組
# 元組里面有兩個元素, 依次是元素的索引和元素本身
for idx, student in enumerate(studentAges):if int(student.split(':')[-1]) > 17:print(idx)
3.2 zip函數
Python中有個內置函數zip, 常用來依次組合多個列表或者元組, 將里面相同索引的數據放入一組, 方便循環使用
比如:
names = ['張三', '李四', '王五'] # 姓名
salaries = [18000, 11000, 15000] # 對應薪資name_salary = zip(names, salaries)for name, salary in name_salary:print(name, salary)
運行結果是:
張三 18000
李四 11000
王五 15000
如果,兩個列表里面元素個數不相等, zip以少的那個為準,比如:
names = ['張三', '李四', '王五'] # 姓名
salaries = [18000, 11000] # 對應薪資,少一個name_salary = zip(names, salaries)for name, salary in name_salary:print(name, salary)
運行結果是:
張三 18000
李四 11000
3.3 不要在遍歷列表的過程中刪除元素
看下面這段代碼,把列表中值為 4 的元素刪除
list1 = [ 4, 4, 1, 2]for idx, num in enumerate(list1):if num == 4:list1.pop(idx)print(list1)
運行結果是:
[4, 1, 2]
因為遍歷過程中刪除一個元素,使得列表的長度發生了變化,后面的元素索引被提前了,就會跳過一個元素
所以遍歷 列表(包括后面要學習的字典)時, 不要在過程中刪除元素
可以新建一個列表,這樣:
list1 = [ 4, 4, 1, 2]list2 = []for idx, num in enumerate(list1):if num != 4:list2.append(num)print(list2)
|
|