第三阶段:学会做选择和重复 —— 流程控制


第7章:人生岔路口 —— 条件判断(if-elif-else)

7.1 if 语句 —— 如果……就……

生活中我们每天都在做判断:

  • 如果下雨了,带伞
  • 如果饿了,吃饭

Python 也是一样的逻辑:

weather = "下雨"

if weather == "下雨":
    print("带上雨伞!")

注意几个要点:

  1. if 后面写条件
  2. 条件后面要加冒号 :
  3. 要执行的代码需要缩进(按一下 Tab 键或打 4 个空格)
temperature = 35

if temperature > 30:
    print("今天好热!")
    print("记得多喝水!")
    print("最好待在空调房里。")
# 这三行都缩进了,都是 if 条件成立时执行的代码

print("天气预报到此结束。")  # 这行没有缩进,不管条件成不成立都会执行

7.2 if-else 语句 —— 如果……就……否则……

age = int(input("请输入你的年龄:"))

if age >= 18:
    print("你是成年人了!")
    print("可以去考驾照啦!")
else:
    print("你还未成年哦!")
    print(f"还有{18 - age}年才能考驾照。")

运行示例:

请输入你的年龄:20
你是成年人了!
可以去考驾照啦!
请输入你的年龄:15
你还未成年哦!
还有3年才能考驾照。

7.3 if-elif-else 语句 —— 多个条件怎么选?

当有多个条件需要判断时,用 elif(else if 的缩写):

score = int(input("请输入你的考试分数:"))

if score >= 90:
    print("优秀!太棒了!🌟")
elif score >= 80:
    print("良好!继续加油!👍")
elif score >= 70:
    print("中等,还需努力!💪")
elif score >= 60:
    print("及格,险过!😅")
else:
    print("不及格……要补考了 😭")

执行流程:

  1. 先检查 score >= 90,如果满足就执行对应代码,然后跳过后面所有判断
  2. 如果不满足,检查 score >= 80
  3. 依此类推……
  4. 如果所有条件都不满足,执行 else 里的代码

注意: 条件是从上到下依次检查的,一旦有一个条件满足,后面的就不再检查了!

# 错误示范:条件顺序不对
score = 95

if score >= 60:       # 95 >= 60 → True,直接执行这个!
    print("及格")     # 输出:及格 (但95分应该是"优秀"才对!)
elif score >= 90:     # 不会被检查到!
    print("优秀")

7.4 嵌套条件 —— 条件里面套条件

has_ticket = input("你买票了吗?(y/n) ") == "y"

if has_ticket:
    print("请进入候车厅。")
    seat_class = input("你买的是一等座还是二等座?(1/2) ")
    
    if seat_class == "1":
        print("请前往一等座候车区,在这边→")
    elif seat_class == "2":
        print("请前往二等座候车区,在那边←")
    else:
        print("无效的座位类型。")
else:
    print("请先购买车票!")
    print("售票窗口在大厅左侧。")
用逻辑运算符简化嵌套

有时候嵌套太深会让代码难读,可以用 andor 来简化:

# 嵌套写法(不太好读)
age = 25
has_license = True

if age >= 18:
    if has_license:
        print("你可以开车!")

# 用 and 简化(更清爽)
if age >= 18 and has_license:
    print("你可以开车!")

7.5 三元表达式 —— 一行搞定的 if-else

age = 20

# 普通写法
if age >= 18:
    status = "成年人"
else:
    status = "未成年人"

# 三元表达式(一行搞定)
status = "成年人" if age >= 18 else "未成年人"
print(status)  # 输出:成年人

7.6 小项目:成绩等级评定器

# ============================================
#         成绩等级评定器 v1.0
# ============================================

print("=" * 35)
print("       成绩等级评定器")
print("=" * 35)

name = input("请输入学生姓名:")
chinese = float(input("请输入语文成绩:"))
math = float(input("请输入数学成绩:"))
english = float(input("请输入英语成绩:"))

# 计算总分和平均分
total = chinese + math + english
average = total / 3

# 判断等级
if average >= 90:
    grade = "A(优秀)"
    comment = "太厉害了!继续保持!🌟"
