Python起步(五)循環結構

2021-02-19 碼農百草園
什麼是循環

上一章我們學習了列表和元組,他們裡面存放的都是多個元素,我們現在已經能從裡面取出一個或者多個數據了,但是假設我們現在要對列表裡面的每個數據都執行相同的操作,目前只能按照索引一個一個取出來,然後進行修改,這樣是非常不友好的,假設列表裡面有一百個數,那豈不是要寫一百行修改操作,這個時候,我們就可以利用循環取執行那些重複性的工作了。

循環的流程圖如下:

從上圖中可以看出,只要條件滿足,程序就會一直執行下去,直到遇到不滿足條件的時候才會終止,因此編寫循環時一定要注意設置退出條件,避免出現死循環。

Python中的循環有兩種,一種是指定循環多少次的for循環,一種是根據條件判斷是否結束的while循環

for循環語法結構

for循環一般用於有明確次數的循環,它的結構如下:

for 變量 in 循環對象:
    執行語句

下面是一個簡單的例子,利用for循環依次輸出列表裡面的內容

number_list = [1, 2, 3, 4, 5]
for num in number_list:
    print(num)

執行結果:

enumerate()函數

enumerate()函數括號內傳入一個列表或者元組,在循環的時候可以得到循環是元素在列表或者元組中的索引,使用這個函數可以幫助更仔細地查看執行過程,具體看以下例子:

number_list = [1, 2, 3, 4, 5]

# enumerate函數會返回2個值,一個元素的索引,一個是元素本身
# 所以for ... in中間的變量要放2個,第一個存放所以,第二個存放元素
for index, value in enumerate(number_list):
    print(f"元素 {value} 的在列表中的索引為:{index}")

執行結果:

元素 1 的在列表中的索引為:0
元素 2 的在列表中的索引為:1
元素 3 的在列表中的索引為:2
元素 4 的在列表中的索引為:3
元素 5 的在列表中的索引為:4

通過循環,我們可以輕鬆取出裡面的值,然後可以對取出來的數據進行修改,一般修改後的數據我們會放入一個新的列表中:

number_list = [1, 2, 3, 4, 5]
print(f"原列表的內容為:{number_list}")

# 創建一個新的
new_list = []

# 遍歷進行修改
for value in number_list:
    new_list.append(value + 10)

print(f"新列表的內容為:{new_list}")

如果不想創建新的變量(畢竟給變量起名太難了),可以使用enumerate()方法通過索引修改

number_list = [1, 2, 3, 4, 5]
print(f"列表修改前的內容為:{number_list}")

# 遍歷進行修改
for index, value in enumerate(number_list):
    # 對原列表裡面元素進修改
    number_list[index] += 10

print(f"列表修改後的內容為:{number_list}")

執行後的結果:

列表修改前的內容為:[1, 2, 3, 4, 5]
列表修改後的內容為:[11, 12, 13, 14, 15]

range()函數

有時候我們可能希望某部分代碼執行多次,但是又沒有任何有關的列表或者元組供我們做循環條件使用,這個時候就可以使用range函數循環,具體看實例:

# range函數括號裡面的3表示的就是要循環的次數
for i in range(3):
    print(f"重要的事情說3遍,這是第{i}遍")

執行結果:

重要的事情說3遍,這是第0遍
重要的事情說3遍,這是第1遍
重要的事情說3遍,這是第2遍

循環嵌套

for 下面是一個語法塊,可以是普通的輸出,也可以是一個判斷,甚至是一個新的循環,下面演示一個較為複雜的例子:假設現在有3件衣服,價格分別是[79, 89, 109],3條褲子,價格分別[49, 59, 69],從中購買一件衣服,一條褲子,價格超過150的情況有多少種,全部列舉出來

# 衣服
clothes_list = [79, 89, 109]
# 褲子
trousers_list = [49, 59, 69]

# 搭配組合
match_list = []

# 循環拿出衣服的價格
for clothes in clothes_list:
    # 循環拿出褲子的價格
    for trousers in trousers_list:
        # 計算總價
        total = clothes + trousers
        # 判斷總價是否超過150,
        if total >= 150:
            # 如果超過150 ,就把衣服和褲子的價格組合成一個元組,添加到搭配組合裡面去
            match = (clothes, trousers)
            match_list.append(match)

print(f"一共有 { len(match_list) } 總情況, 他們分別是:")

# match_list裡面的元素是元組,這裡可以直接將元組兩個值分別賦值給兩個變量
for clothes, trousers in match_list:
    print(f"衣服:{clothes}, 褲子:{trousers}")

# 上面的for循環與下面這個是等效的
# for match in match_list:
#     print(f"衣服:{match[0]}, 褲子:{match[1]}")

執行結果:

