
要点 | 描述 |
|---|---|
痛点 | 程序只会按顺序执行?想要实现更复杂的逻辑控制? |
方案 | 本教程详细讲解Python的条件语句和循环语句 |
驱动 | 掌握控制流语句,让你的Python程序能够根据不同情况做出不同的决策和重复执行任务! |
在上一篇教程中,我们学习了Python的数据类型。今天,我们将学习Python的控制流语句,包括条件语句和循环语句。控制流语句是编程语言中用来控制程序执行流程的语句,它们使程序能够根据不同的条件做出不同的决策,或者重复执行某些任务。掌握控制流语句是编写复杂程序的基础。
章节 | 内容 |
|---|---|
1 | 条件语句(if-elif-else) |
2 | 嵌套条件语句 |
3 | 三元运算符 |
4 | match-case语句(Python 3.10+) |
5 | 循环语句:while循环 |
6 | 循环语句:for循环 |
7 | 循环中的break、continue和else语句 |
8 | 嵌套循环 |
9 | 综合应用示例 |
条件语句用于根据不同的条件执行不同的代码块。Python中的条件语句主要包括if、elif和else关键字。
if语句是最基本的条件语句,用于在条件为真时执行特定的代码块。
# if语句的基本语法
if 条件:
# 条件为真时执行的代码(注意缩进)
# 示例
age = 18
if age >= 18:
print("你已经成年了!")在上面的示例中,如果age变量的值大于或等于18,则会执行print语句,输出"你已经成年了!"。
if-else语句在条件为真时执行一个代码块,在条件为假时执行另一个代码块。
# if-else语句的基本语法
if 条件:
# 条件为真时执行的代码
else:
# 条件为假时执行的代码
# 示例
score = 85
if score >= 60:
print("恭喜你通过了考试!")
else:
print("很遗憾,你没有通过考试。请继续努力!")在上面的示例中,如果score变量的值大于或等于60,则输出"恭喜你通过了考试!“;否则,输出"很遗憾,你没有通过考试。请继续努力!”。
if-elif-else语句用于检查多个条件,并执行第一个为真的条件对应的代码块。
# if-elif-else语句的基本语法
if 条件1:
# 条件1为真时执行的代码
elif 条件2:
# 条件2为真时执行的代码
elif 条件3:
# 条件3为真时执行的代码
...
else:
# 所有条件都为假时执行的代码
# 示例
grade = 85
if grade >= 90:
print("优秀")
elif grade >= 80:
print("良好")
elif grade >= 70:
print("中等")
elif grade >= 60:
print("及格")
else:
print("不及格")在上面的示例中,根据grade变量的值,程序会输出不同的评级。
条件可以是任何返回布尔值的表达式,包括比较运算符、逻辑运算符等。
# 条件表达式示例
# 比较运算符
a = 10
b = 5
print(a > b) # 输出: True
print(a == b) # 输出: False
# 逻辑运算符
x = 15
print(x > 10 and x < 20) # 输出: True
print(x < 10 or x > 20) # 输出: False
print(not (x > 10)) # 输出: False
# 成员运算符
fruits = ["apple", "banana", "orange"]
print("apple" in fruits) # 输出: True
print("grape" not in fruits) # 输出: True
# 身份运算符
a = [1, 2, 3]
b = a
c = [1, 2, 3]
print(a is b) # 输出: True(a和b指向同一个对象)
print(a is c) # 输出: False(a和c指向不同的对象)
print(a == c) # 输出: True(a和c的值相等)在一个条件语句中可以嵌套另一个条件语句,这样可以处理更复杂的条件判断。
# 嵌套条件语句示例
age = 16
has_id = False
if age >= 18:
print("你已经成年了")
if has_id:
print("并且你有身份证")
else:
print("但你没有身份证")
else:
print("你还未成年")
if age >= 16:
print("但你可以申请身份证了")
else:
print("等你满16岁就可以申请身份证了")在上面的示例中,我们首先检查年龄是否大于或等于18,然后在这个条件语句中又嵌套了另一个条件语句,检查是否有身份证。对于年龄小于18的情况,我们也嵌套了一个条件语句,根据不同的年龄给出不同的提示。
注意:嵌套条件语句容易使代码变得复杂和难以理解,所以应该尽量避免过深的嵌套。如果需要处理非常复杂的条件判断,可以考虑使用函数或其他方法来简化代码。
三元运算符是一种简化的条件表达式,它允许在一行中编写简单的条件语句。
# 三元运算符的基本语法
变量 = 值1 if 条件 else 值2
# 示例
age = 18
status = "成年人" if age >= 18 else "未成年人"
print(status) # 输出: 成年人
# 不使用三元运算符的等价写法
age = 18
if age >= 18:
status = "成年人"
else:
status = "未成年人"
print(status) # 输出: 成年人
# 更复杂的示例
a = 10
b = 20
max_value = a if a > b else b
print(max_value) # 输出: 20三元运算符使代码更加简洁,但只适用于简单的条件判断。对于复杂的条件判断,使用普通的if-else语句会更加清晰。
Python 3.10引入了match-case语句,这是一种新的控制流结构,类似于其他编程语言中的switch-case语句,但功能更加强大。
# match-case语句的基本语法
match 表达式:
case 值1:
# 表达式等于值1时执行的代码
case 值2:
# 表达式等于值2时执行的代码
case 值3 | 值4:
# 表达式等于值3或值4时执行的代码
case _:
# 表达式不匹配任何值时执行的代码(相当于默认情况)
# 简单示例
day = "Monday"
match day:
case "Monday":
print("今天是星期一")
case "Tuesday":
print("今天是星期二")
case "Wednesday":
print("今天是星期三")
case "Thursday":
print("今天是星期四")
case "Friday":
print("今天是星期五")
case "Saturday" | "Sunday":
print("今天是周末")
case _:
print("无效的日期")
# 使用变量绑定
value = 42
match value:
case 0:
print("值为0")
case 1 | 2 | 3:
print("值为1、2或3")
case int(x) if x > 10:
print(f"值是大于10的整数: {x}")
case float(x):
print(f"值是浮点数: {x}")
case _:
print("值的类型未知")
# 使用结构模式匹配
data = [1, 2, 3]
match data:
case [1, *rest]:
print(f"以1开头的列表,其余元素为: {rest}")
case [x, y, z]:
print(f"包含三个元素的列表: {x}, {y}, {z}")
case _:
print("其他类型的列表")match-case语句提供了一种更灵活、更强大的方式来处理多条件判断,特别是在需要根据表达式的结构进行匹配时。
循环语句用于重复执行一段代码。Python中的循环语句主要包括while循环和for循环。
while循环在条件为真时重复执行代码块。
# while循环的基本语法
while 条件:
# 条件为真时重复执行的代码
# 示例:打印1到5的数字
count = 1
while count <= 5:
print(count)
count += 1 # 不要忘记更新计数器,否则会导致无限循环
# 输出:
# 1
# 2
# 3
# 4
# 5在上面的示例中,我们使用while循环打印了1到5的数字。在每次循环中,我们先打印count变量的值,然后将count变量的值加1。当count变量的值大于5时,循环条件变为假,循环结束。
如果while循环的条件永远为真,那么循环将永远执行下去,这就是无限循环。在某些情况下,我们可能需要使用无限循环,但通常需要提供一种跳出循环的方式。
# 无限循环示例
# 这个循环会一直执行,除非用户输入'quit'
while True:
user_input = input("请输入一些文本(输入'quit'退出): ")
if user_input.lower() == 'quit':
break # 使用break语句跳出循环
print(f"你输入的是: {user_input}")在上面的示例中,我们创建了一个无限循环,但提供了一种跳出循环的方式:当用户输入’quit’时,使用break语句跳出循环。
while循环适用于以下场景:
# while循环的应用场景示例
# 场景1:猜数字游戏
import random
target_number = random.randint(1, 100) # 生成1到100之间的随机数
attempts = 0
print("欢迎来到猜数字游戏!我已经想好了一个1到100之间的数字。")
while True:
guess = int(input("请输入你的猜测: "))
attempts += 1
if guess < target_number:
print("太小了!再试一次。")
elif guess > target_number:
print("太大了!再试一次。")
else:
print(f"恭喜你猜对了!答案是{target_number}。你用了{attempts}次尝试。")
break
# 场景2:处理用户输入直到用户选择退出
option = 0
while option != 4:
print("\n请选择一个选项:")
print("1. 查看个人信息")
print("2. 修改个人信息")
print("3. 保存更改")
print("4. 退出")
option = int(input("请输入选项编号: "))
if option == 1:
print("查看个人信息...")
elif option == 2:
print("修改个人信息...")
elif option == 3:
print("保存更改...")
elif option == 4:
print("退出程序...")
else:
print("无效的选项,请重试。")for循环用于遍历序列(如列表、元组、字符串)或其他可迭代对象中的元素。
# for循环的基本语法
for 变量 in 可迭代对象:
# 对每个元素执行的代码
# 示例1:遍历列表
fruits = ["apple", "banana", "orange", "grape"]
for fruit in fruits:
print(fruit)
# 输出:
# apple
# banana
# orange
# grape
# 示例2:遍历字符串
word = "Python"
for char in word:
print(char)
# 输出:
# P
# y
# t
# h
# o
# n
# 示例3:使用range()函数
for i in range(5): # range(5)生成0到4的数字序列
print(i)
# 输出:
# 0
# 1
# 2
# 3
# 4
# 示例4:range()函数的高级用法
for i in range(2, 10, 2): # 从2开始,到10结束(不包含10),步长为2
print(i)
# 输出:
# 2
# 4
# 6
# 8range()函数是Python内置的用于生成整数序列的函数,常用于for循环中。它有三种用法:
range(stop):生成从0到stop-1的整数序列range(start, stop):生成从start到stop-1的整数序列range(start, stop, step):生成从start到stop-1的整数序列,步长为step# range()函数的详细用法
# 用法1:range(stop)
for i in range(5):
print(i, end=" ") # 输出: 0 1 2 3 4
print()
# 用法2:range(start, stop)
for i in range(2, 8):
print(i, end=" ") # 输出: 2 3 4 5 6 7
print()
# 用法3:range(start, stop, step)
for i in range(1, 10, 2):
print(i, end=" ") # 输出: 1 3 5 7 9
print()
# 负步长
for i in range(10, 0, -1):
print(i, end=" ") # 输出: 10 9 8 7 6 5 4 3 2 1
print()我们可以使用for循环遍历字典的键、值或键值对:
# 遍历字典
person = {"name": "Alice", "age": 25, "city": "New York"}
# 遍历字典的键(默认)
print("字典的键:")
for key in person:
print(key)
# 输出:
# 字典的键:
# name
# age
# city
# 明确遍历字典的键
print("\n字典的键:")
for key in person.keys():
print(key)
# 遍历字典的值
print("\n字典的值:")
for value in person.values():
print(value)
# 输出:
# 字典的值:
# Alice
# 25
# New York
# 遍历字典的键值对
print("\n字典的键值对:")
for key, value in person.items():
print(f"{key}: {value}")
# 输出:
# 字典的键值对:
# name: Alice
# age: 25
# city: New Yorkfor循环适用于以下场景:
# for循环的应用场景示例
# 场景1:计算列表中所有元素的和
numbers = [1, 2, 3, 4, 5]
sum_numbers = 0
for num in numbers:
sum_numbers += num
print(f"列表中所有元素的和为: {sum_numbers}") # 输出: 列表中所有元素的和为: 15
# 场景2:找出列表中的最大值
numbers = [3, 8, 1, 6, 2, 9, 4, 7, 5]
max_number = numbers[0]
for num in numbers[1:]:
if num > max_number:
max_number = num
print(f"列表中的最大值为: {max_number}") # 输出: 列表中的最大值为: 9
# 场景3:统计字符串中每个字符出现的次数
word = "programming"
char_count = {}
for char in word:
if char in char_count:
char_count[char] += 1
else:
char_count[char] = 1
print("字符串中每个字符出现的次数:")
for char, count in char_count.items():
print(f"{char}: {count}")
# 输出:
# 字符串中每个字符出现的次数:
# p: 1
# r: 2
# o: 1
# g: 2
# a: 1
# m: 2
# i: 1
# n: 1Python提供了break、continue和else语句,用于在循环中控制程序的执行流程。
break语句用于立即终止当前循环,跳出循环体。
# break语句示例
# 找出100以内的第一个能被7整除的数
for i in range(1, 101):
if i % 7 == 0:
print(f"100以内的第一个能被7整除的数是: {i}")
break # 找到后立即跳出循环
# 输出: 100以内的第一个能被7整除的数是: 7
# 在嵌套循环中使用break(只跳出当前循环)
for i in range(1, 4):
print(f"外层循环: {i}")
for j in range(1, 4):
if j == 2:
break # 只跳出内层循环
print(f" 内层循环: {j}")
# 输出:
# 外层循环: 1
# 内层循环: 1
# 外层循环: 2
# 内层循环: 1
# 外层循环: 3
# 内层循环: 1continue语句用于跳过当前循环中的剩余代码,直接开始下一次循环。
# continue语句示例
# 打印1到10之间的所有奇数
for i in range(1, 11):
if i % 2 == 0:
continue # 跳过偶数
print(i, end=" ")
# 输出: 1 3 5 7 9
# 计算1到100之间所有能被3整除但不能被5整除的数的和
sum_numbers = 0
for i in range(1, 101):
if i % 5 == 0:
continue # 跳过能被5整除的数
if i % 3 == 0:
sum_numbers += i
print(f"1到100之间所有能被3整除但不能被5整除的数的和为: {sum_numbers}") # 输出: 1到100之间所有能被3整除但不能被5整除的数的和为: 1368Python允许在循环后使用else语句,当循环正常结束时(即没有被break语句终止),会执行else语句块。
# 循环中的else语句示例
# 示例1:查找元素
fruits = ["apple", "banana", "orange", "grape"]
search_fruit = "watermelon"
for fruit in fruits:
if fruit == search_fruit:
print(f"找到了{search_fruit}!")
break
else:
print(f"没有找到{search_fruit}。")
# 输出: 没有找到watermelon。
# 示例2:判断是否为质数
number = 17
is_prime = True
if number <= 1:
is_prime = False
else:
for i in range(2, int(number ** 0.5) + 1):
if number % i == 0:
is_prime = False
break
if is_prime:
print(f"{number}是质数")
else:
print(f"{number}不是质数")
# 输出: 17是质数
# 使用else语句简化质数判断
number = 17
if number <= 1:
print(f"{number}不是质数")
else:
for i in range(2, int(number ** 0.5) + 1):
if number % i == 0:
print(f"{number}不是质数")
break
else:
print(f"{number}是质数")
# 输出: 17是质数一个循环内部可以包含另一个循环,这就是嵌套循环。嵌套循环常用于处理多维数据结构,如二维列表。
# 嵌套循环示例
# 示例1:打印乘法表
print("九九乘法表:")
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j} × {i} = {i * j}", end="\t")
print() # 换行
# 输出:
# 九九乘法表:
# 1 × 1 = 1
# 1 × 2 = 2 2 × 2 = 4
# 1 × 3 = 3 2 × 3 = 6 3 × 3 = 9
# ...
# 1 × 9 = 9 2 × 9 = 18 ... 9 × 9 = 81
# 示例2:生成二维列表
# 创建一个3x3的矩阵,初始值为0
matrix = []
for i in range(3):
row = []
for j in range(3):
row.append(0)
matrix.append(row)
print("初始矩阵:")
for row in matrix:
print(row)
# 输出:
# 初始矩阵:
# [0, 0, 0]
# [0, 0, 0]
# [0, 0, 0]
# 修改矩阵的值,使其成为单位矩阵
for i in range(3):
for j in range(3):
if i == j:
matrix[i][j] = 1
print("\n单位矩阵:")
for row in matrix:
print(row)
# 输出:
# 单位矩阵:
# [1, 0, 0]
# [0, 1, 0]
# [0, 0, 1]
# 示例3:遍历二维列表
numbers = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print("二维列表中的所有元素:")
for row in numbers:
for num in row:
print(num, end=" ")
print() # 换行
# 输出:
# 二维列表中的所有元素:
# 1 2 3
# 4 5 6
# 7 8 9 现在,让我们通过几个综合应用示例来巩固所学的控制流语句知识。
# 猜数字游戏
import random
def guess_number_game():
print("欢迎来到猜数字游戏!")
print("我已经想好了一个1到100之间的数字。")
print("你有5次机会来猜测这个数字。")
target_number = random.randint(1, 100)
attempts = 0
max_attempts = 5
while attempts < max_attempts:
attempts += 1
try:
guess = int(input(f"第{attempts}次猜测,请输入一个1到100之间的数字: "))
if guess < 1 or guess > 100:
print("请输入1到100之间的数字!")
continue
if guess < target_number:
print("太小了!")
elif guess > target_number:
print("太大了!")
else:
print(f"恭喜你猜对了!答案是{target_number}。")
print(f"你用了{attempts}次尝试。")
break
except ValueError:
print("请输入有效的数字!")
else:
print(f"很遗憾,你没有在{max_attempts}次尝试内猜对。")
print(f"正确的数字是{target_number}。")
play_again = input("是否再玩一次?(y/n): ")
if play_again.lower() == 'y':
guess_number_game()
else:
print("谢谢你玩猜数字游戏!再见!")
# 启动游戏
guess_number_game()# 简单计算器
def simple_calculator():
print("欢迎使用简单计算器!")
print("支持的操作: +, -, *, /, %")
while True:
try:
# 获取用户输入
num1 = float(input("请输入第一个数字: "))
operator = input("请输入运算符(+, -, *, /, %): ")
num2 = float(input("请输入第二个数字: "))
# 执行计算
if operator == '+':
result = num1 + num2
elif operator == '-':
result = num1 - num2
elif operator == '*':
result = num1 * num2
elif operator == '/':
if num2 == 0:
print("错误:除数不能为零!")
continue
result = num1 / num2
elif operator == '%':
if num2 == 0:
print("错误:除数不能为零!")
continue
result = num1 % num2
else:
print("错误:不支持的运算符!")
continue
# 显示结果
print(f"{num1} {operator} {num2} = {result}")
# 询问是否继续
continue_calculation = input("是否继续计算?(y/n): ")
if continue_calculation.lower() != 'y':
print("谢谢你使用简单计算器!再见!")
break
except ValueError:
print("错误:请输入有效的数字!")
# 启动计算器
simple_calculator()要点 | 描述 |
|---|---|
价值 | 掌握Python的控制流语句,使程序能够根据不同情况做出决策和重复执行任务 |
行动 | 学习Python的函数和模块,将代码组织成更结构化、可重用的形式 |
恭喜你完成了Python控制流语句的学习!通过本教程,你已经了解了Python的条件语句(if-elif-else、嵌套条件语句、三元运算符、match-case语句)和循环语句(while循环、for循环、嵌套循环),以及如何在循环中使用break、continue和else语句。
控制流语句是Python编程的核心,它们使你的程序能够根据不同的条件做出不同的决策,或者重复执行某些任务。掌握好控制流语句,你就能够编写更加复杂和实用的Python程序。
在下一篇教程中,我们将学习Python的函数和模块,这将帮助你将代码组织成更加结构化、可重用的形式,提高代码的可读性和维护性。
记住,编程是一门需要实践的技能,所以请务必多写代码、多做练习,巩固所学的知识!
来源 | 描述 |
|---|---|
Python官方文档 | 提供权威的Python控制流语句说明 |
菜鸟教程 | 适合初学者的Python控制流语句教程 |
W3School | 提供Python控制流语句的详细讲解和实例 |