課時9:了不起的分支和迴圈3

来源:https://www.cnblogs.com/DC0307/archive/2018/07/28/9380419.html
-Advertisement-
Play Games

目錄: 一、while迴圈語句 二、for迴圈語句 三、range() 四、break語句 五、continue語句 六、課時09課後習題及答案 ********************* 一、while迴圈語句 ********************* Python的while迴圈跟if條件分支 ...


目錄:

  一、while迴圈語句

  二、for迴圈語句

  三、range()

  四、break語句

  五、continue語句

  六、課時09課後習題及答案

 

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

一、while迴圈語句

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

語法:
while 條件:
  迴圈體

Python的while迴圈跟if條件分支類似,在條件為真的情況下,執行一段代碼,不同的是,只要條件為真,while迴圈會一直重覆執行那段代碼,把這段代碼稱為迴圈體。

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

二、for迴圈語句

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

雖然說Python是由C語言編寫而來的,但是Ta的for迴圈跟C語言的for迴圈不太一樣,Python的for迴圈顯得更為智能和強大!這主要表現在它會自動調用迭代器的next()方法,會自動捕獲StopIteration異常並結束迴圈,所以這更像是一個具有現代化氣質的for迴圈結構。

語法:
for 目標 in 表達式:
  迴圈體
>>> favourite = "dczww"
>>> for each in favourite:
    print(each,end=" ")

d c z w w 

 

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

三、range()

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

 for迴圈還有另外一個小伙伴 range()內建函數。常與for迴圈混跡於各種計數迴圈之間。

語法:range( [strat,] stop[, step=1] )
—這個BIF有三個參數,其中用中括弧括起來的兩個表示這兩個參數是可選的。
—step=1表示第三個參數的值預設值是1。
—range這個BIF的作用是生成一個從start參數的值開始到stop參數的值結束的數字序列。

只傳遞一個參數的range(),例如range(5),它會將一個參數預設設置為0,生成0~5的所有數字。(註:包括0但不包括5)

>>> for i in range(5):
    print(i)
0
1 2 3 4

傳遞兩個參數的range():

>>> for i in range(2,9):
    print(i)
    
2
3
4
5
6
7
8

傳遞三個參數的range():

>>> for i in range(1,10,2):
    print(i)

1
3
5
7
9

 

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

四、break語句

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

 break語句的作用是終止當前迴圈,跳出迴圈體。舉個例子:

bingo = '小甲魚是帥哥'
answer = input('請輸入小甲魚最想聽的一句話:')

while True:
    if answer == bingo:
        break
    answer = input('抱歉,錯了,請重新輸入(答案正確才能退出游戲):')

print('哎喲,帥哦~')
print('您真是小甲魚肚子里的蛔蟲啊^_^')

或者這樣寫:

love = "zww"
print("請問DC喜歡誰:",end=" ")
while True:
      answer = input()
      if answer == love:
            break
      print("請重新回答(回答對了才能退出哦):",end="")
print("蟹蟹")

 

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

五、continue語句

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

 continue語句的作用是終止本輪迴圈並開始下一輪迴圈(這裡要註意的是:在開始下一輪迴圈之前,會先測試迴圈條件)舉個例子:

for i in range(10):
    if i%2 != 0:
        print(i,end=" ")
        continue
    i += 2
    print(i,end=" ")

列印出的結果為:2 1 4 3 6 5 8 7 10 9

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

六、課時09課後習題及答案

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

測試題:

0. 下麵的迴圈會列印多少次"I Love FishC"?
for i in range(0, 10, 2):
    print('I Love FishC')
1. 下麵的迴圈會列印多少次"I Love FishC"?
for i in 5:
    print('I Love FishC')
2. 回顧一下 break 和 continue 在迴圈中起到的作用?
3. 請談下你對列表的理解?
4. 請問 range(10) 生成哪些數?
5. 目測以下程式會列印什麼?
1 while True:
2     while True:
3         break
4         print(1)
5     print(2)
6     break
7 print(3)

6. 什麼情況下我們要使迴圈永遠為真?

7. 【學會提高代碼的效率】你的覺得以下代碼效率方面怎樣?有沒有辦法可以大幅度改進(仍然使用while)?
i = 0
string = 'ILoveFishC.com'
while i < len(string)):
    print(i)
    i += 1

 

動動手:

0. 設計一個驗證用戶密碼程式,用戶只有三次機會輸入錯誤,不過如果用戶輸入的內容中包含"*"則不計算在內。

1. 編寫一個程式,求 100~999 之間的所有水仙花數。

如果一個 3 位數等於其各位數字的立方和,則稱這個數為水仙花數。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一個水仙花數。

2. 三色球問題

