第 4 章 · 循环结构 — 课堂例题
共 8 道例题,代码直接取自讲稿,代码高亮,一键复制
例题 1
while 循环基础:重复输出与计数
演示 while 循环的基本使用:重复输出、简单计数器,以及 continue 关键字的用法。
Python
# 重复输出10次
i = 0
while i < 10:
print("我爱Python")
i = i + 1
# 输出1到5,跳过3(使用 continue)
i = 0
while i < 5:
i += 1
if i == 3:
continue # 跳过3
print(i) # 输出 1 2 4 5
例题 2
for-in 与 range():求累加和
使用 for-in 和 range() 计算 1+2+3+…+100 的和,演示三种 range 参数用法。
Python
total = 0
for i in range(1, 101):
total += i
print(total) # 5050
# 用内置 sum 函数,更简洁
print(sum(range(1, 101))) # 5050
# 1到100的偶数之和(步长为2)
print(sum(range(2, 101, 2))) # 2550
例题 3
九九乘法表(嵌套循环)
经典的嵌套循环案例:外层控制行数,内层控制每行列数,用 end='\t' 保持对齐。
Python
# 第一种形式:完整矩形
for i in range(1, 10):
for j in range(1, 10):
print(f"{i}*{j}={i*j:2d}", end=" ")
print()
# 第二种形式:下三角(标准九九表)
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{i}×{j}={i * j}', end='\t')
print()
例题 4
判断素数
素数只能被1和自身整除。关键优化:循环只需检查到 √n,发现因子立即 break。
Python
num = int(input('请输入一个正整数: '))
end = int(num ** 0.5) # 只需检查到根号n
is_prime = True
for i in range(2, end + 1):
if num % i == 0:
is_prime = False
break
if is_prime:
print(f'{num}是素数')
else:
print(f'{num}不是素数')
例题 5
最大公约数(欧几里得算法)
欧几里得算法(辗转相除法)远比逐一遍历高效。对比两种方法,体会算法优化的价值。
Python
x = int(input('x = '))
y = int(input('y = '))
# 欧几里得算法:每次用余数替换较大的数
while y % x != 0:
x, y = y % x, x
print(f'最大公约数: {x}')
例题 6
百钱百鸡(枚举法)
中国古代数学名题:百钱买百鸡。演示穷举法(暴力枚举)和优化枚举两种思路。
Python
"""
一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱。
用一百钱买一百只鸡,各几只?
"""
# 优化方法:小鸡数量由公鸡和母鸡数量推算
for i in range(0, 21): # 公鸡数量
for j in range(0, 34): # 母鸡数量
k = 100 - j - i # 小鸡数量
if 5 * i + 3 * j + k / 3 == 100:
print(f"公鸡:{i} 母鸡:{j} 小鸡:{k}")
例题 7
猜数字游戏(while True)
使用 while True + break 模式,猜对才退出循环,统计猜测次数。
Python
import random
answer = random.randint(1, 100)
counter = 0
while True:
counter += 1
guess = int(input('猜一猜(1-100): '))
if guess < answer:
print('猜小了')
elif guess > answer:
print('猜大了')
else:
print(f'恭喜你,猜对了!共猜了{counter}次')
break
例题 8
水仙花数(三位数)
水仙花数:各位数字的立方和等于该数本身,如 153 = 1³+5³+3³。遍历所有三位数找出全部水仙花数。
Python
for num in range(100, 1000):
bai = num // 100
shi = num // 10 % 10
ge = num % 10
if bai ** 3 + shi ** 3 + ge ** 3 == num:
print(num)
# 输出:153 370 371 407