「Python教案」循環語句的使用

課程目標

1.知識目標

  1. 能使用for循環和while循環設計程序。
  2. 能使用循環控制語句,break、continue、else設計程序。
  3. 能使用循環實際問題。

2能力目標

  1. 能根據需求合適的選擇循環結構。
  2. 能對嵌套循環代碼進行調試和優化。
  3. 能利用循環語句設計,如數據統計、用戶交互等程序。

3思政目標

  1. 通過對循環語句的調試培養耐心和細心。
  2. 通過算法優化提高工程效率培養效率意識。
  3. 通過異常處理強調代碼魯棒性對系統安全的影響培養責任意識。

教學內容

1.基本循環

  1. for?循環:
  • 遍歷序列,例如,列表、元組、字符串。
  • range()?函數的使用,設置起始值、結束值、以及步長。
  • 嵌套for?循環,例如,打印矩形。

案例:使用?for?循環批量處理學生成績單。

  1. while?循環:
  • 條件控制,根據?True/False進行判斷。
  • 用戶輸入控制循環,例如密碼驗證。
  • 無限循環預防(如?time.sleep()?避免CPU占用過高)

案例:用?while?循環模擬“體溫檢測門禁”,強調代碼準確性對公共安全的重要性。

2循環控制

  1. break?語句
  • 與?if?條件結合使用,當條件滿足的時候提前退出循環,例如,猜數字游戲。
  • 如果使用不恰當,會導致過早退出循環造成數據缺失。
  • break語句,好比“緊急剎車”,需要謹慎使用。
  1. continue?語句
  • 與?if?條件結合使用,當條件滿足的時候跳過當前迭代,進行下一場迭代,例如,過濾偶數。
  • 如果使用不恰當,會導致程序邏輯混亂。

案例:利用continue語句過濾無效數據,注意,需要明確標準,避免誤判。

  1. else?子句
  • 循環正常結束時執行,例如,查找元素。
  • 常與?break語句配合使用。
  • 循環結構中的else語句常會和條件結構的else混淆。
  • else語句好比“收尾工作”,在工程“項目驗收”中確保所有任務閉環。

3.嵌套循環

  1. 二維數據遍歷
  • 矩陣轉置,例如,[[1,2],[3,4]]? → ?[[1,3],[2,4]]。
  • 實現九九乘法表。
  • 案例:用嵌套循環處理“學生選課表”。
  1. 循環優化技巧
  • 提前終止條件,例如,找到目標后立即退出。
  • 利用列表推導式替代簡單循環。

4.循環應用

  1. 用戶交互
  • 利用循環輸入年齡,當年齡不為正整數時,重新輸入,直到年齡為正整數時結束循環。
  • 利用循環模擬ATM取款機實現多輪對話。
  1. 算法實現
  • 排序算法,例如冒泡排序。
  • 查找算法,例如二分查找。

重點分析

難點分析

教學活動設計

概念引入

通過對比“排隊買票”的情況解釋兩種循環的異同:①for循環,已知隊伍長度(如5人),依次處理,固定次數的循環;②while循環,未知隊伍長度,直到票買完了,根據條件解釋循環。

通過“鬧鐘”來說明while循環,循環條件是,時間未到設定值 → 持續響鈴;更新條件,每次循環后時間增加 → 直到滿足條件后退出循環。

語法定義

1.for循環

for 變量 in 可迭代對象:循環體

2while循環

while 條件表達式:循環體

3.for循環擴展語法

# 帶索引的遍歷for index, value in enumerate(["a", "b", "c"]):print(f"索引: {index}, 值: {value}")

4.while循環擴展語法

# 帶初始化和更新的循環i = 0while i < 5:print(i)i += 1 ?# 必須手動更新!

案例解析

案例:利用for循環統計班級學生成績

scores = [85, 90, 78, 92, 88]
total = 0
for score in scores:total += score
avg = total / len(scores)
print(f"平均分: {avg:.2f}")

運行結果

平均分: 86.60進程已結束,退出代碼為 0

案例:利用while循環ATM取款模擬

