第03章-控制流程

3.1 条件语句

3.1.1 if语句

基本语法:

python 复制代码
if 条件:
    代码块

示例:

python 复制代码
age = 18

if age >= 18:
    print("你已经成年了")

# 条件为真,执行代码块
# 条件为假,跳过代码块

注意事项:

  1. 条件后面要有冒号:
  2. 代码块要缩进(通常4个空格)
  3. Python通过缩进来识别代码块
python 复制代码
# 多条语句
score = 95

if score >= 90:
    print("优秀!")
    print("继续保持!")
    print("你真棒!")

# 条件表达式
number = 10

if number > 0:
    print("正数")

if number % 2 == 0:
    print("偶数")

3.1.2 if-else语句

python 复制代码
if 条件:
    代码块1
else:
    代码块2

示例:

python 复制代码
age = 16

if age >= 18:
    print("成年人")
else:
    print("小孩")

# 判断奇偶
number = 7

if number % 2 == 0:
    print(f"{number}是偶数")
else:
    print(f"{number}是奇数")

# 判断正负
num = -5

if num >= 0:
    print("非负数")
else:
    print("负数")

3.1.3 if-elif-else语句

多个条件判断:

python 复制代码
if 条件1:
    代码块1
elif 条件2:
    代码块2
elif 条件3:
    代码块3
else:
    代码块4

示例:

python 复制代码
# 成绩等级
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"分数{score},等级{grade}")

# BMI判断
bmi = 23.5

if bmi < 18.5:
    print("偏瘦")
elif bmi < 25:
    print("正常")
elif bmi < 30:
    print("偏胖")
else:
    print("肥胖")

# 季节判断
month = 8

if month in [3, 4, 5]:
    season = "春季"
elif month in [6, 7, 8]:
    season = "夏季"
elif month in [9, 10, 11]:
    season = "秋季"
else:
    season = "冬季"

print(f"{month}月是{season}")

3.1.4 嵌套条件语句

python 复制代码
# 嵌套if
age = 20
has_ticket = True

if age >= 18:
    if has_ticket:
        print("可以入场")
    else:
        print("请先购票")
else:
    print("未满18岁,禁止入场")

# 登录验证
username = "admin"
password = "123456"

input_user = input("用户名:")
input_pwd = input("密码:")

if input_user == username:
    if input_pwd == password:
        print("登录成功!")
    else:
        print("密码错误!")
else:
    print("用户名不存在!")

# 优化:减少嵌套层级
if input_user != username:
    print("用户名不存在!")
elif input_pwd != password:
    print("密码错误!")
else:
    print("登录成功!")

3.1.5 三元表达式(条件表达式)

简洁的if-else写法:

python 复制代码
# 语法
值1 if 条件 else 值2

# 示例
age = 20
result = "成年" if age >= 18 else "未成年"
print(result)  # 成年

# 取最大值
a = 10
b = 20
max_value = a if a > b else b
print(max_value)  # 20

# 取绝对值
num = -5
abs_num = num if num >= 0 else -num
print(abs_num)  # 5

# 嵌套三元表达式(不推荐,可读性差)
score = 85
grade = "A" if score >= 90 else ("B" if score >= 80 else "C")
print(grade)  # B

3.1.6 布尔运算与短路求值

python 复制代码
# and运算
age = 25
has_license = True

if age >= 18 and has_license:
    print("可以驾驶")

# or运算
is_vip = False
is_admin = True

if is_vip or is_admin:
    print("有特殊权限")

# not运算
is_banned = False

if not is_banned:
    print("可以发言")

# 短路求值
# and: 第一个为False,不再计算第二个
# or: 第一个为True,不再计算第二个

x = 0
y = 10

result = x and y  # x为0(False),返回x
print(result)  # 0

result = x or y   # x为0(False),返回y
print(result)  # 10

result = y and x  # y为10(True),返回x
print(result)  # 0

# 实际应用:避免除零错误
divisor = 0
result = divisor != 0 and 100 / divisor  # divisor为0,不执行除法
print(result)  # False

