← 返回 Python 7天入门专题

Day 2 · 控制流

条件判断 · for循环 · while循环 · break/continue | 建议时长:3-4小时
第一性原理:昨天的代码都是"直线"——从上到下逐行执行。但现实逻辑需要拐弯(条件判断:满足条件走A路,不满足走B路)和绕圈(循环:重复做某件事N次)。控制流就是让程序拥有"判断力"和"重复力"。

1. 条件判断:让程序学会做决策

1.1 if 基本结构

# 最简单的判断
age = 20

if age >= 18:
    print("你成年了")      # 条件为True时执行

print("程序结束")          # 不管条件如何都执行
⚠️ Python用缩进(4个空格)表示代码块。不需要大括号{}。缩进错了会直接报错或逻辑错误。这是Python最重要的语法规则。

1.2 if-else 结构

# 二选一
score = 65

if score >= 60:
    print("及格")
else:
    print("不及格")
# 输出: 及格

1.3 if-elif-else 结构

# 多选一(从上到下依次判断,命中一个就停)
score = 85

if score >= 90:
    grade = "A"
elif score >= 80:
    grade = "B"      # 85命中这里,后面的不再判断
elif score >= 70:
    grade = "C"
elif score >= 60:
    grade = "D"
else:
    grade = "F"

print(f"成绩等级: {grade}")  # B

1.4 条件嵌套

age = 25
has_ticket = True

if age >= 18:
    if has_ticket:
        print("欢迎入场")
    else:
        print("请先买票")
else:
    print("未成年人不能进入")

1.5 条件表达式(三元运算符)

# 一行写简单的if-else
age = 20
status = "成年" if age >= 18 else "未成年"
print(status)  # 成年

# 等价于:
if age >= 18:
    status = "成年"
else:
    status = "未成年"

1.6 多条件组合

age = 25
income = 8000

# and: 两个条件都满足
if age >= 18 and income >= 5000:
    print("符合条件")

# or: 满足一个即可
if age < 18 or age > 65:
    print("免票")

# not: 取反
if not age < 18:
    print("已成年")

# 简写:Python支持链式比较
if 18 <= age <= 60:
    print("适龄劳动力")

1.7 成员运算符 in

# 判断元素是否在序列中
print("a" in "apple")     # True
print(3 in [1, 2, 3])      # True
print("name" in {"name": "张三"})  # True

# not in: 不在
print("z" not in "apple")  # True

2. for循环:已知次数的重复

第一性原理:循环就是"对一组数据中的每个元素做同样的事"。for循环的本质是遍历——一个一个地处理序列中的元素。

2.1 基本for循环

# 遍历字符串
for char in "ABC":
    print(char)
# A
# B
# C

# 遍历列表
for fruit in ["苹果", "香蕉", "橘子"]:
    print(f"我喜欢吃{fruit}")
# 我喜欢吃苹果
# 我喜欢吃香蕉
# 我喜欢吃橘子

2.2 range() — 生成数字序列

# range(5) → 0,1,2,3,4
for i in range(5):
    print(i, end=" ")     # 0 1 2 3 4

# range(2, 6) → 2,3,4,5 (从2到5)
for i in range(2, 6):
    print(i, end=" ")     # 2 3 4 5

# range(1, 10, 2) → 1,3,5,7,9 (步长2)
for i in range(1, 10, 2):
    print(i, end=" ")     # 1 3 5 7 9

# 倒序
for i in range(5, 0, -1):
    print(i, end=" ")     # 5 4 3 2 1

2.3 enumerate() — 同时获取索引和值

fruits = ["苹果", "香蕉", "橘子"]

# 不好的写法(手动索引)
for i in range(len(fruits)):
    print(f"{i}: {fruits[i]}")

# 好的写法(用enumerate)
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")
# 0: 苹果
# 1: 香蕉
# 2: 橘子

2.4 嵌套循环

# 九九乘法表
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
# ...
嵌套循环性能提示:两层嵌套循环的执行次数 = 外层×内层。如果两层都遍历1000个元素,就是100万次。能用单层循环解决的尽量别用嵌套。

2.5 while循环:未知次数的重复

第一性原理:for循环是"有多少个元素就重复多少次",while循环是"只要条件为True就继续重复"。while适合不确定循环次数的场景。
# 基本while循环
count = 0
while count < 5:
    print(f"第{count}次")
    count += 1    # ⚠️ 必须有更新条件的语句,否则死循环!
# 输出5次后停止

# 实际场景:用户输入直到正确
password = ""
while password != "123456":
    password = input("请输入密码: ")
print("密码正确!")

# 实际场景:游戏循环
hp = 100
while hp > 0:
    damage = int(input("受到伤害: "))
    hp -= damage
    print(f"剩余HP: {hp}")