balance = 1000
while balance > 0:amount = int(input("請輸入取款金額:"))if amount > balance:print("余額不足")else:balance -= amountprint(f"取款成功,余額:{balance}")if balance == 0:print("余額已清零,交易結束")break

運行結果

請輸入取款金額:500取款成功,余額:500請輸入取款金額:300取款成功,余額:200請輸入取款金額:300余額不足請輸入取款金額:200取款成功,余額:0余額已清零,交易結束進程已結束,退出代碼為 0

案例:利用for循環和條件判斷對學生成績分析

scores = [85, 90, 78, 92, 88]
passing = 0
for score in scores:if score >= 60:passing += 1
print(f"及格率: {passing / len(scores) * 100:.1f}%")

運行結果

及格率: 100.0%進程已結束,退出代碼為 0

常見錯誤

錯誤:for循環中修改迭代變量,但是無效的

lst = [1, 2, 3]
for i in range(len(lst)):if lst[i] % 2 == 0:lst.pop(i) ?# 錯誤:導致跳過元素

運行結果

Traceback (most recent call last):File "D:\PythonProject\test.py", line 3, in <module>if lst[i] % 2 == 0:~~~^^^IndexError: list index out of range進程已結束,退出代碼為 1

解決方法改用列表推導式或倒序遍歷。

錯誤:while循環中條件變量未更新,導致死循環

i = 0
while i < 5:print(i)# 忘記i += 1 → 無限循環

解決方法確保每次循環后更新條件變量。

課堂練習

練習:用for循環打印九九乘法表

for i in range(1, 10):for j in range(1, i+1):print(f"{j}×{i}={i*j}", end="\t")print()

運行結果

1×1=11×2=2 2×2=41×3=3 2×3=6 3×3=91×4=4 2×4=8 3×4=12 4×4=161×5=5 2×5=10 3×5=15 4×5=20 5×5=251×6=6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=361×7=7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=491×8=8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=641×9=9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81進程已結束,退出代碼為 0

練習:用for循環打印菱形,打印圖形如下

???*

??***

?*****

*******

?*****

??***

???*

n = 4
for i in range(n):print(" " * (n - i - 1) + "*" * (2 * i + 1))
for i in range(n - 2, -1, -1):print(" " * (n - i - 1) + "*" * (2 * i + 1))

練習:修復以下代碼的邏輯錯誤

# 錯誤代碼:輸出1~10(實際輸出0~9)
i = 0
while i < 10:print(i,end=' ')i += 1
print()

運行結果

0 1 2 3 4 5 6 7 8 9進程已結束,退出代碼為 0

代碼修改:

i = 1
while i <= 10:print(i, end=' ')i += 1
print()

運行結果

1 2 3 4 5 6 7 8 9 10進程已結束,退出代碼為 0

練習:修復以下代碼的邏輯錯誤

# 錯誤代碼:計算1~100偶數和(實際輸出0)
total = 0
i = 1
while i <= 100:if i % 2 != 0: ?# 錯誤:跳過了偶數!continuetotal += ii += 1
print(total)

當i = 1時跳過循環,i的值沒有發生變化,程序出現死循環。

代碼修改:

total = 0
i = 1
while i <= 100:if i % 2 == 0: ?# 修正:只累加偶數total += ii += 1
print(total) ?# 輸出2550

運行結果

2550進程已結束,退出代碼為 0

課后作業

基礎題:用循環計算100以內所有質數的和

total = 0
for num in range(2, 101):is_prime = Truefor i in range(2, int(num ** 0.5) + 1):if num % i == 0:is_prime = Falsebreakif is_prime:total += num
print(f"100以內質數和:{total}")

運行結果

100以內質數和:1060進程已結束,退出代碼為 0

基礎題:用循環統計“學生選課表”中每門課程的選課人數,給出的數據如下

學生,課程

張三,數學

李四,英語

王五,數學

趙六,英語