3.2 循环语句

3.2.1 while循环

基本语法:

python 复制代码
while 条件:
    循环体

示例:

python 复制代码
# 基本while循环
count = 1

while count <= 5:
    print(f"第{count}次循环")
    count += 1

# 输出:
# 第1次循环
# 第2次循环
# 第3次循环
# 第4次循环
# 第5次循环

# 累加求和
n = 100
total = 0
i = 1

while i <= n:
    total += i
    i += 1

print(f"1到{n}的和为{total}")  # 5050

# 用户输入验证
password = ""

while password != "123456":
    password = input("请输入密码:")

print("密码正确!")

3.2.2 for循环

基本语法:

python 复制代码
for 变量 in 序列:
    循环体

示例:

python 复制代码
# 遍历字符串
for char in "Python":
    print(char)
# P
# y
# t
# h
# o
# n

# 遍历列表
fruits = ["apple", "banana", "cherry"]

for fruit in fruits:
    print(f"我喜欢{fruit}")

# 遍历字典
person = {"name": "Alice", "age": 25, "city": "Beijing"}

# 遍历键
for key in person:
    print(key)

# 遍历键值对
for key, value in person.items():
    print(f"{key}: {value}")

# 遍历值
for value in person.values():
    print(value)

3.2.3 range()函数

range()生成数字序列:

python 复制代码
# range(stop) - 从0到stop-1
for i in range(5):
    print(i, end=" ")  # 0 1 2 3 4

print()

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

print()

# range(start, stop, step) - 指定步长
for i in range(0, 10, 2):
    print(i, end=" ")  # 0 2 4 6 8

print()

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

print()

# 生成列表
numbers = list(range(1, 11))
print(numbers)  # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 应用:累加求和
total = 0
for i in range(1, 101):
    total += i
print(f"1到100的和:{total}")  # 5050

# 九九乘法表
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}×{i}={i*j}", end="\t")
    print()

3.2.4 break语句

break用于跳出循环:

python 复制代码
# 找到第一个偶数就退出
numbers = [1, 3, 5, 8, 9, 10]

for num in numbers:
    if num % 2 == 0:
        print(f"找到偶数:{num}")
        break

# 密码验证(最多3次机会)
password = "123456"
attempts = 0

while attempts < 3:
    input_pwd = input("请输入密码:")
    if input_pwd == password:
        print("登录成功!")
        break
    else:
        attempts += 1
        print(f"密码错误!还有{3 - attempts}次机会")
else:
    print("密码错误次数过多,账号已锁定!")

# 查找
students = ["Alice", "Bob", "Charlie", "David"]
search_name = "Charlie"

for student in students:
    if student == search_name:
        print(f"找到了:{student}")
        break
else:
    print("未找到")

3.2.5 continue语句

continue跳过本次循环,继续下一次:

python 复制代码
# 只打印奇数
for i in range(1, 11):
    if i % 2 == 0:
        continue
    print(i, end=" ")  # 1 3 5 7 9

print()

# 跳过某些值
for i in range(1, 11):
    if i == 5:
        continue
    print(i, end=" ")  # 1 2 3 4 6 7 8 9 10

print()

# 筛选数据
scores = [85, 92, 78, 65, 88, 55, 90]

for score in scores:
    if score < 60:
        continue
    print(f"及格分数:{score}")

3.2.6 循环的else子句

循环正常结束(没有break)时执行else:

python 复制代码
# while...else
count = 0

while count < 5:
    print(count)
    count += 1
else:
    print("循环正常结束")

# for...else
numbers = [1, 3, 5, 7, 9]

for num in numbers:
    if num % 2 == 0:
        print("找到偶数")
        break
else:
    print("没有偶数")  # 会执行

# 实际应用:查找
def find_prime(n):
    """判断是否为质数"""
    if n < 2:
        return False

    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    else:
        return True

print(find_prime(17))  # True
print(find_prime(18))  # False

3.2.7 嵌套循环

