优秀的编程知识分享平台

网站首页 > 技术文章 正文

1.6「Python」第六章 控制语句(python控制结构(一))

nanyue 2024-07-20 23:47:03 技术文章 13 ℃

人工智能入门与实战第一季:python基础语法



控制语句包含条件控制语句和循环语句,任何编程语言都是如此,用来控制代码的执行逻辑,我们在第二章讲比较运算符的时候就提到了条件语句。

前面我们学习了各种各样的数据类型、各种运算,那么本章的控制语句将结合他们从而形成我们想要的程序。

条件语句

条件语句通过判断条件是否成立,来决定执行哪个分支,根据分支的多少可以分为单分支、双分支、多分支。

单分支:


双分支结构:


多分支结构:


单分支结构

if…
举例:输入一个数,判断是否是偶数

num = int(input("请输入一个整数:"))
if num % 2 == 0:
    print("%d 是 偶数" % num)

双分支结构

if…else…
举例:输入一个数,判断是奇数还是偶数

num = int(input("请输入一个整数:"))
if num % 2 == 0:
    print("%d 是 偶数" % num)
else:
    print("%d 是 奇数" % num)

多分支结构

多分支结构在程序的开发过程中是非常常见的形式,因为多分支的场景非常多: if…elif…else…

多分支结构中只能有一个if和一个else,但是可以有多个elif

举例:使用第二章的作业举例

'''
某小学考试评优三个等级:
1、80分(含)以上:优秀
2、60-79分:一般
3、60以下:不及格
小明数学考试得了59分,打印出小明的评优结果
'''
score = 59

if score > 80:
    print("优秀")
elif score > 60:
    print("及格")
else:
    print("不及格")

条件语句的嵌套

条件语句的嵌套即在if或else的分支里再嵌入if…else…分支
举例:模拟用户注册时用户名和密码校验

name = input("请输入用户名:")
pwd = input("请输入密码:")

if len(name) == 0 or len(pwd) == 0:
    print("用户名或密码为空,请重新输入")
else:
    # 以下为嵌套的条件语句
    if len(pwd) < 4:
        print("密码位数太短")
    else:
        # 提交处理...
        print("提交成功")

注意python和其他编程语言在语法上不太一样,if和else之后别忘了加冒号:

使用条件语句的嵌套注意不易嵌套层数过多,一个是影响代码执行效率,一个是降低了代码的可读性。

三元条件运算

格式如下:

条件为真时的值 if 条件表达式 else 条件为假时的值

三元条件运算可以理解成双分支结构的简写,在所有语言中几乎都有类似的三元运算。

举例:

score = 80
assessment = "优秀" if score > 90 else "一般"
print(assessment)

输出结果:

一般

条件语句通常与比较运算、逻辑运算配合使用,这些内容在第二章已讲解。

本节对应源文件:se1_ch6_case_control.py

循环语句

循环语句是指在符合某个条件的情况下,重复执行一个代码段。


循环语句执行过程:表达式为True,则执行循环体,循环体执行完之后再次判断表达式,如果为True,则继续执行循环体,否则结束循环。

Python中的循环语句有while和for

while循环

语法格式

while 条件表达式:
        代码块

举例:求1-100的整数和

n = 1   # n代表从1到100的整数
s = 0   # s用来存储所求的和
while n <= 100:    # 如果n小于等于100,就会继续执行循环语句
    s = s + n      # 每一次循环时加上一个整数
    n = n + 1      # 每次循环结束n变成下一个整数

print(s)

输出结果:

5050

for循环

同样以“求1-100的整数和“为例,我们看使用for循环如何处理:

s = 0
# 我们在前面讲序列range时说range的一个使用场景是配合for循环
# 以下使用range会生成1-100个整数,依次从range中取出1-100的数,存储到n中
for n in range(1, 101):  
    s += n  # 每次把n的值加起来,存到s中
print(s)

输出结果:

5050

循环嵌套

前面我们讲到了条件语句的嵌套,循环也是可以嵌套的,循环嵌套就是在循环语句中再嵌套循环语句。

举例:打印出某个年级所有班级的学生名称

# 我们创建了一个二维列表,代表某个年级,二维列表中的每一个元素又是一个列表,代表一个班级
lists3 = [
    ['a', 'b', 'c', 'd'],
    ['e', 'f', 'g', 'h'],
    ['i', 'j', 'k', 'l']
]

for cls in lists3:
    for name in cls:
        print(name, end=',')    # 在一行输出,以逗号隔开

输出结果:

a,b,c,d,e,f,g,h,i,j,k,l,

以上的循环嵌套是以for循环举例的,是一个基础的案例,你可以尝试一下稍带点难度的循环嵌套,比如打印我们熟悉的九九乘法表。

continue语句

continue语句会经常出现在循环语句中,它的作用是结束本次循环,继续下一次循环,如果有循环嵌套的话,结束最近一层的本次循环,举个例子你就懂了。

举例:有一个1-100的列表,希望打印出列表中所有的偶数。

# 使用range生成一个1-100的list
lists = list(range(1, 101))
print(lists)
for x in lists:
    if x % 2 != 0:   
        continue    

    print(x)

如果x不是偶数的话,就结束本次循环,继续下一次循环,所以如果x不是偶数的话,后面的语句print(x)就不会执行了。

continue语句可以使用在for或while循环中,以上仅在for循环中举例。

break语句

break语句放在循环语句中,表示结束整个循环,如果有循环嵌套的话,结束最近一层的整个循环。

举例:假设某个班级有n个学生,现在让你找一下班级里有没有叫judy的小同学(我们使用for循环举例)