data = [["學生", "課程"],["張三", "數學"],["李四", "英語"],["王五", "數學"],["趙六", "英語"]
]
courses = {}
for row in data[1:]: ?# 跳過標題行course = row[1]courses[course] = courses.get(course, 0) + 1
print(courses) ?# 輸出: {'數學': 2, '英語': 2}

運行結果

{'數學': 2, '英語': 2}進程已結束,退出代碼為 0

進階題:設計“學生成績管理系統”,具體功能:

  1. 輸入學生姓名和成績(輸入quit結束)
  2. 計算平均分并輸出高于平均分的學生名單
students = []
while True:name = input("姓名(輸入quit結束):")if name == "quit":breakscore = float(input("成績:"))students.append((name, score))if students:avg = sum(s for _, s in students) / len(students)print(f"平均分:{avg:.2f}")print("高于平均分的學生:")for name, score in students:if score > avg:print(f"{name}:{score}")

運行結果

姓名(輸入quit結束):張三成績:96姓名(輸入quit結束):李四成績:84姓名(輸入quit結束):王五成績:56姓名(輸入quit結束):quit平均分:78.67高于平均分的學生:張三:96.0李四:84.0進程已結束,退出代碼為 0

進階題:設計“智能快遞柜”系統,具體功能:

  1. 用戶輸入快遞單號(輸入quit結束)
  2. 系統判斷單號是否已存在(用列表存儲)
  3. 統計重復單號數量并提示用戶
packages = []
while True:tracking_id = input("快遞單號(輸入quit結束):")if tracking_id == "quit":breakif tracking_id in packages:print("警告:該單號已存在!")packages.append(tracking_id)
print(f"總快遞數:{len(packages)}")
print(f"重復單號數:{len(packages) - len(set(packages))}")

運行結果

快遞單號(輸入quit結束):10000快遞單號(輸入quit結束):10001快遞單號(輸入quit結束):10002快遞單號(輸入quit結束):10000警告:該單號已存在!快遞單號(輸入quit結束):10001警告:該單號已存在!快遞單號(輸入quit結束):quit總快遞數:5重復單號數:2進程已結束,退出代碼為 0

考核設計

1過程性考核(40%)

  1. 課堂練習的完成程度(20%)
  2. 編寫代碼的規范性與添加注釋的規范性(10%)
  3. 參與小組討論和解決問題的能力(10%)

2終結性考核(60%)

  1. 理論測試(20%):選擇題。
  2. 綜合項目(40%):打印數字金字塔。

綜合項目:編寫一個Python程序,使用循環語句打印如下數字金字塔。

????1

???121

??12321

?1234321

123454321

要求:

  1. 金字塔層數由用戶輸入決定。
  2. 使用基本的循環語句,for或while和print語句。
  3. 需要考慮用戶輸入驗證(必須是正整數)。
# 獲取用戶輸入并驗證
while True:n = input("請輸入金字塔的層數(正整數):")if n.isdigit() and int(n) > 0:n = int(n)breakelse:print("輸入無效,請輸入一個正整數!")# 打印數字金字塔
for i in range(1, n + 1):# 打印前導空格for j in range(n - i):print(" ", end="")# 打印左半部分數字(1到i)for k in range(1, i + 1):print(k, end="")# 打印右半部分數字(i-1到1)for l in range(i - 1, 0, -1):print(l, end="")# 換行print()

運行結果

請輸入金字塔的層數(正整數):51121123211234321123454321進程已結束,退出代碼為 0

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/81516.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/81516.shtml
英文地址,請注明出處:http://en.pswp.cn/web/81516.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

OpenCV---findCountours

一、基本概念與用途 findContours是OpenCV中用于在二值圖像中查找輪廓的核心函數。輪廓作為連續的點集&#xff0c;能夠精確勾勒出物體的邊界&#xff0c;廣泛應用于目標檢測、形狀分析、圖像分割等領域。 函數核心價值 目標檢測&#xff1a;通過輪廓定位圖像中的物體&#…

20250523-BUG:無法加載“GameLib/Framework.h“頭文件(已解決)

