流程控制之循環(huán)

循環(huán)

  • 了解循環(huán)
  • while語法【重點(diǎn)】
  • while應(yīng)用
  • break和continue
  • while循環(huán)嵌套【重點(diǎn)】
  • while循環(huán)嵌套應(yīng)用【難點(diǎn)】
  • for循環(huán)

一. 循環(huán)簡介

1.1 循環(huán)的作用

思考:假如我雙十一需要付尾款,要提醒自己說:記得,說
100遍“記得,付尾款”。這個時候程序員會怎么做?

答:100遍print('記得,付尾款')

思考:復(fù)制粘貼100次嗎?

答:重復(fù)執(zhí)行100次一樣的代碼,程序中循環(huán)即可

循環(huán)的作用:讓代碼更高效的重復(fù)執(zhí)行。

1.2 循環(huán)的分類

在Python中,循環(huán)分為whilefor兩種,最終實(shí)現(xiàn)效果相同。

二. while的語法

while 條件:
    條件成立重復(fù)執(zhí)行的代碼1
    條件成立重復(fù)執(zhí)行的代碼2
    ......

2.1 快速體驗(yàn)

需求:復(fù)現(xiàn)重復(fù)執(zhí)行100次print('記得,付尾款')(輸出更簡潔一些,我們這里設(shè)置5次)。

分析:初始值是0次,終點(diǎn)是5次,重復(fù)做的事情輸出“記得,付尾款”。

# 循環(huán)的計(jì)數(shù)器
i = 0
while i < 5:
    print('記得,付尾款')
    i += 1

print('任務(wù)結(jié)束')

三. while的應(yīng)用

3.1 應(yīng)用一:計(jì)算1-100累加和

分析:1-100的累加和,即1 + 2 + 3 + 4 +….,即前兩個數(shù)字的相加結(jié)果 + 下一個數(shù)字( 前一個數(shù)字 + 1)。

i = 1
result = 0
while i <= 100:
    result += i
    i += 1

# 輸出5050
print(result)

注意:為了驗(yàn)證程序的準(zhǔn)確性,可以先改小數(shù)值,驗(yàn)證結(jié)果正確后,再改成1-100做累加。

3.2 應(yīng)用二:計(jì)算1-100偶數(shù)累加和

分析:1-100的偶數(shù)和,即 2 + 4 + 6 + 8....,得到偶數(shù)的方法如下:

  • 偶數(shù)即是和2取余結(jié)果為0的數(shù)字,可以加入條件語句判斷是否為偶數(shù),為偶數(shù)則累加
  • 初始值為0 / 2 , 計(jì)數(shù)器每次累加2

3.2.1 方法一:條件判斷和2取余數(shù)則累加

# 方法一:條件判斷和2取余數(shù)為0則累加計(jì)算
i = 1
result = 0
while i <= 100:
    if i % 2 == 0:
        result += i
    i += 1

# 輸出2550
print(result)

3.2.2 方法二:計(jì)數(shù)器控制

# 方法二:計(jì)數(shù)器控制增量為2
i = 0
result = 0
while i <= 100:
    result += i
    i += 2

# 輸出2550
print(result)

四、break和continue

break和continue是循環(huán)中滿足一定條件退出循環(huán)的兩種不同方式。

4.1 理解

舉例:一共吃5個蘋果,吃完第一個,吃第二個…,這里"吃蘋果"的動作是不是重復(fù)執(zhí)行?

情況一:如果吃的過程中,吃完第三個吃飽了,則不需要再吃第4個和第五個蘋果,即是吃蘋果的動作停止,這里就是break控制循環(huán)流程,即==終止此循環(huán)==。

情況二:如果吃的過程中,吃到第三個吃出一個大蟲子...,是不是這個蘋果就不吃了,開始吃第四個蘋果,這里就是continue控制循環(huán)流程,即==退出當(dāng)前一次循環(huán)繼而執(zhí)行下一次循環(huán)代碼==。

4.1.1 情況一:break

i = 1
while i <= 5:
    if i == 4:
        print(f'吃飽了不吃了')
        break
    print(f'吃了第{i}個蘋果')
    i += 1

4.1.2 情況二:continue

i = 1
while i <= 5:
    if i == 3:
        print(f'大蟲子,第{i}個不吃了')
        # 在continue之前一定要修改計(jì)數(shù)器,否則會陷入死循環(huán)
        i += 1
        continue
    print(f'吃了第{i}個蘋果')
    i += 1

