第5课-while循环讲义 高中信息科技

资源下载
  1. 二一教育资源

第5课-while循环讲义 高中信息科技

资源简介

Python基础
while循环语句
第一部分: 知识点梳理
(一)知识回顾
1.while 循环的基本语法:
while 条件表达式:
# 循环体(缩进块)
语句1
语句2
# 通常包含改变循环变量的语句,防止死循环
2.流程图:
3.死循环与终止:
死循环:如果条件永远为 True,程序将无限执行下去。
危害:导致程序卡死,CPU 占用率高。
应用:在游戏主循环、服务器监听中,有时故意设计死循环,但通常配合 break 使用。
强制终止:在 IDLE 或命令行中可使用 Ctrl + C 中断程序。
(二)循环控制三要素(重点)
1.在使用 while 循环时,必须注意以下三个要素,缺一不可:
初始值:循环变量刚开始的值。
循环条件:决定循环是否继续执行的表达式(布尔值)。
更新语句:在循环体内改变循环变量的值,使条件最终趋向于 False。
2.break 与 continue:
为了更灵活地控制循环流程,Python 提供了两个关键字:
break:终止整个循环。无论循环条件是否为真,只要执行到 break,循环立即结束。
continue:跳过本次循环。忽略 continue 之后剩余的代码,立即进入下一次条件判断。
(三)案例实践
案例一:基础累加器 —— 计算 1 到 100 的和
需求:使用 while 循环计算 1+2+3+...+1001+2+3+...+100 的结果。
代码实现:
# 1. 三要素初始化
i = 1 # 循环变量(初始值)
sum_result = 0 # 累加器
# 2. 循环条件
while i <= 100:
# 3. 累加操作
sum_result = sum_result + i
# 4. 更新语句(非常重要,否则死循环)
i = i + 1
# 循环结束后打印结果
print(f"1到100的和是:{sum_result}") # 输出:5050
sum_result 称为“累加器”,用来保存每一次相加的结果。
i 既是循环计数器,也是参与计算的数字。
案例二:猜数字游戏 —— break 的应用
需求:程序随机生成一个 1-100 的整数。用户输入数字,程序提示“猜大了”、“猜小了”或“猜对了”。猜对后立即结束游戏。
代码实现:
import random
# 生成随机数
secret = random.randint(1, 100)
print("欢迎来到猜数字游戏!你有无限次机会。")
# 死循环,直到猜对才 break
while True:
guess = int(input("请输入你猜的数字:"))
if guess > secret:
print("猜大了,往小试试。")
elif guess < secret:
print("猜小了,往大试试。")
else:
print(f"恭喜你!猜对了,答案就是 {secret}!")
break # 终止循环
print("游戏结束。")
while True 构造了一个无限循环。
只有当条件满足(猜对)时,break 强行跳出,避免了使用复杂的循环条件。
案例三:continue 的应用 —— 输出偶数
需求:输出 1 到 10 之间的所有偶数(使用 continue 跳过奇数)。
代码实现:
num = 0
while num < 10:
num += 1
# 如果 num 是奇数,跳过打印,直接进入下一次循环
if num % 2 != 0:
continue
print(f"偶数:{num}")
当 num 为奇数时,执行 continue,后面的 print 语句被跳过,程序直接回到 while 头部判断 num < 10。
(四)易错点与注意事项
1.忘记写 i += 1:
这是初学者最常犯的错误。如果不改变循环变量的值,while 条件永远为 True,导致死循环。
错误示例:
i = 1
while i <= 5:
print(i)
# 缺少 i = i + 1
2.缩进错误:
Python 依靠缩进来区分代码块。循环体内的代码必须严格缩进(通常 4 个空格)。break 和 continue 必须在循环体内部。
3.break 和 continue 的位置:
如果 break 逻辑写错了位置,可能导致循环在未完成任务前提前结束。
4.浮点数比较问题:
尽量不要用浮点数作为循环条件的比较对象,由于精度问题可能导致循环次数与预期不符。
建议:使用整数作为循环计数器。
第二部分:练习
选择题
1. 关于 `while` 循环的叙述,正确的是( )
A. `while` 循环先执行一次循环体,再判断条件
B. `while` 循环的条件表达式为 `True` 时,执行循环体
C. `while` 循环的条件表达式必须使用比较运算符
D. `while` 循环中必须使用 `break` 才能退出
2. 以下代码运行后,输出结果是( )
```python
i = 3
while i > 0:
print(i, end=' ')
i -= 1
```
A. 3 2 1
B. 3 2 1 0
C. 1 2 3
D. 无限循环输出 3
3. 下列代码段会导致死循环的是( )
A.
```python
a = 5
while a > 0:
print(a)
a -= 1
```
B.
```python
b = 10
while b != 0:
print(b)
```
C.
```python
c = 0
while c < 5:
print(c)
c += 1
```
D.
```python
d = 1
while d <= 5:
print(d)
d += 1
```
4. 阅读以下程序:
```python
n = 1
s = 0
while n <= 5:
if n % 2 == 0:
n += 1
continue
s += n
n += 1
print(s)
```
程序执行后,输出的结果是( )
A. 6
B. 9
C. 15
D. 10
5. 下面程序的功能是计算 1 到 100 中所有奇数的和,横线处应填写的代码是( )
```python
i = 1
sum_odd = 0
while ________:
sum_odd += i
i += 2
print(sum_odd)
```
A. `i <= 100`
B. `i < 100`
C. `i < 99`
D. `i <= 99`
6. 下列语句中,能够正确跳出当前 `while` 循环的是( )
A. `exit`
B. `continue`
C. `break`
D. `return`
7. 以下程序输出“*”的个数是( )
```python
i = 1
while i <= 3:
j = 1
while j <= i:
print('*', end='')
j += 1
print()
i += 1
```
A. 3
B. 5
C. 6
D. 9
8. 关于 `while True:` 语句,下列说法错误的是( )
A. 这是一个无限循环,通常需要在循环体内配合 `break` 退出
B. 循环条件恒为 `True`,因此循环体会一直执行
C. 这种写法在编程中应当绝对避免,因为一定会导致程序崩溃
D. 可以用 `Ctrl + C` 强制终止程序
任务题
任务一:限次猜数字游戏
情景描述:
小明编写了一个猜数字游戏,程序随机生成一个1~50之间的整数,用户有5次猜测机会。每次猜测后,程序提示“猜大了”、“猜小了”或“猜对了”。若猜对,立即胜利并结束游戏;若5次均未猜对,则公布正确答案。
任务要求 :
请补充代码,实现上述功能。要求使用 `while` 循环控制猜测次数,并在猜对或次数耗尽时退出循环。
代码框架:
```python
import random
secret = random.randint(1, 50)
chances = 5
# 请在此处补充 while 循环结构
任务二:统计水仙花数
情景描述 :
水仙花数是指一个三位数,其各位数字的立方和等于该数本身,例如153 = 1 + 5 + 3 。
老师要求编写程序,使用 `while` 循环找出所有的水仙花数,并输出它们的个数。
任务要求:
编写完整程序,遍历所有三位数(100~999),判断是否为水仙花数,最后输出所有水仙花数的列表及其总个数。必须使用 `while` 循环实现。
代码框架(可自行设计)
```python
# 请在此编写完整代码
任务三:ATM密码验证(带锁定机制)
情景描述:
模拟ATM取款机密码验证过程。用户有3次输入密码的机会。正确密码预设为 `"123456"`。
若输入正确,显示“验证成功,欢迎使用!”,并结束程序。
若输入错误,提示“密码错误,您还有X次机会”。
如果3次均错误,显示“账户已锁定,请与银行联系!”并结束程序。
任务要求:
请补充代码,实现上述逻辑。要求使用 `while` 循环和 `break`。
代码框架
```python
correct_pwd = "123456"
attempts = 3
# 请在此处补充 while 循环结构
```
任务四:斐波那契数列生成器
情景描述:
斐波那契数列的定义:第一项和第二项均为1,从第三项起,每一项等于前两项之和。即:1, 1, 2, 3, 5, 8, 13, ...
编写程序,让用户输入一个正整数 `n`,程序使用 `while` 循环输出斐波那契数列的前 `n` 项,每行输出一个数。
任务要求:
补充代码,实现该功能。注意处理边界情况(如 `n=1` 或 `n=2`)。
代码框架:
```python
n = int(input("请输入项数:"))
# 请在此处补充 while 循环,输出前 n 项
```
参考答案:
答案解析
选择题
1.B
2.A
3.B
4.B
5.A
6.C
7.C
8.C
任务题答案
任务一:限次猜数字游戏
参考答案
```python
import random
secret = random.randint(1, 50)
chances = 5
while chances > 0:
guess = int(input("请输入你猜的数字(1-50):"))
if guess == secret:
print("恭喜,猜对了!")
break
elif guess > secret:
print("猜大了")
else:
print("猜小了")
chances -= 1
if chances > 0:
print(f"还剩{chances}次机会")
else:
print(f"机会用完了,正确答案是{secret}。")
```
解析
循环条件为 `chances > 0`,每次猜错后 `chances -= 1`,直到为0时退出循环。
猜对时使用 `break` 立即结束循环,避免多余的提示。
注意在提示剩余次数时,应只在还有机会且未猜对时显示,否则在最后一次错误后会直接显示答案。
任务二:统计水仙花数
参考答案
```python
num = 100
count = 0
narcissus_list = []
while num <= 999:
# 获取百位、十位、个位
a = num // 100
b = (num // 10) % 10
c = num % 10
if a**3 + b**3 + c**3 == num:
narcissus_list.append(num)
count += 1
num += 1
print("水仙花数有:", narcissus_list)
print("共有", count, "个")
```
解析
循环变量 `num` 从100递增到999,每次判断是否满足水仙花数条件。
使用整数除法 `//` 和取余 `%` 分离各位数字。
符合条件时添加到列表并计数。
循环结束后输出结果。
结果:四位水仙花数只有 153, 370, 371, 407 四个。
任务三:ATM密码验证(带锁定机制)
参考答案
```python
correct_pwd = "123456"
attempts = 3
while attempts > 0:
pwd = input("请输入密码:")
if pwd == correct_pwd:
print("验证成功,欢迎使用!")
break
else:
attempts -= 1
if attempts > 0:
print(f"密码错误,您还有{attempts}次机会")
else:
print("账户已锁定,请与银行联系!")
解析
循环条件 `attempts > 0`,每次错误后 `attempts -= 1`。
正确时用 `break` 跳出循环,不执行剩余代码。
提示剩余次数时,注意最后一次错误后不应再显示“还有0次机会”,而是直接显示锁定信息。
通过 `if attempts > 0` 分支区分普通错误和最后一次错误。
任务四:斐波那契数列生成器
参考答案
```python
n = int(input("请输入项数:"))
a, b = 1, 1
count = 0
if n <= 0:
print("请输入正整数")
else:
while count < n:
print(a)
a, b = b, a + b # 更新数列
count += 1
解析
使用两个变量 `a` 和 `b` 分别表示当前项和下一项。
初始 `a = 1, b = 1`。
循环条件为 `count < n`,每输出一项,计数器加1,并更新 `a, b`。
更新语句 `a, b = b, a + b` 相当于:新 `a` 变成原来的 `b`,新 `b` 变成原来的 `a+b`。
边界处理:如果 `n=1`,只输出第一项1;如果 `n=2`,输出1和1;如果 `n<=0` 则提示。

展开更多......

收起↑

资源预览