有紅、黃、藍三種顏色的求,其中紅球 3 個,黃球 3 個,綠球 6 個。先將這 12 個球混合放在一個盒子中,從中任意摸出 8 個球,編程計算摸出球的各種顏色搭配。

答案:

 

測試題答案:

0. 下麵的迴圈會列印多少次"I Love FishC"

for i in range(0, 10, 2):
     print('I Love FishC')

5 次,因為從 0 開始,到 10 結束,步進為 2

1. 下麵的迴圈會列印多少次"I Love FishC"

for i in 5:
     print('I Love FishC')

會報錯,上節課的課後習題我們提到了 in 成員資格運算符,而不是像 C 語言那樣去使用 for 語法。Python for 更像腳本語言的 foreach
  
2. 回顧一下 break continue 在迴圈中起到的作用
break語句的作用是終止當前迴圈,跳出迴圈體。
continue語句的作用是終止本輪迴圈並開始下一輪迴圈(這裡要註意的是:在開始下一輪迴圈之前,會先測試迴圈條件)。
  
3. 請談下你對列表的理解   
嗯,有些知識點需要自己總結才能加固,下節課小甲魚將跟大家暢談一個打了激素的數組:列表,不容錯過哦^_^
  
4. 請問 range(10) 生成哪些數?     
會生成 range(0, 10)list(range(0, 10)) 轉換成列表是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],註意不包含 10 哦。


5. 目測以下程式會列印什麼?

while True:
     while True:
        break
        print(1)
     print(2)
     break
print(3)

會列印:
2
3

因為 break 只能跳出一層迴圈,記住咯!
        
6. 什麼情況下我們要使迴圈永遠為真?
while Ture:
    迴圈體
 
同樣用於游戲實現,因為游戲只要運行著,就需要時刻接收用戶輸入,因此使用永遠為真確保游戲線上。操作系統也是同樣的道理,時刻待命,操作系統永遠為真的這個迴圈叫做消息迴圈。另外,許多通訊伺服器的客戶端/伺服器系統也是通過這樣的原理來工作的。 
所以永遠為雖然是死迴圈,但不一定是壞事,再說了,我們可以隨時用 break 來跳出迴圈!
    
7. 【學會提高代碼的效率】你的覺得以下代碼效率方面怎樣?有沒有辦法可以大幅度改進(仍然使用while)

i = 0
string = 'ILoveFishC.com'
while i < len(string)):
    print(i)
    i += 1

這段代碼之所以效率比較低是因為每次迴圈都需要調用一次 len() 函數(我們還沒有學到函數的概念,小甲魚這裡為零基礎的朋友形象的解釋下:就像你打游戲打得正HIGH的時候,老媽讓你去買鹽......你有兩種選擇,一次買一包,一天去買五次,或者一次性買五包回來,老媽要就直接給她。)

i = 0
string = 'ILoveFishC.com'
length = len(string)
while i < length:
    print(i)
    i += 1  

 

動動手答案:

0. 設計一個驗證用戶密碼程式,用戶只有三次機會輸入錯誤,不過如果用戶輸入的內容中包含"*"則不計算在內。

我們先根據運行截圖進行程式的分析:1.在開始和用戶輸入錯誤的情況下,都有一個“請輸入密碼”的字樣,且都在說明文字的末尾,證明“請輸入密碼”這段文字可重覆應用,可以在while迴圈里,用continue語句實現。2.根據題目要求,如果用戶輸入的內容中包含"*"則不計算在可輸入錯誤的三次機會內,我們想到的是每次輸入後,次數減去一,在含*語句的判斷後,列印出的語句 次數加1 就實現了要求。但感覺複雜了,這裡其實依舊可以用continue語句實現,終止本次迴圈,進入下一次迴圈,次數減一的語句放在continue後面就好。3.這裡肯定要用到條件分支語句,先判斷輸入正確,還是輸入錯誤,都可以,提議像小甲魚一樣先易後難,先判斷輸入正確,這樣程式看起來更加的簡潔,也符合通常的邏輯。

count = 3
password = 'FishC.com'

while count:
    passwd = input('請輸入密碼:')
    if passwd == password:
        print('密碼正確,進入程式......')
        break
    elif '*' in passwd:
        print('密碼中不能含有"*"號!您還有', count, '次機會!', end=' ')
        continue
    else:
        print('密碼輸入錯誤!您還有', count-1, '次機會!', end=' ')    
    count -= 1

 或者這樣寫:

