🐍 Python 基础语法(二):流程控制语句详解
前言
上一篇我们学习了 Python 中的常量、变量、类型及运算符等基础语法,本篇将聚焦流程控制语句------包括顺序语句、条件语句和循环语句,这些是实现程序逻辑跳转和重复执行的核心工具,能让你的代码从简单的计算升级为具有复杂逻辑的程序。
一、顺序语句
程序默认的执行方式是从上到下依次执行,这种按顺序执行的代码称为顺序语句。
python
print("1")
print("2")
print("3")
执行结果一定是 1 2 3
,不会出现乱序。就像日常生活中"上学→工作→结婚"的顺序一样,程序的步骤顺序对结果至关重要。
二、条件语句(分支语句)
条件语句用于实现"如果...否则..."的逻辑判断,让程序根据不同条件执行不同分支。
2.1 基本语法
Python 使用 if
、elif
、else
关键字实现条件判断,语法特点:
- 条件表达式后无括号,以
:
结尾 - 语句块通过缩进 (4个空格或1个Tab)区分,而非
{}
- 多分支用
elif
(else if 的缩写)
类型 | 语法格式 | 说明 |
---|---|---|
单分支 | if 条件: 语句块 |
条件为 True 时执行语句块 |
双分支 | if 条件: 语句块1 else: 语句块2 |
条件为 True 执行语句块1,否则执行语句块2 |
多分支 | if 条件1: 语句块1 elif 条件2: 语句块2 else: 语句块3 |
依次判断条件,执行首个成立的分支;都不成立则执行 else |
2.2 示例代码
python
# 示例1:判断输入的选择
choice = input("输入1表示认真学习,输入2表示躺平摆烂:")
if choice == "1":
print("你会找到好工作!")
elif choice == "2":
print("你可能毕业就失业了!")
else:
print("输入有误!")
# 示例2:判断奇偶数
num = int(input("请输入一个整数:"))
if num % 2 == 0:
print("偶数")
else:
print("奇数")
# 示例3:判断闰年(能被4整除且不能被100整除,或能被400整除)
year = int(input("请输入年份:"))
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
print("闰年")
else:
print("平年")
2.3 缩进与代码块
- 代码块 :一组需要一起执行的语句(如
if
条件成立后执行的所有语句)。 - 缩进规则:同一代码块缩进量必须一致,否则会报错。
python
# 代码1:print("world") 属于 if 代码块
a = input("请输入1:")
if a == "1":
print("hello")
print("world") # 有缩进,条件成立才执行
# 代码2:print("world") 不属于 if 代码块
a = input("请输入1:")
if a == "1":
print("hello")
print("world") # 无缩进,无论条件是否成立都执行
2.4 空语句 pass
当条件分支暂时不需要执行任何操作时,用 pass
占位(保持语法完整):
python
a = int(input("请输入整数:"))
if a != 1:
pass # 什么都不做,仅占位
else:
print("输入的是1")
三、循环语句
循环用于重复执行某段代码,Python 提供 while
和 for
两种循环。
3.1 while
循环
语法:
python
while 条件:
循环体 # 条件为 True 时重复执行
示例:
python
# 示例1:打印1-10
num = 1
while num <= 10:
print(num)
num += 1 # 记得更新循环变量,避免死循环
# 示例2:计算1-100的和
total = 0
num = 1
while num <= 100:
total += num
num += 1
print("1-100的和为:", total) # 输出 5050
# 示例3:嵌套循环(计算1!+2!+...+5!)
sum_factorial = 0
num = 1
while num <= 5:
factorial = 1 # 计算当前num的阶乘
i = 1
while i <= num:
factorial *= i
i += 1
sum_factorial += factorial
num += 1
print("阶乘和为:", sum_factorial) # 输出 153
3.2 for
循环
for
循环用于遍历"可迭代对象"(如范围、列表等),语法更简洁:
python
for 循环变量 in 可迭代对象:
循环体
常用场景:
- 使用
range()
生成数字范围:range(开始, 结束, 步长)
(左闭右开区间)
python
# 示例1:打印1-10
for i in range(1, 11): # 范围 [1, 11),即1-10
print(i)
# 示例2:打印2,4,6,8,10(步长为2)
for i in range(2, 11, 2):
print(i)
# 示例3:倒序打印10-1(步长为-1)
for i in range(10, 0, -1):
print(i)
3.3 循环控制:break
与 continue
continue
:跳过当前循环的剩余部分,直接进入下一次循环。break
:立即终止整个循环,跳出循环体。
python
# 示例1:continue(跳过第3个包子)
print("===== 吃包子(遇到虫跳过) =====")
for i in range(1, 6):
if i == 3:
print("第3个包子有虫,跳过!")
continue
print(f"吃完第{i}个包子")
# 示例2:break(吃到有虫的包子就停止)
print("\n===== 吃包子(遇到虫停止) =====")
for i in range(1, 6):
if i == 3:
print("第3个包子有虫,不吃了!")
break
print(f"吃完第{i}个包子")
运行结果:
===== 吃包子(遇到虫跳过) =====
吃完第1个包子
吃完第2个包子
第3个包子有虫,跳过!
吃完第4个包子
吃完第5个包子
===== 吃包子(遇到虫停止) =====
吃完第1个包子
吃完第2个包子
第3个包子有虫,不吃了!
四、综合案例:人生重开模拟器(简化版)
实现一个简单的文字游戏,包含属性设置、性别随机、出生点判定和幼年事件模拟。
python
import random
import time
import sys
# 游戏开场
print("花有重开日,人无再少年")
print("欢迎来到:人生重开模拟器")
# 1. 设置初始属性(颜值、体质、智力、家境,总和≤20,每个1-10)
while True:
print("\n请设定初始属性(可用总点数20)")
face = int(input("设定颜值(1-10):"))
strong = int(input("设定体质(1-10):"))
iq = int(input("设定智力(1-10):"))
home = int(input("设定家境(1-10):"))
# 验证属性合法性
if not (1 <= face <= 10):
print("颜值必须在1-10之间!")
continue
if not (1 <= strong <= 10):
print("体质必须在1-10之间!")
continue
if not (1 <= iq <= 10):
print("智力必须在1-10之间!")
continue
if not (1 <= home <= 10):
print("家境必须在1-10之间!")
continue
if face + strong + iq + home > 20:
print("总点数超过20,请重新分配!")
continue
break # 所有属性合法,退出循环
print("初始属性设定完成!")
# 2. 随机性别(掷骰子,单数为男,双数为女)
gender_point = random.randint(1, 6)
gender = "boy" if gender_point % 2 == 1 else "girl"
print(f"\n你是个{'男孩' if gender == 'boy' else '女孩'}")
# 3. 根据家境设定出生点
birth_point = random.randint(1, 3)
if home == 10:
print("你出生在帝都,父母是高官政要")
home += 1
iq += 1
face += 1
elif 7 <= home <= 9:
if birth_point == 1:
print("你出生在大城市,父母是公务员")
face += 2
elif birth_point == 2:
print("你出生在大城市,父母是企业高管")
home += 2
else:
print("你出生在大城市,父母是大学教授")
iq += 2
# 省略部分家境分支...
# 4. 模拟1-10岁幼年事件
print("\n===== 幼年阶段(1-10岁) =====")
for age in range(1, 11):
info = f"你今年{age}岁,"
event_point = random.randint(1, 3)
# 触发事件(根据性别、体质、颜值等属性)
if gender == "girl" and home <= 3 and event_point == 1:
info += "家里重男轻女,你被遗弃了..."
print(info)
print("游戏结束!")
sys.exit(0) # 结束程序
elif strong < 6 and event_point != 3:
info += "生了一场病,"
if home >= 5:
info += "父母精心照料,身体好转"
strong += 1
home -= 1
else:
info += "父母无暇照顾,身体变差"
strong -= 1
# 省略其他事件逻辑...
else:
info += "健康成长,"
if event_point == 1:
info += "更聪明了"
iq += 1
elif event_point == 2:
info += "更好看了"
face += 1
else:
info += "更结实了"
strong += 1
print(info)
print(f"当前属性:体质={strong},颜值={face},智力={iq},家境={home}")
time.sleep(1) # 暂停1秒,方便阅读
五、自测练习
-
[单选] 以下代码的输出结果是?
pythona = 5 if a > 10: print("A") elif a > 3: print("B") else: print("C")
A. A B. B C. C (答案:B)
-
[多选] 关于
break
和continue
的说法正确的是?A.
break
用于终止整个循环B.
continue
用于跳过当前循环的剩余部分C. 两者都能在
while
和for
循环中使用(答案:ABC)
-
[编程] 用循环计算 100 以内所有能被 3 整除的数的和。
总结
本文介绍了 Python 流程控制的三大核心:顺序执行、条件分支(if/elif/else
)和循环(while/for
),以及循环控制语句 break/continue
。这些工具是实现复杂逻辑的基础,例如游戏中的事件触发、数据处理中的批量计算等。下一章节将学习更高级的数据结构(列表、字典等),让程序能处理更复杂的数据!