重复的事交给循环
要打印 1 到 100,你不会写 100 行 print。循环就是"把同一段话说很多遍"的机制。
for i in range(5):
print(i)
输出 0、1、2、3、4。
range 的三种用法
range(5) # 0 1 2 3 4 —— 从 0 开始,到 5 之前停
range(1, 6) # 1 2 3 4 5 —— 从 1 开始,到 6 之前停
range(0, 10, 2) # 0 2 4 6 8 —— 第三个参数是步长
永远取不到右边那个数,这叫"左闭右开"。刚开始一定会因此差一个数(业界叫 off-by-one 错误),写完循环先想一想第一次和最后一次分别是几,能省很多调试时间。
遍历一串东西
for 的本质不是"数数",而是"把一堆东西挨个拿出来":
for fruit in ["苹果", "香蕉", "橘子"]:
print(f"我吃了{fruit}")
for ch in "abc":
print(ch)
i、fruit、ch 都只是你给"当前这一个"起的名字,随便叫什么都行,但起个有意义的名字。
while:不知道要循环几次的时候
for 适合"循环固定次数",while 适合"满足某个条件就一直转":
password = ""
while password != "123456":
password = input("请输入密码:")
print("登录成功")
while 最大的风险是死循环——如果循环体里没有任何东西能让条件变成 False,程序就永远卡住。写 while 时养成习惯:先问自己"什么会让它停下来?",答不上来就先别写。
count = 0
while count < 5:
print(count)
count += 1 # 少了这一行,程序永远打印 0
break 和 continue
for i in range(10):
if i == 5:
break # 立刻跳出整个循环
print(i) # 打印 0 1 2 3 4
for i in range(5):
if i % 2 == 0:
continue # 跳过本轮剩下的部分,直接进下一轮
print(i) # 打印 1 3
break 是"不玩了",continue 是"这局跳过"。
累加:循环里最常见的套路
total = 0
for i in range(1, 101):
total += i
print(total) # 5050
这个套路叫累加器:循环外面准备一个抽屉,循环里面不断往里加。求和、计数、找最大值都是这个模式。把它记熟。
10 秒自测
for i in range(1, 4):
print(i * 2)
输出什么?答案是三行:2、4、6。range(1, 4) 给出 1、2、3,取不到 4。