elif average >= 80:
    grade = "B(良好)"
    comment = "表现不错!再努力一把就更好了!👍"
elif average >= 70:
    grade = "C(中等)"
    comment = "还行,但还有很大的进步空间哦!💪"
elif average >= 60:
    grade = "D(及格)"
    comment = "险过!要加把劲了!😅"
else:
    grade = "F(不及格)"
    comment = "需要认真补习了!📚"

# 找出最高分和最低分的科目
scores = {"语文": chinese, "数学": math, "英语": english}
best_subject = max(scores, key=scores.get)
worst_subject = min(scores, key=scores.get)

# 输出成绩单
print(f"\n{'=' * 35}")
print(f"  {name} 的成绩报告")
print(f"{'=' * 35}")
print(f"  语文:{chinese} 分")
print(f"  数学:{math} 分")
print(f"  英语:{english} 分")
print(f"{'─' * 35}")
print(f"  总分:{total} 分")
print(f"  平均分:{average:.1f} 分")
print(f"  等级:{grade}")
print(f"  最强科目:{best_subject}{scores[best_subject]} 分)")
print(f"  最弱科目:{worst_subject}{scores[worst_subject]} 分)")
print(f"{'─' * 35}")
print(f"  老师评语:{comment}")
print(f"{'=' * 35}")

运行效果:

===================================
       成绩等级评定器
===================================
请输入学生姓名:小明
请输入语文成绩:88
请输入数学成绩:95
请输入英语成绩:82

===================================
  小明 的成绩报告
===================================
  语文:88.0 分
  数学:95.0 分
  英语:82.0 分
───────────────────────────────────
  总分:265.0 分
  平均分:88.3 分
  等级:B(良好)
  最强科目:数学(95.0 分)
  最弱科目:英语(82.0 分)
───────────────────────────────────
  老师评语:表现不错!再努力一把就更好了!👍
===================================

第8章:不知疲倦的重复 —— 循环(for / while)

8.1 for 循环 —— 按清单一个个来

for 循环就像老师点名一样,把列表里的元素一个一个拿出来处理:

# 遍历列表
fruits = ["苹果", "香蕉", "橘子", "西瓜"]

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

输出:

我喜欢吃苹果
我喜欢吃香蕉
我喜欢吃橘子
我喜欢吃西瓜

遍历字符串:

for char in "Python":
    print(char, end=" ")
# 输出:P y t h o n

for 循环的执行过程:

names = ["小明", "小红", "小刚"]

for name in names:
    print(f"你好,{name}!")

# 第1轮:name = "小明" → 打印"你好,小明!"
# 第2轮:name = "小红" → 打印"你好,小红!"
# 第3轮:name = "小刚" → 打印"你好,小刚!"
# 列表遍历完毕,循环结束

8.2 range() 函数 —— 生成数字清单

range() 可以快速生成一串数字,常和 for 循环搭配使用:

# range(n):生成 0 到 n-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(5, 0, -1):
    print(i, end=" ")
# 输出:5 4 3 2 1

实用示例:

# 计算 1+2+3+...+100 的和
total = 0
for i in range(1, 101):
    total += i
print(f"1到100的和 = {total}")  # 输出:5050

# 打印 5 次"加油"
for i in range(5):
    print(f"第{i + 1}次加油!💪")

8.3 while 循环 —— 只要条件成立就一直干

while 循环会一直重复,直到条件不成立为止:

# 倒计时
count = 5

while count > 0:
    print(f"{count}...")
    count -= 1    # 别忘了改变条件,否则会死循环!

print("发射!🚀")

输出:

5...
4...
3...
2...
1...
发射!🚀

while vs for 的选择:

  • 知道要循环多少次 → 用 for
  • 不知道要循环多少次,但知道什么时候停 → 用 while
# 适合用 while 的场景:不断询问直到用户输入正确
password = ""

while password != "123456":
    password = input("请输入密码:")
    if password != "123456":
        print("密码错误,请重试!")

print("密码正确,欢迎登录!✅")

8.4 break 和 continue

break —— 立即跳出整个循环
# 找到第一个偶数就停下来
numbers = [1, 3, 7, 8, 5, 2, 9]

