如果循环次数比较明确,for 循环通常比 while 更清晰。它把“依次取出一组值”这件事写在一行里。
range()
range() 函数可以生成整数序列,常和 for 一起使用。
for i in range(5):
print(i, end=' ')
print()
for i in range(10, 15):
print(i, end=' ')
print()
for i in range(1, 10, 2):
print(i, end=' ')运行结果:
0 1 2 3 4
10 11 12 13 14
1 3 5 7 9range(start, stop, step) 会从 start 开始,按 step 增加,但不包含 stop。也就是说,stop 更像是“到这里就停”的边界,而不是最后一个会被输出的值。
知识测验
题目
range(5) 会生成哪些整数?
固定次数的累加
计算 1 到 100 的整数和,可以使用 range(1, 101)。因为 range 不包含结束值,所以这里要写到 101。
total = 0
for i in range(1, 101):
total += i
print("1 到 100 的总和:%d" % total)运行结果:
1 到 100 的总和:5050这种写法比 while 更容易看出循环变量 i 的取值范围。
互动实验
逐行跟踪求和循环
访问权限免费
逐语句运行代码,观察 i 如何流入 total。
PYTHON● DEBUG
01total = 002for i in range(1, 101):03 total += i04print(total)
i—
total0
进度0/100
CONSOLE
>>>
知识测验
题目
要让 i 依次取 1 到 100,应该使用哪个 range?
斐波那契数列
斐波那契数列(Fibonacci sequence)的前两项是 1, 1,从第三项开始,每一项都等于前两项之和。
n = int(input("请输入项数:"))
if n <= 0:
print("请输入正整数。")
elif n == 1:
print(1)
else:
first = 1
second = 1
print(first, second, end=' ')
for i in range(3, n + 1):
current = first + second
print(current, end=' ')
first = second
second = current
print()一次可能的运行结果:
请输入项数:10
1 1 2 3 5 8 13 21 34 55循环中最重要的更新是这两行:
first = second
second = current它们会把窗口向后移动一格,让下一轮继续使用“前两项”。
互动实验
滑动斐波那契窗口
访问权限免费
每次点击只执行下一条赋值语句;注意两次赋值的先后顺序。
PYTHON● DEBUG
01first = 1; second = 102for i in range(3, 11):03 current = first + second04 first = second05 second = current
first1
second1
current—
i—
first1second1
知识测验
题目
斐波那契循环中,first = second; second = current 的作用是什么?
动手练习
列出区间内的闰年
输入一个起始年份和结束年份,使用 for 和 range 找出所有闰年。
- 读取 start_year 和 end_year。
- 遍历区间内的每一年并判断是否为闰年。
- 把所有闰年输出到同一行。