python 复制代码
# 二层循环
for i in range(1, 4):
    for j in range(1, 4):
        print(f"i={i}, j={j}")

# 打印矩形
for i in range(5):
    for j in range(10):
        print("*", end="")
    print()

# 打印三角形
for i in range(1, 6):
    for j in range(i):
        print("*", end="")
    print()

# 九九乘法表
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}×{i}={i*j:2d}", end="  ")
    print()

# 双重循环的break
for i in range(3):
    for j in range(3):
        if i == 1 and j == 1:
            break  # 只跳出内层循环
        print(f"({i},{j})", end=" ")
    print()

# 完全跳出双重循环
found = False
for i in range(3):
    for j in range(3):
        if i == 1 and j == 1:
            found = True
            break
    if found:
        break
    print(f"外层循环{i}")

3.2.8 while vs for

何时使用while,何时使用for?

python 复制代码
# 使用for:已知循环次数
# 遍历序列
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
    print(fruit)

# 已知范围
for i in range(10):
    print(i)

# 使用while:不知道循环次数
# 条件循环
count = 0
while count < 100:
    count += 1
    if some_condition:  # 某个条件满足就退出
        break

# 无限循环(配合break)
while True:
    command = input("输入命令(quit退出):")
    if command == "quit":
        break
    process(command)

3.3 循环优化技巧

3.3.1 enumerate()

同时获取索引和值:

python 复制代码
fruits = ["apple", "banana", "cherry"]

# 不推荐
for i in range(len(fruits)):
    print(f"{i}: {fruits[i]}")

# 推荐
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

# 指定起始索引
for index, fruit in enumerate(fruits, start=1):
    print(f"{index}: {fruit}")
# 1: apple
# 2: banana
# 3: cherry

3.3.2 zip()

同时遍历多个序列:

python 复制代码
names = ["Alice", "Bob", "Charlie"]
ages = [25, 30, 35]
cities = ["Beijing", "Shanghai", "Guangzhou"]

# 不推荐
for i in range(len(names)):
    print(f"{names[i]}, {ages[i]}, {cities[i]}")

# 推荐
for name, age, city in zip(names, ages, cities):
    print(f"{name}, {age}, {city}")

# zip长度不一致时,以最短的为准
a = [1, 2, 3, 4, 5]
b = ["a", "b", "c"]

for x, y in zip(a, b):
    print(x, y)
# 1 a
# 2 b
# 3 c

3.3.3 reversed()

反向遍历:

python 复制代码
# 列表反转
numbers = [1, 2, 3, 4, 5]

for num in reversed(numbers):
    print(num, end=" ")  # 5 4 3 2 1

# 字符串反转
for char in reversed("Python"):
    print(char, end="")  # nohtyP

3.3.4 列表推导式(预览)

python 复制代码
# 传统方式
squares = []
for i in range(1, 11):
    squares.append(i ** 2)

# 列表推导式(后续章节详解)
squares = [i ** 2 for i in range(1, 11)]
print(squares)
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

3.4 常见循环模式

3.4.1 累加求和

python 复制代码
# 1+2+3+...+100
total = 0
for i in range(1, 101):
    total += i
print(total)  # 5050

# 使用sum()函数
total = sum(range(1, 101))
print(total)  # 5050

3.4.2 累乘

python 复制代码
# 计算阶乘 5! = 5×4×3×2×1
n = 5
result = 1
for i in range(1, n + 1):
    result *= i
print(f"{n}! = {result}")  # 120

3.4.3 查找

python 复制代码
# 查找元素
numbers = [10, 20, 30, 40, 50]
target = 30

for i, num in enumerate(numbers):
    if num == target:
        print(f"找到{target},索引为{i}")
        break
else:
    print(f"未找到{target}")

3.4.4 计数

python 复制代码
# 统计偶数个数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
count = 0

for num in numbers:
    if num % 2 == 0:
        count += 1

print(f"偶数个数:{count}")  # 5

3.4.5 最值