一共有4種情況, 他們分別是:
衣服:89, 褲子:69
衣服:109, 褲子:49
衣服:109, 褲子:59
衣服:109, 褲子:69

很方便地將所有組合都找出來了,雖然方法很笨,一個一個組合獲取結果,但是很有效,而且對於計算機來說,這個運算完全是小意思。

中途終止循環——break

雖然for循環指定了循環執行的次數,但是我們不一定要讓它完整執行完成,也可以中途中斷循環,比如我們要在一個從純數字列表裡面找到第一個10的數字的索引:

number_list = [1, 3, 5, 12, 3, 5, 20]

for index, value in enumerate(number_list):
    print(value)     # 每次循環都列印當前的數字,便於觀察是否全部被循環
    if value > 10:   # 設置判斷條件
        print(f"找到了,索引為:{index}")
        break   # break會直接退出整個for循環

執行結果為:

1
3
5
12
找到了,索引為:3

從輸出結果可以看出來,執行了break之後,並沒有繼續輸出後面的數字,說明for循環遇到break就結束了

跳過特定循環——continue

continue的中文的中文有繼續的意思,在for循環裡面,它可以讓循環體中在continue下面的語句全部不執行,直接進入下一次循環,比如現在有一個商品價格列表,要計算它的總和,但是裡面有幾個是贈送的商品價格,它們都是:—,屬於字符串,字符串是不能和數字相加的,否則會報錯,因此也不能使用sum()函數這個時候我們就要跳過它:

price_list = [99.0, 67, 100, '-', 199, '-', 299, '-']
total = 0

for price in price_list:
    # 如果當前循環取出來的數字是 — 那就跳過本次循環,執行下一次循環
    if price == '-':
        continue
    print(f"當前進行運算的數字是:{price}")
    total += price

print(f"總數是:{total}")

執行結果:

當前進行運算的數字是:99.0
當前進行運算的數字是:67
當前進行運算的數字是:100
當前進行運算的數字是:199
當前進行運算的數字是:299
總數是:764.0

從結果裡面可以看出來,進行加法運算的都是有效的數字,而遇到字符— 後,執行了continue,後面的語句就直接跳過了,也沒有用它去進行加法運算

注意區分break和continue

brake是徹底結束循環,不論還有多少沒有執行都不會執行了

continue是結束本次循環,跳過continue語句後面的所有執行內容,但是剩餘的循環還是要一次一次執行的

While循環

上面的循環都是明確知道要循環幾次的,執行完那麼多次後就會結束,但是還有些情況,我們往往是不知道要循環多少次的,比如現在我們要提示用戶輸入幾個數字,並計算總和,但是我們並不知道用戶會輸入幾個數字,所以沒法提前設計好循環的次數,這種時候,我們就要使用另一種循環——while循環

語法結構

while循環的基本結構如下:

while 判斷條件:
 條件滿足時執行的語句

上面我們舉的例子可以這麼實現:

# 創建一個用於存放分數的列表
score_list = []
# 輸入的內容,初始化值為空
input_score = ''

# while後面接判斷條件,這裡我們將-1作為結束輸入的標誌
# 當用戶輸入的內容不是-1的時候,就讓他繼續輸入
while input_score != '-1':
    input_score = input("請輸入分數(整數):")
    # 如果是-1就不加入分數列表
    if input_score != '-1':
        score_list.append(int(input_score))

print(f"您輸入的分數為:{score_list}")
print(f"分數總和為:{sum(score_list)}")

運行結果如下:

內部終止循環——break

while內部使用break和for循環類似,while循環進入的條件是while後面的判斷,但是我們可以在循環體的內部終止它,使用break即可,上面的代碼可以改成

# 創建一個用於存放分數的列表
score_list = []
# 輸入的內容,初始化值為空
input_score = ''

# 編程裡面1代表真,0代表假,這裡的1就表示永遠循環
while 1:
    input_score = input("請輸入分數(整數):")
    # 如果是-1就退出循環
    if input_score == '-1':
        break    # brank將結束循環,直接跳到與while同級的下一句代碼執行
    score_list.append(int(input_score))

# 與while語句同級的語句是下面兩句輸出語句
print(f"您輸入的分數為:{score_list}")
print(f"分數總和為:{sum(score_list)}")

上面的代碼在執行過程中,如果用戶輸入-1,那麼將直接跳出整個循環,執行最後那兩個輸出語句

跳過本次循環——continue

while語句內使用continue效果和for完全一致,都是本次循環跳過剩餘語句,直接進入下一次循環

i = 0

while 1:
    i += 1
    print(f"本次循環i的值為:{i}")
    if i <= 2:
        continue
    print(f"能執行後面的語句,i的值為:{i}")
    if i >= 5:
        break

執行結果:

