第四章:分支和循环——让代码学会“思考”和“重复”
各位同学,欢迎来到第四章。从这一章开始,我们的代码终于要有点“智能”的样子了。
前面几章我们学了变量、数据类型、基本操作。说白了,那都是“死”的代码——从上往下执行一遍就结束了。但现实中的程序哪有这么简单?你得让代码学会做判断:如果用户输入了密码,就放行;否则就拒绝。你还得让代码学会重复:比如批量处理1000个文件,总不能写1000行代码吧?
嗯,这就是分支和循环要干的事。我个人觉得,这是编程入门的第一道分水岭。跨过去,你就能写出真正有用的程序了。
4.1 条件判断:if 语句
先说说 if。它的作用很简单:如果条件成立,就执行某段代码。
语法长这样:
if 条件:
执行语句
注意那个冒号,还有缩进。Python 用缩进来表示代码块,这是它的特色。我刚开始学的时候,老忘记写冒号,结果报错报得我怀疑人生。后来养成了习惯:写完 if 条件,立马敲个冒号加回车,缩进自动就出来了。
来个实际例子:
age = 18
if age >= 18:
print("你已经成年了,可以上网了")
print("但要注意节制哦")
运行结果:
你已经成年了,可以上网了
但要注意节制哦
你看,条件成立,两行都执行了。如果 age 改成 16,那就啥也不输出。
4.2 运算符:比较和逻辑
if 后面的条件,靠的就是运算符。常用的比较运算符有这些:
| 运算符 | 含义 | 示例 |
|---|---|---|
| == | 等于 | a == b |
| != | 不等于 | a != b |
| > | 大于 | a > b |
| < | 小于 | a < b |
| >= | 大于等于 | a >= b |
| <= | 小于等于 | a <= b |
注意:判断相等是两个等号 ==,一个等号 = 是赋值。这个坑我见过太多新手踩了。你想想看,if a = 5 这种写法,在其他语言里可能直接报错,但在Python里...嗯,其实也会报错,但新手往往看不懂错误信息。
逻辑运算符也很常用:
| 运算符 | 含义 | 示例 |
|---|---|---|
| and | 与(两边都成立) | a > 0 and a < 10 |
| or | 或(至少一边成立) | a == 0 or b == 0 |
| not | 非(取反) | not a > 5 |
举个例子:
score = 85
if score >= 60 and score < 80:
print("成绩合格")
elif score >= 80:
print("成绩优秀")
else:
print("不及格,需要补考")
这里用到了 elif 和 else,咱们接着往下看。
4.3 if-else 和 if-elif-else
单分支的 if 太简单了。现实中往往是:如果A就做X,否则做Y。这就是 if-else。
password = "123456"
if password == "123456":
print("登录成功")
else:
print("密码错误")
如果条件不止两个呢?比如成绩评级:90以上是A,80以上是B,70以上是C,60以上是D,不及格是E。这时候就用 if-elif-else:
score = 85
if score >= 90:
grade = "A"
elif score >= 80:
grade = "B"
elif score >= 70:
grade = "C"
elif score >= 60:
grade = "D"
else:
grade = "E"
print(f"你的等级是:{grade}")
我遇到过这样一个bug:有个同事把 score >= 60 写在了 score >= 80 前面,结果所有60分以上的都进了D等级,80分以上的永远没机会。嗯,这就是顺序的重要性。
4.4 while 循环:不知道要循环多少次
if 是让代码学会判断,while 是让代码学会重复。它的逻辑是:只要条件成立,就一直执行。
count = 0
while count < 5:
print(f"第{count+1}次循环")
count += 1
运行结果:
第1次循环
第2次循环
第3次循环
第4次循环
第5次循环
注意那个 count += 1,它相当于 count = count + 1。如果不写这一行,count 永远等于0,条件永远成立,就成了死循环。死循环会让程序卡死,CPU 占用率飙升。我刚开始学的时候,有一次写了个死循环没注意,笔记本风扇呼呼转了半天我才发现。
4.5 for 循环:知道要循环多少次
for 循环和 while 不同。它通常是遍历一个序列,比如列表、字符串、range 等。说白了,就是“对里面的每个元素,都做一遍同样的事”。
# 遍历列表
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
# 遍历字符串
for char in "Python":
print(char)
# 使用 range
for i in range(5):
print(f"第{i}次循环")
range 函数特别常用。range(5) 生成 0,1,2,3,4 这5个数。range(1,6) 生成 1到5。range(1,10,2) 生成 1,3,5,7,9,步长为2。
我个人习惯:如果知道要循环多少次,就用 for;如果不知道,就用 while。比如读取文件直到文件末尾,你不知道有多少行,就用 while。比如处理一个已知长度的列表,就用 for。
4.6 break 和 continue:控制循环的“刹车”和“跳过”
有时候,我们需要在循环中间提前退出,或者跳过某一次循环。这时候就用 break 和 continue。
break:立即结束整个循环
for i in range(10):
if i == 5:
print("遇到5了,退出循环")
break
print(i)
# 输出:0 1 2 3 4 遇到5了,退出循环
continue:跳过本次循环,进入下一次
for i in range(5):
if i == 2:
print("跳过2")
continue
print(i)
# 输出:0 1 跳过2 3 4
这两个关键字在 while 里同样适用。我曾经在写一个爬虫程序时,遇到某个页面返回404,就用 continue 跳过它,继续抓取下一个。如果遇到连续10个404,就用 break 退出,说明网站可能挂了。
4.7 综合案例:猜数字游戏
来,咱们把今天学的知识串起来,写个小游戏:
import random
# 生成1到100之间的随机数
target = random.randint(1, 100)
guess_count = 0
print("猜数字游戏开始!范围是1到100")
while True:
guess = int(input("请输入你猜的数字:"))
guess_count += 1
if guess < target:
print("猜小了,再大一点")
elif guess > target:
print("猜大了,再小一点")
else:
print(f"恭喜你猜对了!答案是{target}")
print(f"你一共猜了{guess_count}次")
break
if guess_count >= 7:
print(f"你已经猜了{guess_count}次了,答案是{target}")
print("下次加油哦!")
break
这个例子用到了:
- while 循环:不知道要猜多少次,所以用 while True
- if-elif-else:判断猜大、猜小、猜对
- break:猜对了就退出,或者超过7次也退出
- input 和 random:从用户获取输入,生成随机数
你可以自己跑一下试试。我个人觉得,这种小游戏是练习分支和循环最好的方式。当年我学编程的时候,就是靠写各种小游戏把基础打牢的。
4.8 本章小结
来,捋一捋今天学了啥:
- if 判断:让代码根据条件执行不同的分支
- 比较和逻辑运算符:构建判断条件的基础工具
- if-else 和 if-elif-else:处理多分支情况
- while 循环:条件成立就一直执行,适合未知次数的循环
- for 循环:遍历序列,适合已知次数的循环
- break 和 continue:控制循环的执行流程
这些是编程最基础的控制结构。说白了,任何复杂的程序,底层都是由这些分支和循环组合而成的。你想想看,一个操作系统、一个数据库、一个Web服务器,里面无非就是无数个 if 判断和 while 循环在运转。
下一章我们会学习函数——把重复的代码封装起来,让程序更整洁、更可复用。到时候你会发现,有了函数,写代码就像搭积木一样爽。
好了,今天的课就到这里。记得多写代码,光看是学不会的。有什么问题,咱们下节课见。