for num in numbers:
    if num % 2 == 0:
        print(f"找到了第一个偶数:{num}")
        break   # 找到就停!
    print(f"{num} 不是偶数,继续找...")

# 输出:
# 1 不是偶数,继续找...
# 3 不是偶数,继续找...
# 7 不是偶数,继续找...
# 找到了第一个偶数:8
continue —— 跳过本轮,继续下一轮
# 打印 1-10 中的奇数(跳过偶数)
for i in range(1, 11):
    if i % 2 == 0:
        continue    # 偶数跳过,不执行下面的 print
    print(i, end=" ")

# 输出:1 3 5 7 9

break 和 continue 的区别:

# break:直接结束整个循环
for i in range(1, 6):
    if i == 3:
        break
    print(i)
# 输出:1 2(碰到3就整个循环结束了)

# continue:跳过这一轮,继续下一轮
for i in range(1, 6):
    if i == 3:
        continue
    print(i)
# 输出:1 2 4 5(跳过了3,但循环继续)

8.5 小项目:猜数字游戏

import random

# ============================================
#           猜数字游戏 v1.0
# ============================================

print("=" * 35)
print("        猜数字游戏")
print("=" * 35)
print("我心里想了一个 1-100 的数字")
print("你来猜猜看!")
print("=" * 35)

# 随机生成一个 1-100 的数字
secret = random.randint(1, 100)
attempts = 0       # 记录猜的次数
max_attempts = 7   # 最多猜7次

while attempts < max_attempts:
    remaining = max_attempts - attempts
    guess = int(input(f"\n还有 {remaining} 次机会,请输入你猜的数字:"))
    attempts += 1
    
    if guess == secret:
        print(f"\n🎉 恭喜你猜对了!答案就是 {secret}!")
        print(f"你一共猜了 {attempts} 次。")
        
        if attempts <= 3:
            print("太厉害了!你是天才!🌟")
        elif attempts <= 5:
            print("不错不错!很有天赋!👍")
        else:
            print("虽然用了不少次,但还是猜对了!😊")
        break
    elif guess < secret:
        print("太小了!再大一点 ⬆️")
    else:
        print("太大了!再小一点 ⬇️")
else:
    # while 的 else:当循环正常结束(不是被 break 打断)时执行
    print(f"\n😢 很遗憾,次数用完了!答案是 {secret}")

print("\n游戏结束!感谢参与!")

运行效果:

===================================
        猜数字游戏
===================================
我心里想了一个 1-100 的数字
你来猜猜看!
===================================

还有 7 次机会,请输入你猜的数字:50
太大了!再小一点 ⬇️

还有 6 次机会,请输入你猜的数字:25
太小了!再大一点 ⬆️

还有 5 次机会,请输入你猜的数字:37
太小了!再大一点 ⬆️

还有 4 次机会,请输入你猜的数字:43
🎉 恭喜你猜对了!答案就是 43!
你一共猜了 4 次。
不错不错!很有天赋!👍

游戏结束!感谢参与!

第9章:循环的进阶玩法

9.1 嵌套循环 —— 循环里面套循环

# 外层循环控制行数,内层循环控制每行的内容
for i in range(1, 4):           # 外层循环3次(行)
    for j in range(1, 4):       # 内层循环3次(列)
        print(f"({i},{j})", end="  ")
    print()                     # 每行结束后换行

输出:

(1,1)  (1,2)  (1,3)  
(2,1)  (2,2)  (2,3)  
(3,1)  (3,2)  (3,3)  

执行过程解析:

  1. 外层 i=1 → 内层 j 依次为 1,2,3 → 打印 (1,1) (1,2) (1,3) → 换行
  2. 外层 i=2 → 内层 j 依次为 1,2,3 → 打印 (2,1) (2,2) (2,3) → 换行
  3. 外层 i=3 → 内层 j 依次为 1,2,3 → 打印 (3,1) (3,2) (3,3) → 换行

9.2 九九乘法表

# 经典练手题:九九乘法表
print("九九乘法表")
print("=" * 50)