五. while循環(huán)嵌套

5.1 應(yīng)用場景

故事梗概:有天小明犯錯誤了老手生氣了,懲罰:說3遍“老師, 我錯了”,這個程序是不是循環(huán)即可?但如果老師說:還要抄寫今天的作業(yè),這個程序怎么寫?

while 條件:
    print('老師, 我錯了')
print('抄寫今天的作業(yè)')

但如果老師還是生氣,把這套懲罰要連續(xù)3天都執(zhí)行,有如何寫程序?

while 條件:
    while 條件:
        print('老師, 我錯了')
    print('抄寫今天的作業(yè)')

5.2 語法

while 條件1:
    條件1成立執(zhí)行的代碼
    ......
    while 條件2:
        條件2成立執(zhí)行的代碼
        ......

總結(jié):所謂while循環(huán)嵌套,就是一個while里面嵌套一個while的寫法,每個while和之前的基礎(chǔ)語法是相同的。

5.3 快速體驗(yàn):復(fù)現(xiàn)場景

5.3.1 代碼

j = 0
while j < 3:
    i = 0
    while i < 3:
        print('老師,我錯了')
        i += 1
    print('抄寫今天的作業(yè)')
    print('一套懲罰結(jié)束----------------')
    j += 1

5.3.2 執(zhí)行結(jié)果

5.3.3 理解執(zhí)行流程

當(dāng)內(nèi)部循環(huán)執(zhí)行完成之后,再執(zhí)行下一次外部循環(huán)的條件判斷。

六. while循環(huán)嵌套應(yīng)用

6.1 應(yīng)用一:打印星號(正方形)

6.1.1 需求

*****
*****
*****
*****
*****

6.1.2 代碼

分析:一行輸出5個星號,重復(fù)打印5行

# 重復(fù)打印5行星星
j = 0
while j <= 4:
    # 一行星星的打印
    i = 0
    while i <= 4:
        # 一行內(nèi)的星星不能換行,取消print默認(rèn)結(jié)束符\n
        print('*', end='')
        i += 1
    # 每行結(jié)束要換行,這里借助一個空的print,利用print默認(rèn)結(jié)束符換行
    print()
    j += 1

6.2 應(yīng)用二:打印星號(三角形)

6.2.1 需求

*
**
***
****
*****

6.2.2 代碼

分析:==一行輸出星星的個數(shù)和行號是相等的==,每行:重復(fù)打印行號數(shù)字個星號,將打印行星號的命令重復(fù)執(zhí)行5次實(shí)現(xiàn)打印5行。

# 重復(fù)打印5行星星
# j表示行號
j = 0
while j <= 4:
    # 一行星星的打印
    i = 0
    # i表示每行里面星星的個數(shù),這個數(shù)字要和行號相等所以i要和j聯(lián)動
    while i <= j:
        print('*', end='')
        i += 1
    print()
    j += 1

6.3 九九乘法表

6.3.1 執(zhí)行結(jié)果

6.3.2 代碼

# 重復(fù)打印9行表達(dá)式
j = 1
while j <= 9:
    # 打印一行里面的表達(dá)式 a * b = a*b
    i = 1
    while i <= j:
        print(f'{i}*{j}={j*i}', end='\t')
        i += 1
    print()
    j += 1

七、for循環(huán)

7.1 語法

for 臨時變量 in 序列:
    重復(fù)執(zhí)行的代碼1
    重復(fù)執(zhí)行的代碼2
    ......

7.2 快速體驗(yàn)

str1 = 'itheima'
for i in str1:
    print(i)

7.3 break

str1 = 'itheima'
for i in str1:
    if i == 'e':
        print('遇到e不打印')
        break
    print(i)

7.4 continue

str1 = 'itheima'
for i in str1:
    if i == 'e':
        print('遇到e不打印')
        continue
    print(i)

八. else

循環(huán)可以和else配合使用,else下方縮進(jìn)的代碼指的是==當(dāng)循環(huán)正常結(jié)束之后要執(zhí)行的代碼==。

8.1 while...else

需求:老師生氣了,要懲罰:連續(xù)說5遍“老師,我錯了”,如果道歉正常完畢老師就原諒我了,這個程序怎么寫?

i = 1
while i <= 5:
    print('老師,我錯了')
    i += 1
print('老師原諒我了...')

思考: 這個print是不是沒有循環(huán)也能執(zhí)行?

8.1.1 語法

