Python学习:流程控制
关于流程控制
Python 同样提供了现代编程语言都支持的两种基本流程控制结构,分支结构和循环结构:
- 分支结构用于实现根据条件来选择性地执行某段代码;
- 循环结构用于实现根据循环条件重复执行某段代码;
Python使用if
语句提供分支支持,提供了while
、for-in
循环,也提供了break
和continue
控制程序的循环结构。
在学习流程控制前,需要了解布尔、比较操作符等知识。
布尔值
虽然整型、浮点型和字符串数据类型有无数种可能的值,但“布尔”数据类型只有两种值:True
和False
。Boolean(布尔)的首字母大写, 因为这个数据类型是根据数学家George Boole命名的。在作为Python代码输入时,布尔值True
和False
不像字符串,两边没有引号,它们总是以大写字母T或F开头, 后面的字母小写。
例如:
1 | 2==2 |
比较操作符
比较操作符比较两个值,求值为一个布尔值。
以下是操作符及其含义,这些操作符根据给它们提供的值,求值为True
或False
。
操作符 | 含义 |
---|---|
== | 等于 |
!= | 不等于 |
< | 小于 |
> | 大于 |
<= | 小于等于 |
>= | 大于等于 |
Tips:整型或浮点型的值永远不会与字符串相等。
<
、>
、<=
和>=
操作符仅用于整型和浮点型值。
例如:
1 | 33 == 33 |
布尔操作符
3 个布尔操作符(and
、or
和not
)用于比较布尔值。
二元布尔操作符
and
和or
操作符总是接受两个布尔值(或表达式),所以它们被认为是二元操作符。如果两个布尔值都为True
,and
操作符就将表达式求值为True
,否则求值
为False
。
操作符and
的真值表
表达式 | 求值为 |
---|---|
True and True | True |
True and False | False |
False and True | False |
False and False | False |
or
操作符的真值表
表达式 | 求值为 |
---|---|
True or True | True |
True or False | True |
False or True | True |
False or False | False |
not操作符
not
操作符只作用于一个布尔值(或表达式)。not
操作符求值为相反的布尔值。
not
操作符的真值表
表达式 | 求值为 |
---|---|
not True | False |
not False | True |
混合布尔和比较操作符
既然比较操作符求值为布尔值,就可以和布尔操作符一起,在表达式中使用。
例如:
1 | 2 < 3) and (22 > 1) ( |
Tips:和算术操作符一样,布尔操作符也有操作顺序。在所有算术和比较操作符求值后,Python先求值
not
操作符,然后是and
操作符,然后是or
操作符。
控制流的元素
控制流语句的开始部分通常是条件,接下来是一个代码块,称为子句。
条件
你前面看到的布尔表达式可以看成是条件,它和表达式是一回事。条件只是在控制流语句的上下文中更具体的名称。条件总是求值为一个布尔值,True
或False
。控制流语句根据条件是 True 还是 False,来决定做什么。 几乎所有的控制流语句都使用条件。
代码块
一些代码行可以作为一组, 放在代码块 中。 可以根据代码行的缩进,知道代码块的开始和结束。代码块有 3 条规则:
- 缩进增加时, 代码块开始;
- 代码块可以包含其他代码块;
- 缩进减少为零,或减少为外面包围代码块的缩进,代码块就结束了;
if语句
选择(条件)语句可细分为3种形式,分别是if
语句、if-else
语句和if-elif-else
语句。
if语句
1 | if 条件表达式: |
if-else语句
1 | if 表达式: |
if-elif-else语句
1 | if 表达式 1: |
练习
英制单位英寸与公制单位厘米互换
1 | value = float(input('请输入长度: ')) |
百分制成绩转换为等级制成绩。
要求:如果输入的成绩在90分以上(含90分)输出A;80分-90分(不含90分)输出B;70分-80分(不含80分)输出C;60分-70分(不含70分)输出D;60分以下输出E。
1 | score = float(input('请输入成绩: ')) |
while语句
利用while
语句,可以让一个代码块一遍又一遍的执行。只要while
语句的条件为True
,while
子句中的代码就会执行。在代码中,while
语句总是包含下面几部分:
- 关键字;
- 条件(求值为
True
或False
的表达式); - 冒号;
- 从新行开始,缩进的代码块(称为
while
子句)。
语法格式
语法格式如下:
1 | while 条件表达式: |
在while
循环中,条件总是在每次迭代开始时检查(也就是每次循环执行时)。如果条件为True
, 子句就会执行,然后,再次检查条件。当条件第一次为False
时,while
子句就跳过。
例如:
1 | spam = 0 |
练习
猜数字游戏
1 | import random |
for语句
在条件为True
时,while
循环就会继续循环(这是它的名称的由来)。但如果你想让一个代码块执行固定次数,该怎么办?可以通过for
循环语句和range()
函数来实现。
常用于遍历字符串、列表、元组、字典、集合等序列类型,逐个获取序列中的各个元素。
语法格式
语法格式如下:
1 | for 迭代变量 in 字符串|列表|元组|字典|集合: |
在使用for
循环时,最基本的应用就是进行数值循环。比如说,想要实现从1到100的累加,可以执行如下代码:
1 | print("计算 1+2+...+100 的结果为:") |
运行结果如下:
1 | 计算 1+2+...+100 的结果为: |
Tips:
range(101)
可以用来产生0到100范围的整数,需要注意的是取不到101。
练习
1~100之间的偶数求和
1 | sum = 0 |
输入一个正整数判断它是不是素数
1 | from math import sqrt |
break语句
有一个捷径,让执行提前跳出while
循环子句。如果执行遇到break
语句,就会马上退出while
循环子句。在代码中,break
语句仅包含break
关键字。break
用于完全结束一个循环,跳出循环体。不管是哪种循环,一旦在循环体中遇到break
,系统就将完全结束该循环,开始执行循环之后的代码。
例如:
1 | for i in range(0, 10) : |
运行的结果为:
1 | i的值是: 0 |
continue语句
和break
语句相比,continue
语句的作用则没有那么强大,它只能终止本次循环而继续执行下一次循环。
例如:
1 | for i in range(0, 3 ) : |
运行结果如下:
1 | i的值是: 0 |