Python 入门三阶段:学会做选择和重复 —— 流程控制
·
第三阶段:学会做选择和重复 —— 流程控制
第7章:人生岔路口 —— 条件判断(if-elif-else)
7.1 if 语句 —— 如果……就……
生活中我们每天都在做判断:
- 如果下雨了,就带伞
- 如果饿了,就吃饭
Python 也是一样的逻辑:
weather = "下雨"
if weather == "下雨":
print("带上雨伞!")
注意几个要点:
if后面写条件- 条件后面要加冒号
: - 要执行的代码需要缩进(按一下 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("不及格……要补考了 😭")
执行流程:
- 先检查
score >= 90,如果满足就执行对应代码,然后跳过后面所有判断 - 如果不满足,检查
score >= 80 - 依此类推……
- 如果所有条件都不满足,执行
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("售票窗口在大厅左侧。")
用逻辑运算符简化嵌套
有时候嵌套太深会让代码难读,可以用 and、or 来简化:
# 嵌套写法(不太好读)
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)
执行过程解析:
- 外层 i=1 → 内层 j 依次为 1,2,3 → 打印 (1,1) (1,2) (1,3) → 换行
- 外层 i=2 → 内层 j 依次为 1,2,3 → 打印 (2,1) (2,2) (2,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) |
课后练习
- 石头剪刀布:和电脑玩石头剪刀布(电脑随机出,三局两胜)
- 打印杨辉三角:用嵌套循环打印指定行数的杨辉三角
- 质数判断器:输入一个数,判断它是不是质数
- 找出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 管理一堆数据!
更多推荐
所有评论(0)