系列导读:这是Python零基础入门系列的第二篇。本篇将掌握程序逻辑核心——条件判断与循环控制。下期预告:《Python核心数据结构(上):字符串与序列类型》
前置知识:
一、为什么控制结构如此重要?🔥
控制结构是程序的"大脑",决定代码执行路径:
- 🧠 条件语句:让程序像人类一样做决策("如果下雨就带伞")
- 🔄 循环语句:自动化重复任务("每天打卡8次")
- ⚡ 效率倍增:10行循环代码 = 1000行重复代码
- 🎮 游戏开发基础:90%的游戏逻辑依赖控制结构
💡 新手警报:Python使用缩进(空格/Tab)代替大括号定义代码块,这是新手最常犯错的地方!建议统一使用4个空格缩进(VS Code默认设置)
二、条件语句:if/elif/else 三剑客
基础语法结构
if 条件1:
# 条件1为True时执行
elif 条件2: # 可选,可多个elif
# 条件2为True时执行
else: # 可选
# 所有条件都不满足时执行
实战场景1:用户登录验证
username = input("请输入用户名: ")
password = input("请输入密码: ")
if username == "admin" and password == "123456":
print("✅ 登录成功!欢迎回来,管理员")
elif username == "guest":
print("✅ 欢迎访客,您有只读权限")
else:
print("❌ 用户名或密码错误!请重试")
实战场景2:成绩评级系统
score = float(input("请输入考试成绩(0-100): "))
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}")
# 注意:f-string格式化(Python3.6+特性)
三元表达式(单行条件)
# 传统写法
if age >= 18:
status = "成年人"
else:
status = "未成年人"
# 三元表达式(更Pythonic)
status = "成年人" if age >= 18 else "未成年人"
# 实战:根据天气决定出行
weather = "rainy"
decision = "带伞出门" if weather == "rainy" else "轻装出行"
print(decision) # 输出:带伞出门
三、循环语句:让代码动起来
for循环:遍历序列的王者
# 遍历列表
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
print(f"正在吃{fruit}...")
# 遍历字符串
for char in "Python":
print(char, end=" ") # 输出:P y t h o n
# 使用range()生成数字序列
for i in range(5): # 0,1,2,3,4
print(f"倒计时: {i}")
for i in range(2, 6): # 2,3,4,5
print(f"第{i}章")
for i in range(10, 0, -2): # 10,8,6,4,2 (步长-2)
print(f"降温{i}度")
while循环:条件驱动的循环
# 经典案例:猜数字游戏
import random
secret_number = random.randint(1, 100) # 生成1-100随机数
guess = None
attempts = 0
print("🎮 猜数字游戏开始!(1-100)")
while guess != secret_number:
guess = int(input("猜一个数字: "))
attempts += 1
if guess < secret_number:
print("↑ 太小了!")
elif guess > secret_number:
print("↓ 太大了!")
print(f"🎉 恭喜!你用了{attempts}次猜中了数字{secret_number}!")
# 防死循环技巧:设置最大尝试次数
max_attempts = 10
while attempts < max_attempts and guess != secret_number:
# ...循环体
四、循环控制:break/continue/pass
| 语句 | 作用 | 使用场景 |
|---|---|---|
| break | 立即终止整个循环 | 找到目标后提前退出 |
| continue | 跳过本次循环剩余部分 | 过滤特定数据 |
| pass | 空操作(占位符) | 预留代码框架 |
break实战:质数检测
num = int(input("检查是否为质数: "))
is_prime = True
for i in range(2, num):
if num % i == 0:
is_prime = False
break # 一旦发现因数,立即终止循环
print(f"{num}是质数" if is_prime else f"{num}不是质数")
continue实战:过滤无效数据
scores = [85, 92, -1, 78, 105, 90] # -1和105是无效分数
valid_scores = []
for score in scores:
if score < 0 or score > 100:
continue # 跳过无效分数
valid_scores.append(score)
print(f"有效成绩: {valid_scores}") # [85, 92, 78, 90]
pass实战:预留代码框架
# 开发中暂时无法实现的函数
def analyze_data():
pass # 避免语法错误,后续再实现
# 未完成的条件分支
if user_role == "admin":
# TODO: 实现管理员功能
pass
elif user_role == "user":
print("普通用户功能")
五、高级技巧:循环与条件的组合应用
九九乘法表(经典面试题)
# 一行代码实现?不!我们分步讲解
for i in range(1, 10): # 控制行
for j in range(1, i+1): # 控制列
print(f"{j}×{i}={i*j}", end="\t")
print() # 换行
# 输出效果:
# 1×1=1
# 1×2=2 2×2=4
# 1×3=3 2×3=6 3×3=9
# ...(完整9行)
密码强度检测器
password = input("设置密码: ")
has_upper = False
has_lower = False
has_digit = False
# 检查每个字符
for char in password:
if char.isupper():
has_upper = True
elif char.islower():
has_lower = True
elif char.isdigit():
has_digit = True
# 评估强度
if len(password) >= 8 and has_upper and has_lower and has_digit:
strength = "⭐⭐⭐ 强密码"
elif len(password) >= 6:
strength = "⭐⭐ 中等密码"
else:
strength = "⚠️ 弱密码"
print(f"密码强度: {strength}")
六、常见陷阱与避坑指南
陷阱1:浮点数比较误差
# 错误写法:直接比较浮点数
balance = 0.1 + 0.2
if balance == 0.3: # 永远为False!
print("相等")
# 正确写法:使用容差比较
epsilon = 1e-9 # 极小值
if abs(balance - 0.3) < epsilon:
print("近似相等") # ✅ 会执行
陷阱2:修改遍历中的列表
# 危险操作:在for循环中删除元素
numbers = [1, 2, 3, 4, 5]
for num in numbers:
if num % 2 == 0:
numbers.remove(num) # 导致跳过元素!
print(numbers) # 错误结果: [1, 3, 5] ❌ (预期[1,3,5]但过程危险)
# 安全方案1:遍历副本
for num in numbers.copy(): # 使用副本
if num % 2 == 0:
numbers.remove(num)
# 安全方案2:列表推导式
numbers = [num for num in numbers if num % 2 != 0]
陷阱3:无限循环
# 典型错误:忘记更新循环变量
count = 0
while count < 5:
print(count)
# 忘记 count += 1 → 无限循环!
# 防御措施:设置超时
import time
start_time = time.time()
while time.time() - start_time < 30: # 最大运行30秒
# 业务逻辑
七、动手练习(巩固核心技能)
练习1:斐波那契数列
# 要求:生成前20个斐波那契数
# 数列规则:0,1,1,2,3,5,8... (每个数是前两数之和)
# 示例输出:0 1 1 2 3 5 8 13 ...
练习2:石头剪刀布
# 要求:
# 1. 用户输入"石头/剪刀/布"
# 2. 电脑随机出拳
# 3. 判断胜负(石头>剪刀,剪刀>布,布>石头)
# 4. 显示结果
# 提示:使用random.choice(["石头","剪刀","布"])
练习3:素数筛选
# 要求:找出100以内的所有素数
# 素数定义:只能被1和自身整除的数(>1)
# 示例输出:[2,3,5,7,11,13...]
💡 练习答案(完成后再查看):
# 练习1 a, b = 0, 1 for _ in range(20): print(a, end=" ") a, b = b, a + b # 练习2 import random choices = ["石头", "剪刀", "布"] user = input("出拳(石头/剪刀/布): ") computer = random.choice(choices) print(f"电脑出: {computer}") if user == computer: print("平局!") elif (user == "石头" and computer == "剪刀") or \ (user == "剪刀" and computer == "布") or \ (user == "布" and computer == "石头"): print("🎉 你赢了!") else: print("😭 你输了...") # 练习3 primes = [] for num in range(2, 101): is_prime = True for i in range(2, int(num**0.5)+1): if num % i == 0: is_prime = False break if is_prime: primes.append(num) print(primes)
八、高频面试题解析
Q:for循环和while循环如何选择?
✅ 黄金法则:
- 遍历已知序列(列表/字符串等)→ for循环
- 条件不确定的循环(如用户输入)→ while循环
# 读取文件直到EOF → while
while not file.eof():
line = file.readline()
# 遍历购物车商品 → for
for product in shopping_cart:
calculate_price(product)
Q:如何优雅地退出多层循环?
✅ 最佳实践:使用函数+return
def find_target(matrix, target):
for row in matrix:
for num in row:
if num == target:
print(f"找到{target}!")
return True # 直接退出所有循环
return False
# 调用
result = find_target([[1,2],[3,4]], 3)
九、下期预告 & 学习资源
👉 下期重点:
《Python核心数据结构(上):字符串与序列类型》将深入讲解:
- 字符串15种高效操作技巧
- 列表推导式(Python最优雅的语法之一)
- 元组 vs 列表:如何选择?
- 实战案例:文本分析器/数据清洗工具
📚 推荐资源:
- Python官方循环文档
- Visualize Code Execution(动态查看代码执行过程)
- 书籍:《Python Crash Course》
✨ 每日挑战:
用循环打印等腰三角形(高度5行):* *** ***** ******* *********在评论区晒出你的代码!
作者:离光
系列传送门:Python零基础入门专栏