Python3 基础教程

Python3 流程控制

🎉摘要:本文详解 Python3 控制语句,涵盖标准输入输出、程序三大结构。深入讲解 if 条件判断、while 与 for 循环语法,以及 break、continue、pass 跳转语句用法,配合实例代码帮助初学者掌握程序流程控制。

在 Python3 中,控制语句是用来改变程序执行流程的核心语法,主要分为三种语句,分别是条件判断语句(分支)、循环语句(重复执行)、跳转语句(中断 / 跳过)。

标准输入/输出

在 Python3 中,用户可以通过标准输入(stdin)和标准输出(stdout)与程序进行交互,即根据程序提示输入数据,程序计算后输出结果,简单的来说:

  • 标准输入:程序从控制台 / 终端读取用户输入的内容,主要使用 input() 函数。

  • 标准输出:程序将内容打印 / 输出到控制台 / 终端,主要使用 print() 函数。

示例:提示用户输入姓名,然后将姓名再次打印到终端。

# 提示用户输入姓名
# input() 的参数是提示文本,用户输入后按回车,内容会被赋值给 name 变量
name = input("请输入你的姓名:")

# 将姓名打印到终端(print() 函数输出内容)
# 用 f-string 格式化输出,更直观展示结果
print(f"你输入的姓名是:{name}")

更多关于标准输入和输出的内容将在后续详细介绍。

程序结构

计算机在解决某个具体问题时,主要有 3 中情况,分别是顺序执行所有语句、选择执行部分语句和循环执行部分语句。对应程序设计中的 3 中结构是顺序结构、选择结构和循环结构。如下图:

上图中:

(1)顺序结构指编写完毕的语句按照编写顺序依次被执行。

(2)选择结构主要根据条件语句的结果选择执行不同的语句。如果条件为 True,则执行语句1。如果条件为 False,则执行语句2。

(3)循环结构指在一定条件下反复执行某段程序,知道条件不满足为止。如表达式结果为 True,则执行语句1,然后继续判断表达式,如果结果继续为 True,则再次执行语句1,如果为 False,则结束。

if 判断语句

在 Python3 中,if 判断语句是实现分支逻辑的主要语法,它能根据条件的“真 / 假”决定执行哪一段代码,就像生活中“如果… 就…,否则…”的逻辑。

例如,如果早上 7 点钟起床,就自己做早餐吃,否则就不在外面买早餐吃。下面通过流程图进行表示:

Python3 中, if 语句有三种基础形式(if 语句、if-else 语句、if-elif-else 语句),下面将分别进行介绍:

if 语句

在 Python3 中,使用 if 保留字来组成选择语句,其最简单的语法形式如下:

if 条件表达式:
    # 条件为 True 时执行的代码块(必须缩进)

其中,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式(如 a > b and a != b),如果表达式值为真,则执行“语句块”。如果表达式的值为假,就跳过“语句块”,继续执行后面的语句。

if 语句的流程图如下:

示例 1:简单使用 if 语句

a = 10
if a >= 10:
    print("a大于等于10")

运行结果:

a大于等于10

示例 2:用户输入数字,然后判断数字是否大于等于 10

a = input("请输入数字:")
if int(a) >= 10:
    print("a大于等于10")

运行结果:

请输入数字:12   // 注意,这里是用户输入的
a大于等于10

if-else 语句

如果遇到只能二选一的条件,例如,某家公司在发展过程中遇到了“扩张”和“求稳”的抉择,此时,我们可以使用 Python3 提供的 if-else 语句来解决类似的问题,语法格式如下:

if 表达式:
    语句块1
else:
    语句块2

使用 if-else 语句时,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式。如果满足条件,则执行 if 语句后面的语句块1。否则,执行 else 语句后面的语句块2。

if-else 语句的流程图如下:

示例1:判断数字正负

num = -5
if num > 0:
    print(f"{num} 是正数")
else:
    print(f"{num} 是非正数(0或负数)")  # 输出:-5 是非正数(0或负数)

示例2:判断是否为闰年(简化版:能被4整除但不能被100整除,或能被400整除)

year = 2024
if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
    print(f"{year} 是闰年")  # 输出:2024 是闰年