while 條件:
    條件成立重復(fù)執(zhí)行的代碼
else:
    循環(huán)正常結(jié)束之后要執(zhí)行的代碼

8.1.2 示例

i = 1
while i <= 5:
    print('老師,我錯了')
    i += 1
else:
    print('老師原諒我了,真開心,哈哈哈哈')

8.1.3 退出循環(huán)的方式

需求:女朋友生氣,要求道歉5遍:媳婦兒,我錯了。道歉到第三遍的時候,媳婦埋怨這一遍說的不真誠,是不是就是要退出循環(huán)了?這個退出有兩種可能性:

  • 更生氣,不打算原諒,也不需要道歉了,程序如何書寫?
  • 只一遍不真誠,可以忍受,繼續(xù)下一遍道歉,程序如何書寫?
  1. break
i = 1
while i <= 5:
    if i == 3:
        print('這遍說的不真誠')
        break
    print('媳婦兒,我錯了')
    i += 1
else:
    print('媳婦原諒我了,真開心,哈哈哈哈')

所謂else指的是循環(huán)正常結(jié)束之后要執(zhí)行的代碼,即如果是break終止循環(huán)的情況,else下方縮進(jìn)的代碼將不執(zhí)行。

  1. continue
i = 1
while i <= 5:
    if i == 3:
        print('這遍說的不真誠')
        i += 1
        continue
    print('媳婦兒,我錯了')
    i += 1
else:
    print('媳婦原諒我了,真開心,哈哈哈哈')

因?yàn)閏ontinue是退出當(dāng)前一次循環(huán),繼續(xù)下一次循環(huán),所以該循環(huán)在continue控制下是可以正常結(jié)束的,當(dāng)循環(huán)結(jié)束后,則執(zhí)行了else縮進(jìn)的代碼。

8.2 for...else

8.2.1 語法

for 臨時變量 in 序列:
    重復(fù)執(zhí)行的代碼
    ...
else:
    循環(huán)正常結(jié)束之后要執(zhí)行的代碼

所謂else指的是循環(huán)正常結(jié)束之后要執(zhí)行的代碼,即如果是break終止循環(huán)的情況,else下方縮進(jìn)的代碼將不執(zhí)行。

8.2.2 示例

str1 = 'itheima'
for i in str1:
    print(i)
else:
    print('循環(huán)正常結(jié)束之后執(zhí)行的代碼')

8.2.3 退出循環(huán)的方式

  1. break終止循環(huán)
str1 = 'itheima'
for i in str1:
    if i == 'e':
        print('遇到e不打印')
        break
    print(i)
else:
    print('循環(huán)正常結(jié)束之后執(zhí)行的代碼')

沒有執(zhí)行else縮進(jìn)的代碼。

  1. continue控制循環(huán)
str1 = 'itheima'
for i in str1:
    if i == 'e':
        print('遇到e不打印')
        continue
    print(i)
else:
    print('循環(huán)正常結(jié)束之后執(zhí)行的代碼')

因?yàn)閏ontinue是退出當(dāng)前一次循環(huán),繼續(xù)下一次循環(huán),所以該循環(huán)在continue控制下是可以正常結(jié)束的,當(dāng)循環(huán)結(jié)束后,則執(zhí)行了else縮進(jìn)的代碼。

總結(jié)

  • 循環(huán)的作用:控制代碼重復(fù)執(zhí)行
  • while語法
while 條件:
    條件成立重復(fù)執(zhí)行的代碼1
    條件成立重復(fù)執(zhí)行的代碼2
    ......
  • while循環(huán)嵌套語法
while 條件1:
    條件1成立執(zhí)行的代碼
    ......
    while 條件2:
        條件2成立執(zhí)行的代碼
        ......
  • for循環(huán)語法
for 臨時變量 in 序列:
    重復(fù)執(zhí)行的代碼1
    重復(fù)執(zhí)行的代碼2
    ......
  • break退出整個循環(huán)
  • continue退出本次循環(huán),繼續(xù)執(zhí)行下一次重復(fù)執(zhí)行的代碼
  • else
    • while和for都可以配合else使用
    • else下方縮進(jìn)的代碼含義:當(dāng)循環(huán)正常結(jié)束后執(zhí)行的代碼
    • break終止循環(huán)不會執(zhí)行else下方縮進(jìn)的代碼
    • continue退出循環(huán)的方式執(zhí)行else下方縮進(jìn)的代碼
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容