python 复制代码
# 找最大值
numbers = [45, 23, 67, 89, 12, 56]

max_value = numbers[0]
for num in numbers:
    if num > max_value:
        max_value = num

print(f"最大值:{max_value}")  # 89

# 使用max()函数
max_value = max(numbers)
print(max_value)  # 89

3.5 实战案例

案例1:猜数字游戏

python 复制代码
import random

# 生成1-100的随机数
secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 7

print("我想了一个1-100的数字,你能猜到吗?")
print(f"你有{max_attempts}次机会")

while attempts < max_attempts:
    guess = int(input("请输入你猜的数字:"))
    attempts += 1

    if guess == secret_number:
        print(f"恭喜你,猜对了!你用了{attempts}次")
        break
    elif guess < secret_number:
        print("太小了!")
    else:
        print("太大了!")

    print(f"还剩{max_attempts - attempts}次机会")
else:
    print(f"游戏结束!正确答案是{secret_number}")

案例2:斐波那契数列

python 复制代码
# 打印前20项斐波那契数列
# 1, 1, 2, 3, 5, 8, 13, 21, ...

n = 20
a, b = 1, 1

print(a, end=" ")
print(b, end=" ")

for i in range(n - 2):
    c = a + b
    print(c, end=" ")
    a, b = b, c

案例3:素数判断

python 复制代码
def is_prime(n):
    """判断是否为质数"""
    if n < 2:
        return False

    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False
    return True

# 打印100以内的所有质数
print("100以内的质数:")
for num in range(2, 101):
    if is_prime(num):
        print(num, end=" ")

案例4:99乘法表

python 复制代码
# 完整版
for i in range(1, 10):
    for j in range(1, 10):
        print(f"{i}×{j}={i*j:2d}", end="  ")
    print()

print()

# 下三角
for i in range(1, 10):
    for j in range(1, i + 1):
        print(f"{j}×{i}={i*j:2d}", end="  ")
    print()

案例5:统计字符

python 复制代码
text = "Hello, World! Python is awesome!"

# 统计各类字符数量
letters = 0
digits = 0
spaces = 0
others = 0

for char in text:
    if char.isalpha():
        letters += 1
    elif char.isdigit():
        digits += 1
    elif char.isspace():
        spaces += 1
    else:
        others += 1

print(f"字母:{letters}")
print(f"数字:{digits}")
print(f"空格:{spaces}")
print(f"其他:{others}")

3.6 参考资料

官方文档

学习资源

练习平台

相关推荐
wanderful_13 天前
Javascript笔记分享-流程控制(超级超级详细!!!)
javascript·笔记·流程控制·实战案例·新手友好
编程火箭车14 天前
【Java SE 基础学习打卡】26 跳转语句
java基础·continue·流程控制·编程入门·break·循环控制·跳转语句
_OP_CHEN16 天前
【Python基础】(三)Python 语法基础进阶:条件循环 + 实战案例,从入门到精通的核心跳板
开发语言·python·python入门·条件语句·循环语句·python基础语法
编程火箭车19 天前
【Java SE 基础学习打卡】25 循环结构 - for
避坑指南·java编程·循环结构·代码实践·for循环详解·编程新手教程·java学习笔记
编程火箭车22 天前
【Java SE 基础学习打卡】24 循环结构 - while
java·编程基础·循环结构·while循环·java se·do-while循环·避免死循环
编程火箭车24 天前
【Java SE 基础学习打卡】22 分支结构 - if
java·流程控制·编程基础·if语句·分支结构·条件判断·新手避坑
云计算练习生2 个月前
linux shell编程实战 04 条件判断与流程控制
linux·运维·流程控制·shell编程·条件判断
CHANG_THE_WORLD3 个月前
if条件语句 三目运算符 汇编分析
汇编·算法·条件语句·if 语句·汇编分析·条件语句汇编分析
gopyer3 个月前
180课时吃透Go语言游戏后端开发5:Go语言中的条件语句
golang·go·游戏开发·条件语句