BUG&#xff1a;無法加載"GameLib/Framework.h"頭文件&#xff08;已解決&#xff09; 最近在打開新的C項目時報了這個錯&#xff0c;我是按照以下步驟來排除的BUG&#xff0c;希望對您有所幫助~ 檢查【C/C】-【附加包含目錄】中的路徑有無問題&#xff0c;一般需要加…

商品條形碼查詢接口如何用C#進行調用?

一、什么是商品條碼查詢接口&#xff1f; 1974年6月26日&#xff0c;美國俄亥俄州的一家超市首次使用商品條碼完成結算&#xff0c;標志著商品條碼正式進入商業應用領域。這項技術通過自動識別和數據采集&#xff0c;極大提升了零售行業的作業效率&#xff0c;減少了人工錄入錯…

SD07_NVM的安裝及相關操作

以下是在 Windows 系統 上使用 NVM&#xff08;Node Version Manager&#xff09; 管理多個 Node.js 版本的詳細步驟&#xff0c;從零開始操作&#xff1a; 一、準備工作 卸載舊版 Node.js 打開 控制面板 → 程序和功能&#xff0c;找到已安裝的 Node.js 和 npm&#xff0c;徹底…

OSI 深度安全防御體系架構深度剖析

文章目錄 前言什么是 OSI 深度安全防御體系架構各層的安全防御措施物理層數據鏈路層網絡層傳輸層會話層表示層應用層 OSI 深度安全防御體系架構的優勢全方位防護深度防御靈活性和可擴展性 總結 前言 大家好&#xff0c;我是沛哥兒。今天咱們來深入探討一下 OSI 深度安全防御體…

大模型應用:開發移動端頁面個人中心頁面提示詞

角色 你是一個移動端web頁面開發專家&#xff0c;擅長開發移動端頁面&#xff0c;使用原生web技術&#xff08;html&#xff0c;css,js&#xff09;&#xff0c;開發的頁面針對手機移動端友好 技術棧 使用基礎的Html&#xff0c;CSS&#xff0c;JavaScript方案實現&#xff…

從零到一:影刀RPA學習者的破局之路

1. 學習目標與預期差距分析 1.1 官方課程學習目標梳理 影刀RPA的官方課程旨在幫助學習者掌握RPA&#xff08;機器人流程自動化&#xff09;的基本概念、操作技能和常見應用場景。課程內容通常包括&#xff1a; RPA基礎理論&#xff1a;介紹RPA的定義、優勢、發展歷程以及與其…

計算機組成與體系結構:硬盤驅動器(Hard Disk Drives)

目錄 &#x1f4bd; 硬盤驅動器&#xff08;HDD&#xff09;&#xff1a;傳統的固定輔助存儲設備 什么是硬盤驅動器&#xff1f; 硬盤的工作原理 HDD 的物理結構 Disk Pack&#xff08;盤組&#xff09; Tracks&#xff08;磁道&#xff09; Cylinders&#xff08;柱面&…

GitCode鏡像倉庫批量下載開發實錄

GitCode作為國內領先的開源代碼托管平臺&#xff0c;其鏡像倉庫批量下載功能對開發者生態建設與開源協作效率提升具有關鍵價值。本文基于企業級代碼資產管理需求&#xff0c;系統記錄從需求分析到生產部署的全周期開發實踐。內容覆蓋鏡像倉庫同步機制設計、分布式任務調度優化、…

基線配置管理:為什么它對網絡穩定性至關重要

什么是基線配置&#xff08;Baseline Configuration&#xff09; 基線配置&#xff08;Baseline Configuration&#xff09;是經過批準的標準化主設置&#xff0c;代表所有設備應遵循的安全、合規且運行穩定的配置基準&#xff0c;可作為評估變更、偏差或未授權修改的參考基準…

AJAX get請求如何提交數據呢?

在 AJAX 中使用 GET 請求提交數據&#xff0c;主要通過 在 URL 后拼接查詢參數 的方式實現&#xff0c;具體步驟如下&#xff1a; 1.構造帶參數的 URL 將數據以 鍵值 的形式拼接在 URL 后&#xff0c;多個參數間用 & 連接。例如&#xff1a; var url "https://exa…