password = "FishC.com"
times = 3
passwd = 0
while passwd != password and times:#這裡大可改成while times:  只是要掌握這種用法 前面提到過
    passwd = input("請輸入密碼:")
    if '*' in passwd:
        print("密碼中不能含有*號!您還有"+str(times)+"機會",end=" ")
        continue
    elif passwd != password:
        print("密碼輸入錯誤!您還有"+ str(times-1) +"機會",end=" ")
    else:
        print("密碼正確,進入程式...")
    times -= 1

這裡有個關於字元串的問題需要提出:

times=3
一、print("密碼中不能含有*號!您還有"+times+"機會",end=" ")
二、print("密碼中不能含有*號!您還有"+str(times)+"機會",end=" ")
三、print("密碼中不能含有*號!您還有",times,"機會",end=" ")

第一種報錯,第二三種能運行。能解釋下其中的原理嗎?第二三種有何區別?

答:1.字元串和整型不能相加。
2.把times轉換成字元串再拼接。
3.print可以有多個參數,參數可以有任何類型(假如不可列印的話就輸出對象,最後這些參數都會被轉換成字元串), print會把轉換後的東西拼接在一起的再輸出。

 

1. 編寫一個程式,求 100~999 之間的所有水仙花數。

如果一個 3 位數等於其各位數字的立方和,則稱這個數為水仙花數。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一個水仙花數

for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 註意這裡要使用地板除哦~
    if sum == i:
        print(i)

 

2. 三色球問題

有紅、黃、藍三種顏色的求,其中紅球 3 個,黃球 3 個,綠球 6 個。先將這 12 個球混合放在一個盒子中,從中任意摸出 8 個球,編程計算摸出球的各種顏色搭配。

print('red\tyellow\tblue')
for red in range(0, 4):
    for yellow in range(0, 4):
        for green in range(2, 7):
            if red + yellow + green == 8:
                # 註意,下邊不是字元串拼接,因此不用“+”哦~
                print(red, '\t', yellow, '\t', green)

註釋:range(2, 7)是產生[2, 3, 4, 5, 6]5個數,綠球不能是1個,因為如果綠球是1個的話,紅球 + 黃球需要有7個才能符合題意,而紅球和黃球每種只有3個,因此是range(2, 7)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Document</title> <style> *{ margin: 0px; padding: 0px; } #outer{ width: 240px; mar ...
  • /*$http常用的幾個參數 $http服務的設置對象: 1、method 字元串 表示發送的請求類型 get post jsonp等等 2、url 字元串 絕對或者相對的URL,請求的目標 3、params 字元串或對象 會被轉化成查詢字元串加到URL後面,如果不是字元串會被JSON序列化 4、d ...
  • RovingUI是個人在開發小程式過程中將用到的組件集合而成的一個UI庫,包含一些基本通用組件(按鈕、柵格、通用樣式、徽標、通知和麵包屑)。 源起得歸於我在開發中沒有找到現成的堆棧式提醒框(比如antd裡面的Notification),於是就自己寫了一個。發現效果還不錯,遂添了幾個通用組件,於是就有 ...
  • 在採用JQuery進行表單非同步提交時,前臺傳入的是json數據格式,後臺controller用map接收,再傳回前臺進行結果判斷時,if-else接收結果()裡面,儘量不要出現“=”,不然判斷語句失效,應該在後臺將一個boolean類型的flag變數存入map中:map.put("flag",tru ...
  • 匿名對象的概念: 匿名對象是指創建對象時,只有創建對象的語句,卻沒有把對象地址值賦值給某個變數。 格式: 創建一個普通對象 創建一個匿名對象 匿名對象的特點: l 創建匿名對象直接使用,沒有變數名。 l 匿名對象在沒有指定其引用變數時,只能使用一次。匿名對象不能被多次使用去調用方法 l 匿名對象可以 ...
  • 1.1 final的概念 final是個修飾符,它可以用來修飾類,類的成員,以及局部變數。不能修飾構造方法。 問題: 繼承的出現提高了代碼的復用性,並方便開發。但隨之也有問題,有些類在描述完之後,不想被繼承,或者有些類中的部分方法功能是固定的,不想讓子類重寫。可是當子類繼承了這些特殊類之後,就可以對 ...
  • static概念 static它是靜態修飾符,一般用來修飾類中的成員。 static特點 1.多個對象共用一個static成員變數。一個對象將static成員變數值修改了,其他對象中的static成員變數值也跟著改變 2.被static修飾的成員可以並且建議通過類名直接訪問。 訪問靜態成員的格式: ...
  • 在互聯網系統中,理想的情況下,肯定是希望系統能夠同時滿足“一致性”、“可用性”和“分區容忍性”。 但是基於熟悉的CAP定律也好,還是BASE理論, 我們知道,在實際情況中是不可能實現的。本文重點來闡述下關於一致性的方案,包括強一致性和最終一致性。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...