python学习笔记(3)——控制语句

控制语句

我们在前面学习的过程中,都是很短的示例代码,没有进行复杂的操作。现在,我们将开始学习流程控制语句。 前面学习的变量、数据类型(整数、浮点数、布尔)、序列(字符串、列表、元组、字 典、集合),可以看做是数据的组织方式。数据可以看做是"砖块"! 流程控制语句是代码的组织方式,可以看做是"混凝土"。

一个完整的程序,离不开"砖块",也离不开"混凝土"。他们的组合,才能让我们建立从小到"一个方法",大到"操作系统",这样各种各样的"软件"。

一、选择结构

选择结构通过判断条件是否成立,来决定执行哪个分支。选择结构有多种形式,分为:单分 支、双分支、多分支。

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 包含以下几种可迭代对象:

  1. 序列。包含:字符串、列表、元组

  2. 字典

  3. 迭代器对象(iterator)

  4. 生成器函数(generator)

  5. 文件对象

遍历字符串中的字符:

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)
⑥循环代码优化

虽然计算机越来越快,空间也越来越大,我们仍然要在性能问题上"斤斤计较"。编写循环时,遵守下面三个原则可以大大提高运行效率,避免不必要的低效计算:

  1. 尽量减少循环内部不必要的计算

  2. 嵌套循环中,尽量减少内层循环的计算,尽可能向外提。

  3. 局部变量查询较快,尽量使用局部变量

三、综合练习

相关推荐
A懿轩A24 分钟前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
云边有个稻草人28 分钟前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
南宫生8 小时前
力扣-图论-17【算法学习day.67】
java·学习·算法·leetcode·图论
sanguine__8 小时前
Web APIs学习 (操作DOM BOM)
学习
冷眼看人间恩怨9 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
数据的世界0111 小时前
.NET开发人员学习书籍推荐
学习·.net
四口鲸鱼爱吃盐11 小时前
CVPR2024 | 通过集成渐近正态分布学习实现强可迁移对抗攻击
学习
OopspoO13 小时前
qcow2镜像大小压缩
学习·性能优化
A懿轩A13 小时前
C/C++ 数据结构与算法【栈和队列】 栈+队列详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·栈和队列
居居飒14 小时前
Android学习(四)-Kotlin编程语言-for循环
android·学习·kotlin