第4章:分支和循环——让程序学会“思考”和“重复”
各位同学,欢迎来到第4章。从这一章开始,Python 程序将不再是“一条道走到黑”的线性执行。它会学会判断,学会重复。说白了,就是程序开始有了“智能”的雏形。
我个人习惯把这一章看作编程的“分水岭”。前面学的变量、数据类型,那是基本功。而分支和循环,才是真正让代码“活”起来的灵魂。你想想看,一个只会从上往下执行的程序,跟一个能根据不同情况做出不同反应的程序,哪个更像“人工智能”?
4.1 if 判断语句:程序的第一双“眼睛”
if 语句,就是让程序“看”条件。它的语法非常简单:
if 条件:
执行代码
注意那个冒号,还有缩进。Python 用缩进来表示代码块,这是它的特色,也是很多新手踩坑的地方。
我在项目中遇到过这样一个场景:用户输入年龄,程序判断是否成年。代码写出来是这样的:
age = int(input("请输入你的年龄:"))
if age >= 18:
print("你已经成年了,可以考驾照。")
嗯,这里要注意:input() 返回的是字符串,必须用 int() 转成整数才能比较。我曾经见过一个新手,忘了转换类型,结果 "18" >= 18 永远返回 False,因为字符串和整数比较时,Python 会直接返回 False。
4.2 运算符:判断的“工具”
判断离不开运算符。常用的有这几类:
| 类型 | 运算符 | 说明 |
|---|---|---|
| 比较运算符 | ==, !=, >, <, >=, <= | 比较两个值 |
| 逻辑运算符 | and, or, not | 组合多个条件 |
| 成员运算符 | in, not in | 检查是否在序列中 |
这里我特别想说说逻辑运算符。很多初学者会写成 if 18 <= age <= 60,这在 Python 里是合法的,叫“链式比较”。但在其他语言里,你得写成 if age >= 18 and age <= 60。我个人习惯用链式比较,代码更简洁,可读性也更好。
4.3 if-else 语句:二选一
生活不只有“是”,还有“否”。if-else 就是处理这种二选一的情况。
age = int(input("请输入你的年龄:"))
if age >= 18:
print("欢迎进入网吧。")
else:
print("未成年人禁止入内。")
为什么会有这种结构?因为程序需要处理所有可能的情况。你想想看,如果只写 if,那当条件不满足时,程序就什么都不做,直接跳过。但很多时候,我们需要在条件不满足时也做点事情。
我曾经在做一个用户权限系统时,就用了多层 if-else。不过后来发现嵌套太深,代码像“箭头”一样往右偏,可读性很差。后来我改用“提前返回”的方式,代码清爽多了。
4.4 while 循环:重复到条件不满足为止
while 循环,说白了就是“只要条件成立,就一直做”。它的语法:
while 条件:
执行代码
这里有个大坑:死循环。如果条件永远为 True,程序就会一直跑下去,直到你强制终止它。
我记得刚学编程时,写过一个 while True 的循环,忘了加 break,结果程序卡死了,电脑风扇呼呼转。嗯,从那以后,我每次写 while 循环都会先确认:这个循环能结束吗?
一个经典的例子:猜数字游戏。
import random
target = random.randint(1, 100)
guess = -1
while guess != target:
guess = int(input("猜一个1到100之间的数字:"))
if guess < target:
print("小了,再大点。")
elif guess > target:
print("大了,再小点。")
print("恭喜你,猜对了!")
这个例子展示了 while 循环的典型用法:我们不知道要循环多少次,只知道什么时候结束。
4.5 for 循环:遍历一切
for 循环,是用来遍历序列的。字符串、列表、元组、字典……只要是可迭代对象,都能用 for 循环。
fruits = ["苹果", "香蕉", "橘子"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
我个人觉得,for 循环比 while 循环更常用。因为在实际开发中,我们更多时候是在处理一组数据,而不是等待某个条件成立。
配合 range() 函数,for 循环可以模拟传统的计数循环:
for i in range(5): # 0, 1, 2, 3, 4
print(f"第{i+1}次循环")
range(5) 生成 0 到 4 的整数序列。如果你想要 1 到 5,可以写 range(1, 6)。如果你想要步长,可以写 range(1, 10, 2),得到 1, 3, 5, 7, 9。
4.6 break 和 continue:循环的“刹车”和“跳过”
break 是终止整个循环,continue 是跳过当前这次循环,继续下一次。
举个例子:
for i in range(10):
if i == 5:
break # 当 i 等于 5 时,整个循环结束
print(i)
# 输出:0 1 2 3 4
for i in range(10):
if i % 2 == 0:
continue # 偶数跳过,不打印
print(i)
# 输出:1 3 5 7 9
我在项目中遇到过这样一个需求:从数据库里读取用户列表,遇到第一个 VIP 用户就停止读取。这时候用 break 就非常合适。
还有一个场景:处理一批数据,遇到无效数据就跳过,继续处理下一个。这时候用 continue。
4.7 综合案例:用户登录系统
把今天学的知识串起来,写一个简单的用户登录系统:
# 预设的用户名和密码
username = "admin"
password = "123456"
# 最多尝试3次
max_attempts = 3
attempt = 0
while attempt < max_attempts:
input_username = input("请输入用户名:")
input_password = input("请输入密码:")
if input_username == username and input_password == password:
print("登录成功!欢迎回来。")
break
else:
attempt += 1
remaining = max_attempts - attempt
if remaining > 0:
print(f"用户名或密码错误,还剩{remaining}次机会。")
else:
print("尝试次数过多,账户已锁定。")
这个例子用到了:if-else 判断、while 循环、break 跳出、逻辑运算符 and。你看,一个完整的程序,就是这些基础知识的组合。
好了,第4章的内容就到这里。分支和循环是编程的“骨架”,掌握了它们,你就能写出真正有用的程序了。下一章,我们会学习函数——把代码“打包”成可复用的模块。
公众号:蓝海资料掘金营,微信deep3321