第八關:for和while循環 - 0入門到進階(附練習題) | Python基礎語法

下面小編就整理了在編程中,比較常用的【for和while循環】0入門到進階的用法。

Python基礎語法 - 專欄鏈接

手把手教你如何入門,如何進階。

目錄

1.  for循環

2.  range() 函數

3.  while循環

4.  死循環

5.  break語句

6.  continue語句

7.  pass語句

8.  else語句

練習題

聯繫我們,一起學Python吧


每個人的生活和工作都充滿了循環,很多時候,循環意味着重複和枯燥。

生活中循環的例子:比如太陽每天從東邊升起西邊落下是一種循環,比如交通信號燈不斷地從紅燈變成綠燈再變成黃燈是一種循環,再比如你日復一日的起牀、工作、吃飯、睡覺也可以當成是一種循環。。。

工作中循環的例子:比如你要手動輸入500個員工的個人信息,比如你要找出兩個文件內100張照片重複的圖片,再比如你要找出excel兩張表中根據某些關鍵詞匹配把其他信息整合到一起。。。

重複的勞動會不斷消磨我們的精力,產生厭倦情緒,有時甚至會導致我們出錯。

這些工作中遇到的重複性、工作量大的事情,基本都要用到編程中【循環】。(生活中重複事情,枯燥乏味,就需要各位同學充實自己的生活,發展自己的興趣愛好,比如學Python編程,打開新世界大門的鑰匙,哈哈哈)

1.  for循環

for...in...循環語句:上圖是一個基本的常見for循環語句。

這裏的變量名i 是因爲 i 是常用名,英文名 item,就像數學中常用 xy 作爲未知數一樣,其實隨便取什麼變量名都可以。

序列 是指那些和列表有相似特性的類型。它們都存着一組數據,可以通過索引訪問裏面的元素,可以使用 for 循環遍歷等。字符串、列表、元組等都屬於 序列

循環體內的代碼可以只進行簡單的運算,也可以複雜地進行各種判斷、數據處理等,具體邏輯完全根據我們的需求定製。

字符串、列表、元組等都屬於 序列。我們來看幾個例子對比一下:

# 列表是序列
for i in ['派', '森', '編', '程']:
  print(i)
# 逐行輸出:派 森 編 程

# 元組也是序列
for i in ('派', '森', '編', '程'):
  print(i)
# 逐行輸出:派 森 編 程

# 字符串是一串字符的序列,也屬於序列
for i in '派森編程':
  print(i)
# 逐行輸出:派 森 編 程

# 整數不是序列
for i in 123:
  print(i)
# 報錯:TypeError: 'int' object is not iterable

2.  range() 函數

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)
rule_1 = range(10)
print([i for i in rule_1])        # 從 0 開始到 10,結合列表推導式
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
rule_2 = range(1, 11)     # 從 1 開始到 11
print([i for i in rule_2])
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
rule_3 = range(0, 30, 5)      # 步長爲 5
print([i for i in rule_3])
# [0, 5, 10, 15, 20, 25]
rule_4 = range(0, 10, 3)  # 步長爲 3
print([i for i in rule_4])
# [0, 3, 6, 9]
rule_5 = range(0, -10, -1) # 負數
print([i for i in rule_5])
# [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
rule_6 = range(0)
print([i for i in rule_6])
# []
rule_7 = range(1, 0)
print([i for i in rule_7])
# []

3.  while循環

while 循環 的語義是當滿足某條件時,就一直重複執行某段代碼,我們來看一下圖解:

while 循環由 循環條件循環體 兩部分組成。

循環條件是個布爾值,每次循環都會進行判斷,當滿足循環條件(值爲 True)時執行循環體內的代碼,否則結束循環。

循環體內則是那些需要重複執行的代碼,比如重複打印一句話,重複處理一堆文件,重複填寫一系列信息等等。

上圖代碼的意思是:當 i 小於 5 時,重複“打印 i 的值並將 i 的值加 1”這個操作。

i = 0
while i < 5:        # 當i每次加1,到i等於5,不滿足條件,則停止循環
    print(i)
    i = i + 1        # 等同於 i += 1  每次循環加1
# 0
# 1
# 2
# 3
# 4

4.  死循環

循環條件 是用來控制是否要結束循環的。所以,如果我們沒有控制好 循環條件,很可能會引發 死循環

在編程中,一個靠自身控制無法終止的程序稱爲 死循環。比如:

while True:
    print('learn')

上面的代碼因爲 循環條件 一直是 True,所以會永無止境地在屏幕上打印 learn。( 無休止的學習,只會累垮身體,注意休息喔 )

當然我們寫 while 循環條件時,也不會直接寫 True 的。有些情況是我們粗心的寫錯了,比如:

i = 0
while i < 5:
  print(i)
  # 此處我們不小心漏掉了 i = i + 1

上面的例子中因爲漏掉了 i = i + 1,導致 i 的值一直爲 0,一直滿足 i < 3 的循環條件。這就導致了我們的程序進入了 死循環

