if
语句(基本判断语句)
1. 语法格式
if 条件:
# 当条件为 True 时执行此代码块
语句1
语句2
说明
if
语句会首先判断条件表达式是否为True
。if
后跟一个条件表达式,该条件可以是任意能返回布尔值(True
或False
)的表达式。- 如果条件为
True
,则执行if
语句后缩进的代码块。 - 如果条件为
False
,则跳过该代码块,继续执行后面的代码。
示例:判断一个数是否在一个区间内
x = 10
y = 5
if x > 5 and y < 10:
print("x 大于 5 且 y 小于 10")
#会输出:x 大于 5 且 y 小于 10
if-else
语句(带有 else
分支)
1. 语法格式
if 条件:
# 当条件为 True 时执行的代码块
语句1
语句2
else:
# 当条件为 False 时执行的代码块
语句3
语句4
if
后跟一个条件表达式。如果该条件为True
,则执行if
语句中的代码块。else
后跟的代码块在条件为False
时执行。else
语句是可选的,但它通常用来提供默认的代码块,当条件为False
时执行。
示例:判断一个数字是奇数还是偶数
# 获取用户输入的数字
num = int(input("请输入一个整数:"))
# 判断数字是奇数还是偶数
if num % 2 == 0:
print(f"{num} 是偶数")
else:
print(f"{num} 是奇数")
num % 2 == 0
用来判断一个数是否为偶数。%
是求余运算符,如果一个数除以 2 的余数是 0,那么这个数就是偶数。- 如果
num
是偶数,程序会输出"是偶数"
。 - 如果
num
不是偶数(即为奇数),程序会输出"是奇数"
。
if-elif-else
语句(多条件分支)
1. 语法格式
if 条件1:
# 条件1为True时执行的代码块
语句1
elif 条件2:
# 条件2为True时执行的代码块
语句2
elif 条件3:
# 条件3为True时执行的代码块
语句3
else:
# 如果所有条件都为False时执行的代码块
语句4
if
:首先检查条件1
,如果条件1
为True
,则执行if
语句中的代码块。if
语句后的条件是必需的。elif
(可选):表示 “else if”,如果上一个条件为False
,会继续检查elif
后面的条件。可以有多个elif
语句。else
(可选):表示在所有条件都为False
时执行的代码块。else
语句是最后的备选项,只在前面所有条件都不成立时执行。
示例 :根据分数判断等级
我们可以根据学生的分数来判断他们的成绩等级,使用 if-elif-else
语句来处理。
score = int(input("请输入你的分数:"))
if score >= 90:
print("成绩等级:A")
elif score >= 80:
print("成绩等级:B")
elif score >= 70:
print("成绩等级:C")
elif score >= 60:
print("成绩等级:D")
else:
print("成绩等级:F")
解释:
score >= 90
:如果分数大于等于 90,执行第一条语句,输出成绩等级A
。- 如果分数小于 90,但大于等于 80,执行第二条
elif
,输出成绩等级B
。 - 如果分数小于 80,但大于等于 70,执行第三条
elif
,输出成绩等级C
。 - 如果分数小于 70,但大于等于 60,执行第四条
elif
,输出成绩等级D
。 - 如果以上条件都不成立(即分数小于 60),执行
else
,输出成绩等级F
。
三元运算符(条件表达式)
1. 语法格式
三元运算符的语法格式如下:
x if 条件 else y
x
:当条件为True
时返回的值。y
:当条件为False
时返回的值。
2. 三元运算符的嵌套使用
Python 中的三元运算符可以嵌套使用,即一个 if-else
语句的 x
或 y
部分也可以是另一个三元运算符。这让我们能够处理多重条件,但需要注意的是,嵌套过多可能影响代码的可读性。
num = int(input("请输入一个数字:"))
# 使用嵌套三元运算符判断区间
result = "大于100" if num > 100 else "大于50" if num > 50 else "小于等于50"
print(f"{num} 是 {result}")
解释:
- 首先判断
num > 100
,如果为True
,则返回"大于100"
。 - 如果
num <= 100
,则继续判断num > 50
,如果为True
,返回"大于50"
。 - 如果两个条件都不满足(即
num <= 50
),返回"小于等于50"
。
示例:判断一个数字是奇数还是偶数
num = int(input("请输入一个数字:"))
# 使用三元运算符判断奇偶
result = "偶数" if num % 2 == 0 else "奇数"
print(f"{num} 是 {result}")
解释:
num % 2 == 0
是条件,它判断num
是否能被 2 整除,即是否是偶数。- 如果条件
num % 2 == 0
为True
(即num
是偶数),则result
被赋值为"偶数"
。 - 如果条件为
False
(即num
是奇数),则result
被赋值为"奇数"
。
match-case
语句(Python 3.10+)
Python 3.10 引入了一个新的控制流结构:match-case
。它类似于其他编程语言中的 switch-case
语句,但更加灵活和强大。match-case
可以对一个表达式的值进行模式匹配,并根据匹配的情况执行不同的代码块。
这种语法可以用于处理更复杂的匹配逻辑,而不仅仅是简单的常量比较,因此它比传统的 if-elif-else
语句更加直观和高效。
1. 语法格式
match expression:
case pattern1:
# 如果 expression 匹配 pattern1,执行这里的代码
case pattern2:
# 如果 expression 匹配 pattern2,执行这里的代码
case _:
# 如果没有匹配任何模式,执行这里的代码
expression
:这是我们要进行匹配的表达式,它的值会被与各个case
模式进行比较。case
:表示每个模式,每个case
后面可以有一个或多个模式。_
(下划线) :它是一个通配符,用来匹配任何值,相当于else
语句。如果没有匹配到其他模式,case _
会被执行。
2. 匹配元组
def describe_point(point):
match point:
case (0, 0):
return "原点"
case (0, y):
return f"y轴上的点,y={y}"
case (x, 0):
return f"x轴上的点,x={x}"
case (x, y):
return f"点({x}, {y})"
case _:
return "未知点"
print(describe_point((0, 0))) # 输出: 原点
print(describe_point((3, 0))) # 输出: x轴上的点,x=3
print(describe_point((0, 5))) # 输出: y轴上的点,y=5
print(describe_point((4, 5))) # 输出: 点(4, 5)
解释:
- 我们在
match
语句中传入一个元组point
。 case (0, 0)
用于匹配原点(0, 0)
,如果匹配成功,返回"原点"
。case (0, y)
和case (x, 0)
用于匹配分别位于 y 轴和 x 轴上的点。y
和x
会捕获元组中的值。- 如果没有匹配到上述的情况,
case _
会匹配任何其他的点。
3. 匹配列表
def match_list(lst):
match lst:
case []:
return "空列表"
case [first, second]:
return f"列表有两个元素: {first}, {second}"
case [first, *rest]:
return f"第一个元素是 {first}, 其余元素是 {rest}"
case _:
return "其他情况"print(match_list([]))
解释:
[]
:匹配空列表。[first, second]
:匹配只有两个元素的列表。[first, *rest]
:first
绑定列表第一个元素,rest
绑定剩余元素。
4. 匹配字典
match-case
语句也可以用于匹配字典中的特定键值对:
def describe_person(person):
match person:
case {"name": name, "age": age}:
return f"姓名: {name}, 年龄: {age}"
case {"name": name}:
return f"姓名: {name}, 年龄未知"
case _:
return "未知人员"
# 测试
print(describe_person({"name": "Alice", "age": 30})) # 输出: 姓名: Alice, 年龄: 30
print(describe_person({"name": "Bob"})) # 输出: 姓名: Bob, 年龄未知
print(describe_person({"nickname": "Charlie"})) # 输出: 未知人员
解释:
- 使用
case {"name": name, "age": age}
,我们匹配一个字典,字典中有name
和age
这两个键。如果匹配成功,name
和age
会分别获取相应的值。 - 如果字典只有
name
键,case {"name": name}
会匹配到并返回"姓名: {name}, 年龄未知"
。 - 如果字典不包含这些键,
case _
会匹配到并返回"未知人员"
。
5. 匹配类
match-case
可以通过模式匹配类实例,提取对象的属性。这让我们可以更方便地操作面向对象编程中的对象。
class Animal:
def __init__(self, name):
self.name = name
class Dog(Animal):
def __init__(self, name, breed):
super().__init__(name)
self.breed = breed
class Cat(Animal):
def __init__(self, name, color):
super().__init__(name)
self.color = color
def describe_animal(animal):
match animal:
case Dog(name, breed):
return f"狗的名字是 {name}, 品种是 {breed}"
case Cat(name, color):
return f"猫的名字是 {name}, 颜色是 {color}"
case Animal(name):
return f"动物的名字是 {name}"
case _:
return "未知动物"
# 测试
dog = Dog("Rex", "Golden Retriever")
cat = Cat("Whiskers", "White")
print(describe_animal(dog)) # 输出: 狗的名字是 Rex, 品种是 Golden Retriever
print(describe_animal(cat)) # 输出: 猫的名字是 Whiskers, 颜色是 White
解释:
- 我们定义了
Dog
和Cat
类,它们继承自Animal
类,并添加了各自特有的属性。 - 在
describe_animal
函数中,通过match
来根据对象的类型进行匹配。Dog(name, breed)
和Cat(name, color)
会从对象中提取属性。 - 如果
animal
是Dog
类型的实例,就匹配并返回狗的信息;如果是Cat
类型的实例,就返回猫的信息;如果是其他类型的Animal
实例,则返回通用的动物信息。
示例:加减乘除的计算
a = float(input("输入第一个数"))
b = float(input("输入第二个数"))
c = input("输入一个运算符(+,-,*,/)")
match c:
case '+':
print(f"{a}+{b}={a+b}")
case '-':
print(f"{a}-{b}={a-b}")
case '*':
print(f"{a}*{b}={a*b}")
case '/':
print(f"{a}/{b}={a/b}")
case _:
print("无效的运算符")
解释:
- 通过匹配
c
的值来输出对应的语句 -
:来过滤输入的其他运算符