「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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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…