死循環 其實是一件很可怕的事情,它使我們的程序不受控制,永無止境地做着無意義的循環。這會造成後續代碼無法執行,甚至會導致 CPU 佔用過高電腦死機等情況。

死循環解決方法:當我們執行代碼後,出現死循環,在當前代碼的命令行 ( cmd,開發工具終端等等 )處 ctrl + c 就搞定了,停止程序。

 

5.  break語句

break 語句用於 結束循環,常和條件判斷一起使用,在特定條件下結束循環。

# for 循環
for i in range(5):
  i = i + 1
  if i == 3:
    break  # 注意此處有縮進
  print(i)
print('循環結束了')
# 逐行輸出:1 2 循環結束了


# while 循環
i = 0
while i < 5:
  i = i + 1
  if i == 3:
    break  # 注意此處有縮進
  print(i)
print('循環結束了')
# 逐行輸出:1 2 循環結束了

break 語句在 while 循環 裏和 for 循環 裏的作用一樣,都是用於提前結束循環,後續循環代碼不再執行。

有了 break 語句,在死循環中,也可以終止循環了。

i = 0
while True:
  if i == 3:        # 每次循環 i都加1,循環到i等於3的時候,進入break語句,結束循環
    break
  print(i)
  i = i + 1
print('循環結束了')
# 逐行輸出:0 1 2 循環結束了

6.  continue語句

continue 語句和 break 語句有着類似的作用,它用於 跳過當前循環,常和條件判斷一起使用,在特定情況下跳過當前循環體中的剩餘語句,繼續進行下一輪循環。

# for 循環
for i in range(5):
  i = i + 1
  if i == 3:
    continue  # 注意此處有縮進,跳出當前循環,循環繼續,不會打印3
  print(i)
print('循環結束了')
# 逐行輸出:1 2 4 5 循環結束了

# while 循環
i = 0
while i < 5:
  i = i + 1
  if i == 3:
    continue  # 注意此處有縮進,跳出當前循環,循環繼續,不會打印3
  print(i)
print('循環結束了')
# 逐行輸出:1 2 4 5 循環結束了

我們可以看到,continue 語句在 while 循環 裏和 for 循環 裏的作用一樣,當執行到 continue 語句時,continue 語句之後的代碼都被跳過了,直接進入了下一輪的循環。

continue 語句和 break 語句都用於循環, break 語句用於結束循環,continue 語句用於跳過當前循環。所以 continue 語句不能跳出 “死循環”

 

7.  pass語句

意思就是跳過

number = int(input('請輸入一個整數:'))
if number > 10:
    pass
else:
    print('你輸入了一個小於等於10的數字')

這個代碼的意思是:當 a > 10 的時候,跳過,什麼都不做。其他情況,也就是 a <= 10 的時候,執行一個print語句。

 

8.  else語句

for i in range(3):
    number = int(input('請輸入0來結束循環,你有3次機會'))
    if number == 0:
        print('觸發break語句,循環結束了,導致else語句不生效。')
        break
else:
    print('3次循環你都錯過了,else語句生效了。')

當循環中沒有碰到 break語句就會執行循環後面的 else語句,否則就不會執行。在while循環中,else的用法也是如此。

 

 

練習題

同學們,先自覺練習,答案在公衆號,公衆號回覆暗號【答案】即可。

1. 下列代碼打印結果爲?

numbers = [1,2,3,4,5]
for number in numbers:
    if number % 2 == 0:
        break
    print(number)

A. 1
B. 1
   3
   5
C. 2
D. 3
   4
   5

2. 下列代碼打印結果爲?

numbers = [1,2,3,4,5]
for number in numbers:
    if number % 2 == 0:
        continue
    print(number)

A. 1
B. 1
   3
   5
C. 2
D. 3
   4
   5

3. 下列代碼打印結果爲?

string = ['這是Python基礎語法第 %s 關' % i for i in range(1,10) if i == 8]
print(string)

A. '這是Python基礎語法第 8 關'
B. '這是Python基礎語法第 10 關'
C. ['這是Python基礎語法第 10 關']
D. ['這是Python基礎語法第 8 關']

4. 下列關於 死循環 說法正確的是?

A. 死循環是我們有意爲之的循環,不必擔心
B. 死循環是指循環“死了”,不再執行循環
C. 死循環能提高程序運行效率
D. 死循環是指靠自身控制無法終止的程序

5. 做一個簡易的彩票中獎號碼程序。

要求:隨機生成5個數字,追加到列表,打印最終5個數字的列表號碼。

提示:需要導入random模塊中的randint(a,b),隨機取數字a到b之間的數字,包括a,b。(from random import randint)

 

 

聯繫我們,一起學Python吧

 

每週每日,分享Python實戰代碼,入門資料,進階資料,基礎語法,爬蟲,數據分析,web網站,機器學習,深度學習等等。


​微信羣(關注「Python家庭」一起輕鬆學Python吧)

​QQ 羣(983031854

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章