else:
    print(f"{year} 是平年")

示例3:判断用户是否满足抽奖条件(登录且积分≥100)

is_login = True
points = 150
if is_login and points >= 100:
    print("你满足抽奖条件,可参与抽奖!")  # 输出:你满足抽奖条件,可参与抽奖!
else:
    print("未满足抽奖条件:请先登录或积累积分≥100")

嵌套 if-else 语句

嵌套 if-else 语句指在 if 或者 else 语句块内嵌套另一个 if-else,实现“多层二选一”逻辑。注意,建议嵌套≤3 层,避免代码混乱。

示例:判断成绩是否及格,且及格后判断是否优秀

score = 85
if score >= 60:
    print("考试及格!")
    # 嵌套if-else
    if score >= 90:
        print("成绩优秀,值得表扬!")
    else:
        print("继续努力,争取更优!")  # 输出:考试及格! 继续努力,争取更优!
else:
    print("考试不及格,需要补考!")

单行 if-else(三元表达式)

单行 if-else 语句适用于简单逻辑,将双分支代码简化为一行,语法如下:

变量 = 表达式1 if 条件 else 表达式2

如果条件为 True,则执行“表达式 1”。否则,执行“表达式 2”。

示例:

# 常规 if-else 赋值
score = 58
if score >= 60:
    result = "及格"
else:
    result = "不及格"
print(result)  # 输出:不及格

# 三元表达式简化(等价于上面的代码)
result = "及格" if score >= 60 else "不及格"
print(result)  # 输出:不及格

# 给变量设置默认值
user_input = ""
name = user_input if user_input else "匿名用户"
print(name)  # 输出:匿名用户

if-elif-else 语句

大家在上网购物时,通常都有多种付款方式以供选择。下图提供了 3 钟付款方式:

这时用户要从多个选项中选择一个。

此时,可以使用 if-elif-else 语句,该语句是一个多分支选择语句,通常表现为“如果满足某种条件,则进行某种处理。否则,如果满足另一种条件,则执行另一种处理...”。

if-elif-else 语句的语法格式如下:

if 表达式1:
    语句块1
elif 表达式2:
    语句块2
elif 表达式3:
    语句块3
...
else:
    语句块n

使用 if-elif-else 语句时,表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式。如果表达式为 True,则执行语句;如果表达式为 False,则跳过该语句,进入下一个 elif 判断。只有在所有表达式都为 False 的情况下,才会执行 else 中的语句。

if-elif-else 语句的流程图如下图:

示例1:根据分数划分等级

score = 85
if score >= 90:
    print("等级:优秀")  # 条件1:90+ → 优秀
elif score >= 80:
    print("等级:良好")  # 条件2:80-89 → 良好(执行该分支)
elif score >= 60:
    print("等级:及格")  # 条件3:60-79 → 及格
else:
    print("等级:不及格")  # 所有条件不满足 → 不及格

运行结果:

等级:良好

示例2:根据会员等级和消费金额判断折扣

vip_level = "黄金"
consume = 1200

if vip_level == "钻石" and consume >= 1000:
    print("钻石会员,消费达标:享受8折优惠 + 赠品")
elif vip_level == "黄金" and consume >= 800:
    print("黄金会员,消费达标:享受8.5折优惠")  # 执行该分支
elif vip_level == "白银":
    print("白银会员:享受9折优惠")
else:
    print("普通会员:无优惠")

运行结果:

黄金会员,消费达标:享受8.5折优惠

注意:

(1)if-elif-else 语句也支持嵌套,即可以在 if、elif 或 else 中继续编写 if 语句、if-else 语句或 if-elif-else 语句,如下:

age = 22
income = 8000

if age >= 18:
    print("你是成年用户")
    # 嵌套多分支
    if income >= 10000:
        print("高消费能力,推荐高端产品")
    elif income >= 5000:
        print("中等消费能力,推荐性价比产品")  # 执行该分支
    else:
        print("基础消费能力,推荐入门产品")
else:
    print("未成年用户,推荐学生专属产品")

(2)if-elif-else 是顺序执行的,严格条件必须放在宽松条件前面,否则会被覆盖导致逻辑错误,如下:

错误示例:

# 宽松条件在前,严格条件失效
score = 95
if score >= 80:
    print("良好")  # 该条件先满足,后续 elif 不会执行
elif score >= 90:
    print("优秀")  # 无输出(逻辑错误)

正确示例:

# 严格条件在前
score = 95
if score >= 90:
    print("优秀")  # 执行该分支
elif score >= 80:
    print("良好")
elif score >= 60:
    print("及格")
else:
    print("不及格")

(3)当“所有条件都不满足时无需处理”,可省略 else,仅保留 if-elif,例如:

order_status = "已取消"
if order_status == "待支付":
    print("提醒:订单即将超时,请尽快付款")
elif order_status == "已发货":
    print("提醒:订单已发货,预计3天内送达")
# 无else → 订单状态为"已取消"时,无任何输出

while循环

while 循环的作用是在满足特定条件时,重复执行一段代码(循环体),直到条件不成立为止。它非常适合循环次数不确定的场景,如用户输入数据验证、数据读取到结束等。

while 语法格式如下:

while 条件表达式:
    循环体

条件表达式可以是一个单纯的布尔值或变量,也可以是比较表达式或逻辑表达式。当条件表达式的返回值为 True 时,将执行循环体中的语句,执行完毕后,重新判断条件表达式的返回值,直到条件表达式返回的结果为 False 时,退出循环。

while 循环语句的执行流程图如下:

示例1:简单打印 1~5 到标准输出

# 初始化计数器
count = 1
# 条件:count <= 5 时执行循环
while count <= 5:
    print(count)
    # 关键:让计数器递增,否则条件永远为True(死循环)
    count += 1

示例2:要求用户输入1-10之间的数字,否则一直提示

while True:
    num = input("请输入1-10之间的数字:")
    # 先判断是否为数字
    if not num.isdigit():
        print("输入错误!请输入数字")
        continue
    # 转换为整数并判断范围
    num = int(num)
    if 1 <= num <= 10:
        print(f"输入正确:{num}")
        break  # 输入正确,退出循环
    else:
        print("输入错误!数字必须在1-10之间")

示例3:读取列表直到空

fruits = ["苹果", "香蕉", "橙子"]
while fruits:  # 列表非空时条件为True
    fruit = fruits.pop()  # 取出最后一个元素
    print(f"取出:{fruit},剩余:{fruits}")

死循环

如果条件表达式永远为 True,循环会无限执行(死循环),会占用大量系统资源,甚至导致程序崩溃。例如:

# 条件永远为True,会无限打印
while True:
    print("死循环,按Ctrl+C终止")

注意:上面代码谨慎执行,避免导致电脑资源耗尽。

else 子句

while 循环可以搭配 else 子句,当循环条件正常为 False 结束时(不是被 break 终止),会执行 else 里的代码。例如:

(1)循环正常结束,将会执行 else 语句

count = 1
while count <= 3:
    print(f"循环执行中:count={count}")
    count += 1
else:
    print("循环正常结束(条件为False)")

(2)如果使用 break 终止了循环,else 不会执行

count = 1
while count <= 3:
    print(f"循环执行中:count={count}")
    if count == 2:
        break
    count += 1
else:
    print("这段代码不会执行")

for循环

for 循环是一个计次循环,一般应用在循环次数已知的情况下。通常适用于枚举或遍历序列,以及迭代对象中的元素。语法格式如下:

for 迭代变量 in 对象:
    循环体

其中:

  • 迭代变量:用于保存读取出的值。

  • 对象:为要遍历或迭代的对象,该对象可以是任何有序的序列对象,如字符串、列表和元组等。

  • 循环体:为一组被重复执行的语句。

for 循环语句的执行流程图如下:

示例1:遍历列表

fruits = ["苹果", "香蕉", "橙子"]
# 遍历列表中的每个元素
for fruit in fruits:
    print(f"当前水果:{fruit}")

示例2:按字符遍历字符串

text = "Python"
for char in text:
    print(char)

示例3:遍历数字序列

for i in range(2, 8):
    print(i, end=" ")

示例4:遍历字典

student = {"name": "小明", "age": 18, "grade": "高一"}

# 遍历键(默认)
for key in student:
    print(f"键:{key},值:{student[key]}")