for i in range(1, 10):          # 行:1到9
    for j in range(1, i + 1):   # 列:1到当前行号
        print(f"{j}×{i}={i*j:<4}", end="")
    print()                     # 换行

输出:

九九乘法表
==================================================
1×1=1   
1×2=2   2×2=4   
1×3=3   2×3=6   3×3=9   
1×4=4   2×4=8   3×4=12  4×4=16  
1×5=5   2×5=10  3×5=15  4×5=20  5×5=25  
1×6=6   2×6=12  3×6=18  4×6=24  5×6=30  6×6=36  
1×7=7   2×7=14  3×7=21  4×7=28  5×7=35  6×7=42  7×7=49  
1×8=8   2×8=16  3×8=24  4×8=32  5×8=40  6×8=48  7×8=56  8×8=64  
1×9=9   2×9=18  3×9=27  4×9=36  5×9=45  6×9=54  7×9=63  8×9=72  9×9=81  

9.3 小项目:绘制字符画

直角三角形
n = int(input("请输入三角形的行数:"))

# 直角三角形(左对齐)
print("直角三角形:")
for i in range(1, n + 1):
    print("* " * i)

输出(n=5):

直角三角形:
* 
* * 
* * * 
* * * * 
* * * * * 
等腰三角形
n = int(input("请输入三角形的行数:"))

print("等腰三角形:")
for i in range(1, n + 1):
    spaces = " " * (n - i)       # 前面的空格
    stars = "* " * i              # 星号
    print(spaces + stars)

输出(n=5):

等腰三角形:
    * 
   * * 
  * * * 
 * * * * 
* * * * * 
菱形
n = int(input("请输入菱形的半高(建议3-8):"))

print("菱形:")
# 上半部分(包括中间最宽的一行)
for i in range(1, n + 1):
    spaces = " " * (n - i)
    stars = "* " * i
    print(spaces + stars)

# 下半部分
for i in range(n - 1, 0, -1):
    spaces = " " * (n - i)
    stars = "* " * i
    print(spaces + stars)

输出(n=4):

菱形:
   * 
  * * 
 * * * 
* * * * 
 * * * 
  * * 
   * 
空心矩形
rows = int(input("请输入行数:"))
cols = int(input("请输入列数:"))

print("空心矩形:")
for i in range(rows):
    for j in range(cols):
        # 第一行、最后一行、第一列、最后一列 打印星号
        if i == 0 or i == rows - 1 or j == 0 or j == cols - 1:
            print("* ", end="")
        else:
            print("  ", end="")
    print()

输出(rows=5, cols=8):

空心矩形:
* * * * * * * * 
*             * 
*             * 
*             * 
* * * * * * * * 

9.4 enumerate() —— 同时获取下标和值

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

# 普通写法
for i in range(len(fruits)):
    print(f"第{i + 1}个水果:{fruits[i]}")

# 用 enumerate 更优雅
for index, fruit in enumerate(fruits, start=1):
    print(f"第{index}个水果:{fruit}")

输出:

第1个水果:苹果
第2个水果:香蕉
第3个水果:橘子
第4个水果:西瓜

本章小结

知识点 说明 示例
if 条件判断 if age >= 18:
elif 额外条件 elif age >= 12:
else 其他情况 else:
for 遍历循环 for i in range(5):
while 条件循环 while count > 0:
range() 生成数字序列 range(1, 10, 2)
break 跳出循环 break
continue 跳过本轮 continue
enumerate() 带下标遍历 enumerate(list)

课后练习

  1. 石头剪刀布:和电脑玩石头剪刀布(电脑随机出,三局两胜)
  2. 打印杨辉三角:用嵌套循环打印指定行数的杨辉三角
  3. 质数判断器:输入一个数,判断它是不是质数
  4. 找出100以内的所有质数

质数判断参考答案:

num = int(input("请输入一个正整数:"))

if num < 2:
    print(f"{num} 不是质数")
else:
    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(f"{num} 是质数!")
    else:
        print(f"{num} 不是质数,它可以被 {i} 整除。")

📚 下一阶段预告:我们将学习列表、字典等数据结构,用 Python 管理一堆数据!

更多推荐