lists2 = ['jordan', 'kobe', 'james', 'yao','judy', 'bob', 'beckhanm']
for name in lists2:
    if name == 'judy':
        print('haha,i found it')   
        break
    print('not found,go on')

输出结果:

not found,go on
not found,go on
not found,go on
not found,go on
haha,i found it

当第5次找到后,执行了break语句,结束了整个循环。

这里使用break语句很重要,尤其数据量大的情况下,避免执行无效的循环,造成资源的浪费。

当然break也有其他使用场景,这里就不举例了。总之记住break语句是用来结束整个循环的。

break语句可以使用在for或while循环中,以上仅在for循环中举例。

else语句

1、while循环中使用else语句
格式如下:

while 条件表达式:
    条件表达式成立,执行此代码块1
else:
    条件表达式不成立,执行此代码块2

举例:把上述“求1-100的整数和”改造一下

n = 1   # n代表从1到100的整数
s = 0   # s用来存储所求的和
while n <= 100:    
    s = s + n      
    n = n + 1      
else:
    print('完成求和计算,结果为:%d' % s)

输出结果:

5050

2、for循环中使用else语句
格式如下:

for 变量 in 可迭代对象:
    循环体 
else:
    for循环结束,执行此代码块

仍然以“求1-100的整数和”举例

s = 0
for n in range(1, 101):
    s += n  # 每次把n的值加起来,存到s中
else:
    print('完成求和计算,结果为:%d' % s)

输出结果:

5050

for循环与序列

这部分已经不属于新的知识点了,算是总结吧。

for循环与list的使用在上述循坏嵌套、continue语句、break语句中已经讲解。

for循环与range的使用在上述使用while循环求和、使用for循环求和已经讲解。

for循环与tuple的使用,这个请参考for循环与list、range的使用,
自己尝试来写个小例子。

所以我们可以发现for循环可以与任何可迭代对象配合使用,即:

for 变量 in 可迭代对象:
    循环体

啥是可迭代对象?list、tuple、range都是可迭代对象。

for循环与字典、集合

for循环与字典举例:

student = {'name':'tom', 'age':18, 'sex':'male'}

# 输出字典所有的键
for key in student.keys():
    print('key:%s' % key)

# 输出字典所有的值
for value in student.values():
    print('value:%s' % value)

# 输出字典键和值
for key, value in student.items():
    print('key:%s,value:%s' % (key, value))

输出结果:

key:name
key:age
key:sex
value:tom
value:18
value:male
key:name,value:tom
key:age,value:18
key:sex,value:male


for循环与集合举例:

set1 = {1,2,3,4,5}
for x in set1:
    print(x, end=' ') 
# 使用end=' ' 表示在同一行输出,以空格隔开

输出结果:

1 2 3 4 5

推导式生成序列、字典、集合

简单来说就是通过已有的可迭代对象(比如list、range、tuple),来生成新的序列、字典、集合,本质上是利用了for循环创建序列、字典、集合的简写形式。

列表推导式

我们在前面讲解创建列表list的时候,其中一种创建方式就是通过列表推导式创建,不知你还是否记得?

语法格式:

[表达式 for 变量 in 可迭代对象] 
[表达式 for 变量 in 可迭代对象 if 条件判断]

这里偷个懒,我把前面的例子拿过来:

list3 = [1,2,3,4]

#通过list3生成一个新的列表list4 
list4 = [x for x in list3]

#把list3中的数乘以2再存到list5中
list5 = [x*2 for x in list3]
print(list4)
print(list5)

#思路扩展:找出list3中的偶数
list5_even = [x for x in list3 if x % 2 == 0]
print(list5_even)

输出结果:

[1, 2, 3, 4]
[2, 4, 6, 8]
[2, 4]

字典推导式

语法格式:

{key_expression : value_expression for 表达式 in 可迭代对象} 

通过推导式创建字典,我们把字典那一节的例子拿过来改造一下:

keys = ['name', 'age', 'sex']
values = ['jerry', 18, 'female']
student = {k : v for k, v in zip(keys, values)}
print(student)

输出结果:
{'name': 'jerry', 'age': 18, 'sex': 'female'}

zip(keys, values) 的作用:
把列表keys、values打包成一个元素为元组的列表:[('name', 'jerry'), ('age', 18), ('sex', 'female')]

集合推导式

语法格式:

[表达式 for 变量 in 可迭代对象] 
[表达式 for 变量 in 可迭代对象 if 条件判断]

举例:把集合中数平方,生成新的集合

sets = {1,2,3,4,5,6}
sets_square = {x**2 for x in sets}
print(sets_square)

输出结果:

{1, 4, 36, 9, 16, 25}

推导式总结:不管是列表推导式、字典推导式、集合推导式均大同小异:
1、要有for循环
2、for循环中要使用可迭代对象,比如列表、元组、range、集合

本章对应的源文件:
se1_ch6_case_control.py
se1_ch6_circulation.py

本章作业

1、创建一个列表list1,list1中存储1-100的整数,然后使用列表推导式找出list1中的奇数,存储到list2中。

2、使用循环语句打印出由星号*组成的一个等腰三角形。

本章总结

本章讲的控制语句可以理解成程序的骨架,然后把我们前面学习到的数据类型、运算填充进去就成了真正的程序。

我们记住几种常用的控制语句,一个是条件语句,一个是循环语句。然后再学会这两种控制语句与数据类型的结合使用,比如for循环与range、列表、字典等等的结合使用。

我是猪弟爸爸,这里我会持续更新人工智能自学内容,我们下节见。

最近发表
标签列表