print("---")

# 显式遍历键
for key in student.keys():
    print(f"键:{key}")

print("---")

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

else 子句

和 while 循环的 else 逻辑一样,当循环正常遍历完所有元素(未被 break 终止) 时,执行 else 代码块。例如:

(1)正常结束将会执行 else 语句

fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
    print(f"遍历:{fruit}")
else:
    print("循环正常结束(遍历完所有元素)")

(2)如果 for 循环被 break 终止,将不会执行 else 语句

fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
    if fruit == "香蕉":
        break
    print(f"遍历:{fruit}")
else:
    print("这段代码不会执行")

嵌套 for 循环

嵌套 for 循环,顾名思义指一个 for 循环内部嵌套另一个 for 循环,常用于处理二维数据(如二维列表)。

示例:打印九九乘法表

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

break 语句

break 语句可以用来终止当前的循环,包括 while 和 for 在内的所有控制语句。以沿着湖泊骑自行车为例,原计划骑行 5 圈,然而当骑行到第三圈时,自行车出了问题,于是果断停下来,中止骑行。这就相当于使用 break 提前中止了循环。

示例1:中止 while 循环

count = 0
while count < 10:
    count += 1  # 计数器加 1
    print(f"当前计数:{count}")
    
    # 当计数等于 5 时,执行 break 跳出循环
    if count == 5:
        print("触发 break,提前终止循环")
        break  # 立即终止 while 循环,后续代码不再执行

print("循环已结束")

示例2:中止 for 循环

numbers = [1, 2, 3, 4, 5, 6, 7, 8]
for num in numbers:
    print(f"当前遍历的数字:{num}")
    # 满足条件时执行 break
    if num == 5:
        print("找到数字 5,终止循环")
        break

print("循环已结束,执行后续逻辑")

continue 语句

continue 语句的作用没有 break 语句强大,它只能中止本次循环而提前进入下一次循环中。依然以沿着湖泊骑自行为例,原计划骑行 5 圈,然而当骑行到第三圈时,自行车出了问题,于是推出去修理,修理完成后,重新开始第四圈骑行。这就相当于使用 continue 跳过了本次循环。

示例1:遍历 1-10,只打印奇数,遇到偶数则跳过

for num in range(1, 11):
    # 判断是否为偶数
    if num % 2 == 0:
        # 跳过当前迭代的剩余代码(即下面的 print 语句)
        continue
    # 只有奇数会执行到这一步
    print(f"奇数: {num}")

示例2:从 1 计数到 10,跳过数字 5

count = 1
while count <= 10:
    if count == 5:
        # 跳过 5 的打印,但必须先让 count 自增,否则会一直卡在 5 导致死循环
        count += 1  # 关键:continue 前要更新计数
        continue
    print(f"当前数字: {count}")
    count += 1

pass 语句

在 Python3 中,还有一个 pass 语句,表示空语句。它不做任何事情,一般起到占位作用。

示例1,当应用 for 循环输出 1~10(不包括 10)的偶数时,如果不是偶数,则应用 pass 语句占个位置,以方便以后对不是偶数的数进行处理:

for i in range(1,10):
    if i%2 == 0:	# 判断是否为偶数
        print(i, end=' ')
    else:
        pass 		# 占位符,不做任何事情

运行结果:

2 4 6 8

示例2:未实现的函数

# 计划后续实现的函数,先用 pass 占位
def calculate_sum(a, b):
    # 暂时不写具体逻辑,用 pass 避免语法错误
    pass

# 调用函数不会报错,只是无任何输出/返回值
result = calculate_sum(3, 5)
print(result)  # 输出:None

示例3:未实现的类

# 定义类但暂时不写属性/方法,用 pass 占位
class Student:
    pass

# 可以正常创建类的实例
stu = Student()
stu.name = "小明"  # 后续可动态添加属性
print(stu.name)  # 输出:小明

示例4:未完成的分支语句

score = 85
if score >= 90:
    # 后续再实现“优秀”的逻辑
    pass
elif score >= 80:
    print("良好")  # 已实现的逻辑
else:
    # 后续再实现“不及格”的逻辑
    pass

更多 Python3 知识,请继续学习后续章节。

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号