本次循環i的值為:1
本次循環i的值為:2
本次循環i的值為:3
能執行後面的語句,i的值為:3
本次循環i的值為:4
能執行後面的語句,i的值為:4
本次循環i的值為:5
能執行後面的語句,i的值為:5

可以看見,當i的值小於等於2的時候,只執行了continue上面的語句,下面的語句都沒有執行

結語

本章主要講解了2種循環語句——for循環和while循環,使用循環語句可以很方便執行n多次重複的操作,     對於這種重複性的工作,交給程序來執行是最合適的,程序執行這種重複性的運算速度比人快得多,而且比較可靠。

小練習上一章答案
fruits_list = []    # 水果列表

# 輸入水果名稱,然後添加到列表中去
name = input(f"請輸入第1種水果:")
fruits_list.append(name)

# 下面的寫法與上面是一樣的功能,只是省了中間變量name,更精簡一些
fruits_list.append(input(f"請輸入第2種水果:"))
fruits_list.append(input(f"請輸入第3種水果:"))
fruits_list.append(input(f"請輸入第4種水果:"))

print(f"您輸入的第2種水果是:{fruits_list[1]}")

score_list = []     # 成績列表

# 輸入的內容默認是字符串,需要轉為數字類型,使用int()函數轉換
# 三個函數嵌套,為了便於區分,在函數中間留了一個空格
score_list.append( int( input(f"請輸入分數1:") ) )
score_list.append( int( input(f"請輸入分數2:") ) )
score_list.append( int( input(f"請輸入分數3:") ) )
score_list.append( int( input(f"請輸入分數4:") ) )
score_list.append( int( input(f"請輸入分數5:") ) )


print(f"前三名的分數分別為:{score_list[0]}, {score_list[1]}, {score_list[2]}")

# 計算總分
total = score_list[0] + score_list[1] + score_list[2] + score_list[3] + score_list[4]
print(f"總分為:{total}")

# 總分除以人數就是平均分
average = total / len(score_list)
print(f"平均分為:{average}")

# 使用if判斷最後一名是否及格
if score_list[-1] > 60:
    print("所有人都及格了!")
else:
    print("最後一名不及格")

本章練習

從上一章的答案可以看出,在不使用循環的情況下,代碼的重複度是非常高的,本章學習了循環,請試著用循環重寫一遍上一章的代碼。第一題使用for循環,第二題使用while,不限制輸入數量,不限制順序。

每日小技巧

對於純數字的列表或者元組,Python內置了求最大值,最小值和平均值的函數,我們直接使用即可。例如有一個列表:

score = [60, 65, 70, 75, 80, 90, 100]

total = sum(score)
print(f"總分是: { total } ")

fisrt = max(score)
print(f"第一名是: { first } ")

last = min(score)
print(f"第一名是: { last } ")

你可能會問為什麼沒有平均值的函數,平均值的話直接用求和後的總數除以列表或者元組的長度就好了

average = sum(score) / len(score)
print(f"平均分是: { average } ")

