控制语句
我们在前面学习的过程中,都是很短的示例代码,没有进行复杂的操作。现在,我们将开始学习流程控制语句。 前面学习的变量、数据类型(整数、浮点数、布尔)、序列(字符串、列表、元组、字 典、集合),可以看做是数据的组织方式。数据可以看做是"砖块"! 流程控制语句是代码的组织方式,可以看做是"混凝土"。
一个完整的程序,离不开"砖块",也离不开"混凝土"。他们的组合,才能让我们建立从小到"一个方法",大到"操作系统",这样各种各样的"软件"。
一、选择结构
选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分 支、双分支、多分支。
1.单分支选择结构
if 语句单分支结构的语法形式如下:
if 条件表达式:
语句/语句块
其中:
条件表达式:可以是逻辑表达式、关系表达式、算术表达式等等。
语句/语句块:可以是一条语句,也可以是多条语句。多条语句,缩进必须对齐一致。
python
num =input("输入一个数字:")
if int(num)<10:
print(num)
条件表达式详解
在选择和循环结构中,条件表达式的值为False的情况如下:
False、0、0.0、空值None、空序列对象(空列表、空元祖、空集合、空字典、空字 符串)、空range对象、空迭代对象。
其他情况,均为True。
·条件表达式中,不能有赋值操作符"="
2.双分支选择结构
双分支结构的语法格式如下:
if 条件表达式 :
语句1/语句块1
else:
语句2/语句块2
三元条件运算符
Python 提供了三元运算符,用来在某些简单双分支赋值情况。三元条件运算符语法格式如 下:
条件为真时的值 if (条件表达式) else 条件为假时的值
python
num =input("请输入一个数字")
print( num if int(num)<10 else "数字太大")
3.多分支选择结构
多分支选择结构的语法格式如下:
if 条件表达式1:
语句1/语句块1
elif 条件表达式2:
语句2/语句块2
. . .
elif 条件表达式n:
语句n/语句块n
[else:
语句n+1/语句块n+1
]
二、循环结构
循环结构用来重复执行一条或多条语句。表达这样的逻辑:如果符合条件,则反复执行循环体里的语句。在每次执行完后都会判断一次条件是否为True,如果 为True则重复执行循环体里的语句。图示如下:
1.while 循环
例:利用while循环,计算1-100之间数字的累加和;计算1-100之间偶数的累加和, 计算1-100之间奇数的累加和。
python
i = 0
sum = 0
sum_o = 0
sum_e = 0
while i <= 100:
sum = sum + i
if i % 2 == 1:
sum_e = i + sum_e
else:
sum_o = sum_o + i
i = i + 1
print(sum)
print(sum_e)
print(sum_o)
# 5050
# 2500
# 2550
2.for 循环和可迭代对象遍历
for 循环通常用于可迭代对象的遍历。for循环的语法格式如下:
for 变量 in 可迭代对象:
循环体语句
遍历一个元组或列表:
python
for x in (20,30,40):
print(x*3)
可迭代对象
Python 包含以下几种可迭代对象:
-
序列。包含:字符串、列表、元组
-
字典
-
迭代器对象(iterator)
-
生成器函数(generator)
-
文件对象
遍历字符串中的字符:
python
for i in 'love you':
print(i)
遍历字典
python
d ={'name':'gaoqi','age':18,'address':'西三旗 001 号楼'}
for x in d: #遍历字典所有的key
print(x)
for x in d.keys():#遍历字典所有的key
print(x)
for x in d.items():#遍历字典所有的"键值对"
print(x)
for x in d.values():#遍历字典所有的value
print(x)
①range 对象
range 对象是一个迭代器对象,用来产生指定范围的数字序列。格式为:
range(start, end [,step])
生成的数值序列从start开始到end结束(不包含end)。若没有填写start,则默认从0 开始。step是可选的步长,默认为1。如下是几种典型示例:
for i in range(10) 产生序列:0123456789
for i in range(3,10)产生序列:3456789
for i in range(3,10,2) 产生序列:3 5 7 9
例1.计算累加和
利用for循环,计算1-100之间数字的累加和;计算1-100之间偶数的累加和, 计算1-100之间奇数的累加和。
python
sum = 0
sum_e = 0
sum_o = 0
for i in range(1,101):
sum = sum + i
i = i + 1
for i in range(1,101,2):
sum_e = sum_e + i
i = i + 1
for i in range(2,101,2):
sum_o = sum_o + i
i = i + 1
print(sum)
print(sum_e)
print(sum_o)
# 5050
# 2500
# 2550
②嵌套循环和综合练习
一个循环体内可以嵌入另一个循环,一般称为"嵌套循环",或者"多重循环"。
例1.打印如下图案
python
for i in range(5):
for j in range(5):
print(i,end = '\t')
print( ) #仅用于换行
例2.打印九九乘法表
python
for i in range(1,10):
for j in range(1,i+1):
print(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 * 4 = 4 2 * 4 = 8 3 * 4 = 12 4 * 4 = 16
# 1 * 5 = 5 2 * 5 = 10 3 * 5 = 15 4 * 5 = 20 5 * 5 = 25
# 1 * 6 = 6 2 * 6 = 12 3 * 6 = 18 4 * 6 = 24 5 * 6 = 30 6 * 6 = 36
# 1 * 7 = 7 2 * 7 = 14 3 * 7 = 21 4 * 7 = 28 5 * 7 = 35 6 * 7 = 42 7 * 7 = 49
# 1 * 8 = 8 2 * 8 = 16 3 * 8 = 24 4 * 8 = 32 5 * 8 = 40 6 * 8 = 48 7 * 8 = 56 8 * 8 = 64
# 1 * 9 = 9 2 * 9 = 18 3 * 9 = 27 4 * 9 = 36 5 * 9 = 45 6 * 9 = 54 7 * 9 = 63 8 * 9 = 72 9 * 9 = 81
例3.用列表和字典存储下表信息,并打印出表中工资高于15000的数据
例3.用列表和字典存储下表信息,并打印出表中工资高于 15000 的数据
python
r1= dict(name="高小一",age=18,salary=30000,city="北京")
r2= dict(name="高小二",age=19,salary=20000,city="上海")
r3= dict(name="高小三",age=20,salary=10000,city="深圳")
tb = [r1,r2,r3]
for x in tb:
if x.get('salary') > 15000:
print(x)
#{'name': '高小一', 'age': 18, 'salary': 30000, 'city': '北京'}
#{'name': '高小二', 'age': 19, 'salary': 20000, 'city': '上海'}
③break 语句
break 语句可用于 while 和 for 循环,用来结束整个循环。当有嵌套循环时,break 语句只能跳出最近一层的循环。
使用 break 语句结束循环:
python
while 1:
a = input("请输入字母,当输入Q或者q时循环跳出")
if a == 'Q' or a == 'q':
break
else:
print(a)
④continue 语句
continue 语句用于结束本次循环,继续下一次。多个循环嵌套时,continue 也是应用于最近的一层循环。
例4.要求输入员工的薪资,若薪资小于 0 则重新输入。最后打印出录入员工的数量和薪资明细,以及平均薪。
python
employee_num = 0
salary_sum = 0
salary_list = []
while 1:
salary = input("请输入员工薪资,当输入q或Q时结束")
if salary == "q" or salary == "Q":
print("录入完成,退出系统")
break
if float(salary) < 0:
continue
employee_num = employee_num + 1
salary_list.append(salary)
salary_sum = salary_sum + float(salary)
print("员工总数为:",employee_num)
print("员工薪资总数为:",salary_sum)
print("员工薪资平均数为:",salary_sum/employee_num)
print("员工薪资列表为:",salary_list)
⑤else 语句
while、for 循环可以附带一个 else 语句(可选)。如果 for、while 语句没有被 break 语句结束,则会执行 else 子句,否则不执行。语法格式如下:
while 条件表达式:
循环体
else: 语句块
或者:
for 变量 in 可迭代对象:
循环体
else: 语句块
例5.员工一共 4 人。录入这 4 位员工的薪资。全部录入后,打印提示"您已经全部录入 4 名员工的薪资"。最后,打印输出录入的薪资和平均薪资。
python
employee_num = 0
salary_sum = 0
salary_list = []
for i in range(4):
salary = input("请输入共四名员工的工资(按q或Q退出): ")
if salary == 'q' or salary == 'Q':
print("录入完成,退出")
break
if float(salary) < 0:
print("输入非法,请重新输入")
continue
salary_list.append(float(salary))
salary_sum += float(salary)
employee_num += 1
print("当前录入员工个数为:", employee_num)
print("当前录入员工工资总和为:", salary_sum)
print("当前录入员工工资平均数为:", salary_sum / employee_num)
print("当前录入员工工资列表为:", salary_list)
⑥循环代码优化
虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上"斤斤计较"。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:
-
尽量减少循环内部不必要的计算
-
嵌套循环中,尽量减少内层循环的计算,尽可能向外提。
-
局部变量查询较快,尽量使用局部变量