print("游戏结束")
⚠️ 死循环警告:如果while条件永远为True且没有break,程序会无限运行。如果写出了死循环,按 Ctrl+C 强制停止。

3. break 和 continue:控制循环流程

关键字作用比喻
break立即跳出整个循环紧急逃生门
continue跳过本次,进入下一次循环跳过这一站继续开
# break: 找到目标就停
for i in range(1, 100):
    if i % 7 == 0 and i % 5 == 0:
        print(f"找到: {i}")  # 35
        break    # 找到第一个就停,不再继续

# continue: 跳过偶数,只打印奇数
for i in range(10):
    if i % 2 == 0:
        continue   # 跳过偶数,不执行下面的print
    print(i, end=" ")    # 1 3 5 7 9

3.1 while-else 和 for-else(Python特色)

# else在循环正常结束时执行(没有break)
for i in range(5):
    print(i)
else:
    print("循环正常结束")  # 会执行

# 如果被break了,else不会执行
for i in range(5):
    if i == 3:
        break
    print(i)
else:
    print("这句不会执行")
for-else的典型用途:搜索一个元素,找到就break,没找到就执行else。比用额外变量标记更优雅。

4. 综合示例

4.1 猜数字游戏

import random

answer = random.randint(1, 100)  # 随机1-100
attempts = 0

print("猜数字游戏!范围1-100")

while True:
    guess = int(input("你的猜测: "))
    attempts += 1

    if guess < answer:
        print("太小了")
    elif guess > answer:
        print("太大了")
    else:
        print(f"恭喜!{attempts}次猜中!")
        break

4.2 打印三角形

# 直角三角形
n = 5
for i in range(1, n + 1):
    print("*" * i)
# *
# **
# ***
# ****
# *****

# 等腰三角形
for i in range(1, n + 1):
    spaces = " " * (n - i)
    stars = "*" * (2 * i - 1)
    print(spaces + stars)
#     *
#    ***
#   *****
#  *******
# *********

5. 练习题(独立完成)

练习1:成绩分类器

输入一个分数(0-100),输出等级(A/B/C/D/F)和评语。90+优秀, 80+良好, 70+中等, 60+及格, 60以下不及格。分数不在0-100范围时提示"无效分数"。

参考答案
score = float(input("输入分数: "))

if score < 0 or score > 100:
    print("无效分数")
elif score >= 90:
    print("A - 优秀")
elif score >= 80:
    print("B - 良好")
elif score >= 70:
    print("C - 中等")
elif score >= 60:
    print("D - 及格")
else:
    print("F - 不及格")

练习2:找素数

输出1-100之间所有的素数(只能被1和自身整除的大于1的自然数)。

参考答案
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:
        print(num, end=" ")
# 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

练习3:斐波那契数列

输出斐波那契数列前20项:1, 1, 2, 3, 5, 8, 13, 21...(每一项=前两项之和)

参考答案
a, b = 1, 1
for i in range(20):
    print(a, end=" ")
    a, b = b, a + b
# 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181 6765

练习4:密码验证系统

给用户最多3次输入密码的机会。密码正确显示"登录成功",3次都错显示"账户锁定"。

参考答案
correct_password = "python123"
for attempt in range(3):
    pwd = input("请输入密码: ")
    if pwd == correct_password:
        print("登录成功!")
        break
    else:
        remaining = 2 - attempt
        if remaining > 0:
            print(f"密码错误,还有{remaining}次机会")
else:
    print("账户锁定")

练习5:打印菱形

输入一个奇数n,打印n行的菱形图案。例如n=5:

  *
 ***
*****
 ***
  *
参考答案
n = int(input("输入奇数: "))
half = n // 2

# 上半部分(含中间行)
for i in range(half + 1):
    print(" " * (half - i) + "*" * (2 * i + 1))

# 下半部分
for i in range(half - 1, -1, -1):
    print(" " * (half - i) + "*" * (2 * i + 1))

练习6:简易菜单系统

用while循环做一个菜单:1.查余额 2.存款 3.取款 4.退出。初始余额1000,存款取款后更新余额,选4退出程序。

参考答案
balance = 1000

while True:
    print("\n===== 银行菜单 =====")
    print("1. 查余额")
    print("2. 存款")
    print("3. 取款")
    print("4. 退出")
    
    choice = input("请选择: ")
    
    if choice == "1":
        print(f"余额: {balance}元")
    elif choice == "2":
        amount = float(input("存款金额: "))
        balance += amount
        print(f"存款成功,余额: {balance}元")
    elif choice == "3":
        amount = float(input("取款金额: "))
        if amount > balance:
            print("余额不足!")
        else:
            balance -= amount
            print(f"取款成功,余额: {balance}元")
    elif choice == "4":
        print("再见!")
        break
    else:
        print("无效选择")

6. Day 2 小结

今天你学会了什么