从零到接单 03:条件判断与循环——让程序学会「做决定」
系列目录:本文是「从零到接单:Python 自动化与爬虫实战」系列的第 3 篇。上一篇我们学习了变量和基本运算,程序已经能"记住数据"和"做计算"。这篇我们让程序学会"做判断"和"重复干活"——这可是自动化脚本的灵魂。
前面的程序只能按顺序一行行执行,但真正有用的程序需要:
- 条件判断:遇到不同情况做不同的事("如果金额大于 1000,打 9 折")
- 循环:重复做同一件事("遍历 100 个文件,每个都改名")
这篇学完,你就可以写出有"智能"的程序了。
一、条件判断:if 语句
基本语法
if 条件:
条件成立时执行的代码(注意缩进!)
Python 用 缩进(通常是 4 个空格)来表示代码块,不是用大括号 {}。
# 最简单的 if
score = 85
if score >= 60:
print("及格了!")
print("恭喜你!") # 同一缩进级别都属于 if 代码块
print("程序结束") # 这一行不在 if 里,无论如何都会执行
输出:
及格了!
恭喜你!
程序结束
如果把 score 改成 50:
程序结束
只有最后一行输出,因为 score >= 60 不成立。
if-else:二选一
score = 55
if score >= 60:
print("及格")
else:
print("不及格")
print("加油复习!")
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 = "F"
print(f"你的成绩等级是:{grade}") # 你的成绩等级是:B
💡 注意:
elif是 "else if" 的缩写。程序从上到下检查条件,第一个成立的分支就执行,后面的都不看。所以顺序很重要!
嵌套 if
age = 20
has_ticket = True
if age >= 18:
if has_ticket:
print("请进,祝您观影愉快!")
else:
print("请先购票")
else:
print("未成年人需要家长陪同")
条件表达式(三元运算符)
# 一行搞定简单的 if-else
age = 20
status = "成年" if age >= 18 else "未成年"
print(status) # 成年
二、比较与逻辑运算符回顾
条件判断里最常用的运算符:
# 比较运算符
x == y # 等于(两个等号!)
x != y # 不等于
x > y # 大于
x < y # 小于
x >= y # 大于等于
x <= y # 小于等于
# 逻辑运算符
and # 且 —— 两边都为真才真
or # 或 —— 一边为真就真
not # 非 —— 取反
# 成员运算符
in # 在…里面
not in # 不在…里面
实例:
# 判断闰年
year = 2024
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print(f"{year} 是闰年") # 2024 是闰年
# in 运算符
fruits = ["苹果", "香蕉", "橘子"]
print("苹果" in fruits) # True
print("西瓜" not in fruits) # True
三、for 循环:遍历序列
for 循环用来逐个处理一组数据里的每个元素。
遍历列表
fruits = ["苹果", "香蕉", "橘子", "葡萄"]
for fruit in fruits:
print(f"我喜欢吃{fruit}")
输出:
我喜欢吃苹果
我喜欢吃香蕉
我喜欢吃橘子
我喜欢吃葡萄
range():生成数字序列
# range(n) → 0, 1, 2, ..., n-1
for i in range(5):
print(i, end=" ") # 0 1 2 3 4
# range(start, end) → start 到 end-1
for i in range(1, 6):
print(i, end=" ") # 1 2 3 4 5
# range(start, end, step) → 带步长
for i in range(0, 10, 2):
print(i, end=" ") # 0 2 4 6 8
遍历字符串
text = "Python"
for char in text:
print(char, end="-") # P-y-t-h-o-n-
enumerate():同时拿到索引和值
fruits = ["苹果", "香蕉", "橘子"]
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# 输出:
# 0: 苹果
# 1: 香蕉
# 2: 橘子
四、while 循环:条件为真就一直跑
# 打印 1 到 5
count = 1
while count <= 5:
print(count)
count += 1 # 等价于 count = count + 1
⚠️ 死循环警告
# ❌ 永远不要这样写(除非你明确想要死循环):
# while True:
# print("停不下来了!")
while 循环最容易犯的错:忘记更新条件变量,导致死循环。
实用场景:用户输入验证
password = ""
while password != "123456":
password = input("请输入密码:")
if password != "123456":
print("密码错误,请重试!")
print("登录成功!")
五、循环控制:break 和 continue
break:立即终止整个循环
# 找到第一个能被 7 整除的数就停
for i in range(1, 100):
if i % 7 == 0:
print(f"找到了:{i}") # 找到了:7
break # 立刻跳出循环
continue:跳过本轮,继续下一轮
# 打印奇数(跳过偶数)
for i in range(1, 11):
if i % 2 == 0:
continue # 跳过 print,进入下一次循环
print(i, end=" ") # 1 3 5 7 9
for-else / while-else:循环正常结束才执行
# 查找元素,没找到时给出提示
names = ["张三", "李四", "王五"]
target = "赵六"
for name in names:
if name == target:
print(f"找到了 {target}")
break
else:
# 注意:else 属于 for,不是 if!
# 当循环没有被 break 中断时才执行
print(f"没有找到 {target}")
六、实战练习
练习 1:猜数字游戏
import random
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},你猜了 {guess_count} 次")
break
练习 2:打印九九乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print() # 换行
练习 3:FizzBuzz
# 打印 1-100,3 的倍数输出 Fizz,5 的倍数输出 Buzz,同时是 3 和 5 的倍数输出 FizzBuzz
for i in range(1, 101):
if i % 3 == 0 and i % 5 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
总结
| 概念 | 用途 | 关键字 |
|------|------|--------|
| 条件判断 | 根据不同情况执行不同代码 | if elif else |
| for 循环 | 遍历序列中的每个元素 | for ... in |
| while 循环 | 条件为真时重复执行 | while |
| 跳出循环 | 立即终止循环 | break |
| 跳过本轮 | 跳过剩余代码,开始下一轮 | continue |
| range() | 生成数字序列 | range(start, end, step) |
有了条件和循环,你的程序已经有了"判断力"和"劳动力"。下一篇,我们将学习 Python 中更强大的数据容器:列表、元组、字典和集合——处理和存储数据的能力将再上一个台阶。
练习:写一个程序,让用户不断输入数字,输入 0 时结束。结束后输出所有数字的总和、平均值和最大值。
Comments
Sign in to leave a comment.