修订历史:
- 2024-09-23 初稿
- 主页链接:hydro.ac/d/datawhale…
本节我们将介绍第一个控制结构语句 if。它允许你根据特定条件来选择性地执行代码块。
1 基本语法
Python 中 if 语句常见形式有:
1.1 if语句
if <expr>:
<statement>
<statement>
...
<following statement>
1.2 if...else 语句
if <expr>:
<statement(s)>
else:
<statement(s)>
1.3 if...elif...else 语句
if <expr>:
<statement(s)>
elif <expr>:
<statement(s)>
elif <expr>:
<statement(s)>
...
else:
<statement(s)>
1.3.1 示例
题目
请编写一个程序,提示用户输入一个分数,并将分数转换为一个字母等级(A、B、C),并在屏幕上输出相应的消息,当分数超出正常范围(<0||>100)时,应输出error
| 字母等级 | 分数区间 |
|---|---|
| A | 80~100 |
| B | 60~79 |
| C | 0~59 |
实现
# 获取用户输入并转换为整数
x1 = int(input())
# 检查输入是否在0到100之间,如果不在这个范围内则输出错误信息
if x1 < 0 or x1 > 100:
print("error")
# 如果分数在80到100之间,则输出等级A
elif x1 >= 80:
print("A")
# 如果分数在60到79之间,则输出等级B
elif x1 >= 60:
print("B")
# 如果分数在0到59之间,则输出等级C
else:
print("C")
1.4 三元表达式条件语句 (Ternary Operator)
<expr1> if <conditional_expr> else <expr2>
在条件表达式中,首先评估条件表达式(<conditional_expr>),如果为真,则整个表达式的结果为<expr1>,如果为假,则结果为<expr2>。
示例
>>> age = 13
>>> s = 'children' if age < 18 else 'adult'
'children'
>>> x = 35
>>> y = 20
>>> z = 3 + (x if x > y else y) + 2
40
2 if语句进一步思考
2.1 match...case 语句
在 Python 3.10 版本中,增加了 match...case 语句。
match keyword:
case <pattern_1>:
<action_1>
case <pattern_2>:
<action_2>
case <pattern_3>:
<action_3>
case _:
<action_wildcard>
在match...case语句中,match关键字后面跟着一个表达式,而case后面跟着一个或多个模式,以及与这些模式相对应的代码块。如果表达式的值与某个模式匹配,那么执行该模式后面的代码块。
接下来我们使用 match...case 将 1.3 节的示例代码进行改写。
# 获取用户输入并转换为整数
x1 = int(input())
match x1:
case x if x < 0 or x > 100:
print("error")
case x if x >=80:
print("A")
case x if x >=60:
print("B")
case _:
print("C")
2.2 不同编程语言三元条件语句的区别和联系
Python 中的条件表达式与其它编程语言(如C、Java 和matlab)中的条件表达式语法的相似性。具体来说:
三元条件表达式
- Python的条件表达式与其它语言中的
<conditional_expr> ? <expr1> : <expr2>语法类似。这种语法在C、Perl和Java等语言中被广泛使用。 - 在这些语言中,
?:操作符通常被称为三元操作符(ternary operator),这可能是为什么Python的条件表达式有时也被称为Python三元操作符的原因。 - 在PEP 308中提到,Python在设计时曾考虑过采用
<conditional_expr> ? <expr1> : <expr2>这种语法,但最终为了保持Python的语法简洁性和一致性,选择了现有的条件表达式语法。
2.3 代码块定义方式对比
在定义代码块方面,Python 采用了独特的缩进规则(也称为off-side rule),而大多数其他编程语言则依赖于特定的标记来标识代码块的起始与结束。关于这两种方法的优劣,不同程序员可能会有各自的见解。
Python缩进规则的优点
- 清晰性与简洁性:Python通过缩进区分代码块,使得代码结构更加清晰、简洁,保持了视觉上的一致性。
- 减少误解:在非缩进规则的编程语言中,代码的视觉缩进可能与实际逻辑结构不符,可能导致误解。而在Python中,这种不一致性几乎不会出现。
- 强制规范:缩进规则强制程序员遵循一定的代码格式标准,这有助于维护代码的可读性和规范性。
其他编程语言使用特殊标记的优点
- 灵活性:一些程序员偏好自由地表达自己的编程风格,不喜欢被特定的规则所限制。
- 编辑器兼容性:在某些编辑器中,混合使用空格和制表符可能导致缩进混乱,影响Python解释器的缩进级别判断。尽管可以通过配置编辑器来避免这一问题,但使用特殊标记定义代码块的语言通常不受此类问题困扰。 综上所述,不同的代码块定义方式各有千秋,选择哪种方式更多取决于个人偏好和项目需求。