相關焦點

  • Python for循環及用法詳解
    for 循環的語法格式如下:for 迭代變量 in 字符串|列表|元組|字典|集合:    代碼塊格式中,迭代變量用於存放從序列類型變量中讀取出來的元素,所以一般不會在循環中對迭代變量手動賦值;代碼塊指的是具有相同縮進格式的多行代碼(和 while 一樣),由於和循環結構聯用,因此代碼塊又稱為循環體。
  • Python while循環語句詳解
    while 語句的語法格式如下:while 條件表達式:    代碼塊這裡的代碼塊,指的是縮進格式相同的多行代碼,不過在循環結構中,它又稱為循環體。while 語句執行的具體流程為:首先判斷條件表達式的值,其值為真(True)時,則執行代碼塊中的語句,當執行完畢後,再回過頭來重新判斷條件表達式的值是否為真,若仍為真,則繼續重新執行代碼塊...如此循環,直到條件表達式的值為假(False),才終止循環。while 循環結構的執行流程如圖 1 所示。
  • python:控制流程-while循環
    #python#一. while循環1.結構i = 0while i < 10:print(i)I +=12. 語法規則:while 判斷語句:循環體 注意縮進二.輸出結果: abc第二種 while 循環a = 8while a > 5:print('abc')輸出結果:abcabc……abc解析:while循環,如果沒有中斷條件,會出現不斷循環列印aaa,即死循環。
  • 07-python中的程序組織結構
    你好,我是在學python的小潭。通過昨天的文章06-python中的運算符我們熟悉了python中運算符的定義和使用。
  • python代碼結構:使用if語句、while循環和for迭代,附詳細說明!
    把它放在一行的技術位置,python將其解釋為同一行。3.使用if、elif和else進行比較兩個等號(==)是用來判斷相等的,而一個等號(=)是把某個值賦給一個變量。Python中的比較操作符如下:相等(==)、不等於(!
  • Python | 控制結構
    Python:https://www.python.org/IDE: Pycharm、VSCode、Anacondahttps://www.jetbrains.com/pycharm/https://code.visualstudio.com/https://www.anaconda.com/文本編輯器
  • Python中的for循環
    # 循環允許我們重複執行一個代碼或代碼塊 # python中的循環 # for循環 # while循環 # for循環是一種迭代循環機制,而while循環是條件循環,迭代即重複相同的邏輯操作
  • python二級考試大綱內容:程序的三種控制結構
    #python#繼續學習python二級考試大綱內容:程序的三種控制結構順序結構、分支結構和循環結構這三種控制結構是編程的基礎組成部分,無論是準備考全國計算機等級考試還是單純是為了興趣而學習python,都必須掌握。
  • Python編程8:循環結構之for循環
    Python提供了循環語句來反覆執行一段代碼。循環結構一般重複語句主要有兩種類型的循環:1)重複一定次數的循環,這個稱謂計數循環。比如列印1到99之間所有的整數,就是重複99次執行print( )指令。2)重複直至發生某種情況時結束的循環,成為條件循環。也就是說只有條件為True,循環才會一直持續下去。
  • Python基礎知識儲備,與眾不同的for循環
    for循環在循環中很流行,寫法簡單,應用於預先知道循環次數的場景。python循環for循環語法結構for <variable>變量 in < sequence >字符串,列表,元組,字典,集合< statements >
  • Python基礎知識儲備,如何開關一個while循環
    python開發一、循環的三要素雖然循環是反覆的執行某個動作,但是循環也會停止的,沒有停止的循環就是死循環;程序如果寫出死循環python循環python循環二、While循環結構Python中的While循環語句執行時,先判斷While後面循環條件的值,
  • python:控制流程 - for迭代循環
    #pythonfor迭代的要點for 後面需要接上可迭代對象for會依次取出可迭代對象中的元素5.continue的用法:continue和break類似,但是continue不會終止循環,而是結束本次循環
  • 必須掌握的四種python數據結構,五分鐘快速掌握
    01什麼是數據結構?數據結構是相互之間存在一種或多種特定關係的數據元素的集合今天要講python的四個內置數據結構:分別是列表、元組、集合和字典,每種結構數據都有自己的特點,應用於不同情況]這個列表中存放了五個數字也可以存放字符串如果我們要使用裡面的元素,如何獲取呢?
  • 柳小白Python學習筆記 7 循環語句學習
    昨天學習的是條件語句,今天開始學循環語句。在python中我們可以使用循環語句讓某個語句或代碼組多次執行。這時就會會用到for和while語句。在python中循環語句用於循環執行程序,來處理需要重複處理的任務。
  • Python基礎教程之循環語句的使用
    在循環體內部,每次循環都用 **最新的計算結果**,**更新** 之前定義的變量**需求*** 計算 0 ~ 100 之間所有數字的累計求和結果```python# 計算 0 ~ 100 之間所有數字的累計求和結果
  • 零基礎學習 Python 之 for 循環語句
    循環( loop )是生活中常見的現象,如每天的日升日落,鬥轉星移,都是循環,程式語言的出現就是為了解決現實中的問題,所以也少不了要循環。當 i = 『r』 的時候,開始執行 print(i) ,列印出字母 r;然後循環第 2 次,讓 i = 『o',執行 print(i),列印出字母 o...如此循環下去,直到最後一個字符被列印出來,循環自動結束。
  • Python 語句與結構
    1、賦值語句python 的賦值都是指對象的引用。保存的是對象的內存地址。例如PyValue=「今天天氣不錯」 PyValue=「心情也不錯」第一句執行時Python 先在內存中創建字符串對象並賦值」 今天天氣不錯」, PyValue 設置為字符串對象的引用。
  • python while循環、數據類型
    alien_2 = {'color': 'red', 'points': 15}aliens = [alien_0, alien_1, alien_2]for alien in aliens:print(alien) 6、在字典裡嵌套列表列如:favorite_languages = {'jen': ['python
  • Python分支結構(if條件語句)
    在Python程序中有三種基本算法結構,分別是順序結構;分支結構和循環結構。順序結構就是按照語句的自然先後順序進行依次執行,我們之前講解的案例基本都是順序結構,順序結構比較簡單,在此不做贅述,讓我們直接來看分支結構。
  • Python零基礎編程——起步並搭建環境
    學python可選擇的方向廣,web方向、人工智慧方向、數據分析方向、網絡爬蟲等都是可以做的,且都屬於比較熱門且發展較好的從業方向。常見崗位:python開發工程師、人工智慧工程師、大數據分析工程師、爬蟲開發工程師、搜尋引擎工程師,等等2-主流程式語言有那些?2019 年 10 月 TIOBE 程序語言排行榜如下