基于FashionMnist數據集的自監督學習(對比式自監督學習SimCLR算法)

目錄 一&#xff0c;對比式自監督學習 1.1 簡介 1.2 常見算法 1.2.1 SimCLR (2020) 1.2.2 MoCo (2020) 1.2.3 BYOL (2021) 1.2.4 SimSiam (2021) 1.2.5 CLIP (2021) 1.2.6 DINO (2021) 1.2.7 SwAV (2020) 二&#xff0c;代碼邏輯分析 2.1 整體目標與流程 2.2 數據…

Linux:基礎指令與內涵理解(下)與權限

1.mv 作用&#xff1a;將文件移動、文件重命名 語法&#xff1a; mv (選項) 源文件/目錄 目標文件/目錄 &#xff08;1&#xff09;將文件/目錄移動到當前目錄的新文件/目錄&#xff08;也就是重命名操作&#xff09; 這里我們mv了test.txt文件到當前目錄下當前并不存在的ln.tx…

卷積神經網絡(CNN)入門學習筆記

什么是 CNN&#xff1f; CNN&#xff0c;全稱 卷積神經網絡&#xff08;Convolutional Neural Network&#xff09;&#xff0c;是一種專門用來處理圖片、語音、文本等結構化數據的神經網絡。 它模仿人眼識別圖像的方式&#xff1a; 從局部到整體&#xff0c;一步步提取特征&a…

c#基礎07(調試與異常捕捉)

文章目錄 調試與異常捕捉調試異常處理C#中的異常類異常處理拋出對象 調試與異常捕捉 很多時間&#xff0c;寫代碼不能一擼到底&#xff0c;中間都是經歷過無數次的調試&#xff0c;才能正常正確的運行起來。.Net調試有很多方法和技巧。 調試 在C#中程序調試主要指在Visual S…

一種比較精簡的協議

鏈接地址為&#xff1a;ctLink: 一個比較精簡的支持C/C的嵌入式通信的中間協議。 本文采用的協議格式如下 *幀頭 uint8_t 起始字節&#xff1a;0XAF\ *協議版本 uint8_t 使用的協議版本號&#xff1a;當前為0X01\ *負載長度 uint8_t 數據段內容長…

【windwos】文本編輯器Notepad++ 替代品Notepad--

一、N和N--對比介紹 曾經備受推崇的「Notepad」曾是Windows上的經典代碼編輯器。然而&#xff0c;作者的一些政治言論已經讓它被廣大中國用戶拋棄。 一個名為「Notepad--」的新編輯器&#xff0c;也是開源免費&#xff0c;功能和實用性也在盡可能接近。與此同時&#xff0c;「N…

貪心算法套路模板+詳細適用場景+經典題目清單

1. 排序 貪心選擇 適用場景&#xff1a; 任務調度問題&#xff1a;需要安排多個任務&#xff0c;盡量完成更多任務或最小沖突。 區間調度問題&#xff1a;選出最多互不重疊的區間。 區間覆蓋問題&#xff1a;用最少區間覆蓋某個范圍。 合并區間問題&#xff1a;合并重疊區…

Qt QPaintEvent繪圖事件painter使用指南

繪制需在paintEvent函數中實現 用圖片形象理解 如果加了刷子再用筆就相當于用筆畫過的區域用刷子走 防雷達&#xff1a; 源文件 #include "widget.h" #include "ui_widget.h" #include <QDebug> #include <QPainter> Widget::Widget(QWidget…

SIGGRAPH 2025 | 快手可靈團隊提出3D感知的電影級文本到視頻生成框架CineMaster

Sora、可靈等視頻生成模型令人驚艷的性能表現使得創作者僅依靠文本輸入就能夠創作出高質量的視頻內容。然而&#xff0c;我們常見的電影片段通常是由導演在一個場景中精心布置多個目標的運動、攝像機拍攝角度后再剪輯而成的。例如&#xff0c;在拍攝賽車追逐的場景時&#xff0…