循环结构
概述
当某段代码需要重复执行时,使用循环结构。Python 中有两种构造循环的方式:for-in 和 while。
for-in 循环
适用于已知循环次数的场景:
for i in range(3600):
print('hello, world')
time.sleep(1)
range() 用法
| 表达式 | 说明 |
|---|---|
range(101) |
0 到 100(不包含 101) |
range(1, 101) |
1 到 100 |
range(1, 101, 2) |
1 到 100 的奇数,步长为 2 |
range(100, 0, -2) |
100 到 1 的偶数,倒序 |
累加求和
# 1到100整数求和
total = 0
for i in range(1, 101):
total += i
print(total) # 5050
# 1到100偶数求和(用步长)
print(sum(range(2, 101, 2))) # 2550
惯例:循环变量如果不需要使用,命名为
_:
for _ in range(3600):
print('hello, world')
while 循环
适用于循环次数不确定的场景:
total = 0
i = 1
while i <= 100:
total += i
i += 1
print(total) # 5050
break 和 continue
break:跳出整个循环continue:跳过本次循环,进入下一轮
# 找出第一个能整除x和y的数(即最大公约数)
for i in range(x, 0, -1):
if x % i == 0 and y % i == 0:
print(f'最大公约数: {i}')
break
# 1到100偶数求和(用continue)
total = 0
for i in range(1, 101):
if i % 2 != 0:
continue
total += i
嵌套循环
循环内部可以再放循环,用于二维问题:
# 打印九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f'{i}×{j}={i*j}', end='\t')
print()
应用实例
实例1:判断素数
num = int(input('请输入正整数: '))
is_prime = True
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
is_prime = False
break
print(f'{num}是素数' if is_prime else f'{num}不是素数')
提示:只需检查到 √n 即可,因子总是成对出现。
实例2:最大公约数(欧几里得算法)
x = int(input('x = '))
y = int(input('y = '))
while y % x != 0:
x, y = y % x, x
print(f'最大公约数: {x}')
实例3:猜数字游戏
import random
answer = random.randrange(1, 101)
counter = 0
while True:
counter += 1
num = int(input('请输入: '))
if num < answer: print('大一点')
elif num > answer: print('小一点')
else:
print('猜对了!')
break
print(f'你一共猜了{counter}次')
总结
- 循环次数确定用
for-in,不确定用while break终止循环,continue跳过本次循环- 嵌套循环注意缩进和执行顺序
- 算法:穷举法(逐一尝试)、欧几里得算法(辗转相除)