您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦

这篇文章主要介绍Python中流程控制的关键字的使用,涉及到if else,for,while等关键字

干货满满,建议收藏,需要用到时常看看。 小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~。

前言

有句话说程序就是由流程+数据结构组成。任何程序都是如此。前面花了好几个篇幅来介绍Python中的各种数据结构,这一篇文章接着来介绍下流程控制。数据结构说白了就是用来存储数据的,而流程就是用来控制系统的运行的。

流程控制

流程控制有三种结构,一种是顺序结构,一种是选择(分支)结构,一种是循环结构。

顺序结构:就是让程序按照从头到尾的顺序执行代码,不重复执行任何一行代码,也不跳过任何一行代码。一步一个脚印表示的就是这个意思。

选择(分支)结构:就是让程序根据不同的条件执行不同的代码,比如:根据年龄判断某个人是否是成年人。

循环结构: 就是让程序循环执行某一段代码。顺序的流程这里不做介绍了。

选择结构(if,else):

if语句

只使用if语句是Python中最简单的形式。如果满足条件则执行表达式。则跳过表达式的执行。其伪代码是:

if 条件为真:
代码块

如果if 后面的条件为真则执行代码块。否则则跳过代码的执行。

其流程图是:



就是说只使用if的话,则表达式成立的话执行代码块,不成立的话就结束。

下面就是一个简单的例子,如果满足a==1这个条件则打印a,否则跳过该语句。

a = 1
if a == 1:
print(a)

if else语句

if else语句是if的变体,如果满足条件的话则执行代码块1,否则则执行代码块2。其伪代码是:

if 条件为真:
代码块1
else
代码块2

流程图是:



同时使用if和else的话,则表达式成立的话执行一个代码块,表达式不成立的话则执行另一个代码块。

举个简单的例子吧。

age = 3
if age >= 18:
print('your age is', age)
print('adult')
else:
print("your age is", age)
print('kid')

根据输入的年龄判断某人是否是成年人。如果age大于等于18岁,则输出adult,否则输出kid。

if elif else语句

if elif else语句针对的就是多个条件判断的情况,如果if条件不满足则执行elif的条件,如果elif的条件也不满足的话,则执行else里面的表达式。其伪代码是:

if 条件为真:
表达式a
elif 条件为真:
表达式b
....
elif 条件为真:
表达是n-1
else
表达式n

其中elif可以有多个,但是elif不能单独使用,必须搭配if和else一起使用

需要注意的是if,elif和else后面的代码块一定要缩进,而且缩进量要大于if,elif和else本身,建议的缩进量是4个空格。同一代码中所有语句都要有相同的缩进。 依然是举例说明:

bmi = 80.5 / (1.75 * 1.75)
if bmi < 18.5:
print('过轻')
elif 18.5 <= bmi < 25:
print('正常')
elif 25 <= bmi < 28:
print('过重')
elif 28 <= bmi < 32:
print('肥胖')
else:
print('严重肥胖')
pass

下面就是根据bmi标准来判断一个人是过轻,正常还是肥胖。pass是Python中的关键字,用来让解释器跳过此处,什么都不做。

嵌套语句的使用

嵌套语句就是在一个if或者else的代码块中还存在子判断。如下例所示:

num = 23
if num < 20:
print('不构成饮酒行为')
else:
if 20 <= num and num < 80:
print('已达到酒驾的标准')
else:
print('已经达到醉驾的标准')

循环的关键字

while循环语句详解

while是作为循环的一个关键字。其伪代码是:

while 条件表达式:
代码块

一定要保证循环条件有变成假的时候,否则这个循环将成为一个死循环,即该循环无法结束。 其流程图是:



如果while中的表达式成立的话则执行循环体,否则的话则直接结束。

举个栗子:计算从1~100的求和,这就是一个经典的运用循环的场景

sum = 0
n = 1
while n <= 100:
sum = sum + n
n = n + 1
print('sum=', sum)

运行结果是sum= 5050,这个循环的结束条件是n>100,也就是说当n>100是会跳出循环。

range函数

range函数用于生成一系列的数字,其语法结构是:

range(start,end,step)

其各部分的语法解释是:

start表示开始的数字(包括,可以不填写),

end 结束的数字(不包括,必须填写),

step 步长(可以不填写),默认是1

计算1~100的求和可以通过range函数来实现则是这样:


sum = 0
for x in range(101):
sum = sum + x
print(sum)
print(range(101))

运行结果是:

5050
range(0, 101)

可以看出range()函数得到的是一个range对象,必须通过for循环解析输出其内容。range(101)实际运行的结果是range(0,101),默认start等于0,会输出0~100范围内的所有数字,不包括数字101。

for循环

在介绍range函数时用到了for关键字,这里介绍一下for关键字的使用。其语法结构是:

for 迭代变量 in 字符串|列表|元组|字典|集合:
代码块

字符串,列表,元祖,字典,集合都可以还用for来迭代。其流程图是:

for 循环就是:首先根据in 关键字判断序列中是否有项,如果有的话则取下一项,接着执行循环体。如果没有的话则直接结束循环。

range快速生成推导式

列表推导式

列表推导式的语法格式是

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

此格式中,[if 条件表达式]不是必须的,可以使用,也可以省略。下面就是输出1~10的列表的乘积的一个例子:

L = [x * x for x in range(1, 11)]
print(L)

此表达式相当于

L = []
for x in range(1, 11):
L.append(x * x)
print(L)

运行结果是:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

来点复杂的吧,下面就是输出

print([x for x in range(1, 11) if x % 2 == 0])

运行结果是[2, 4, 6, 8, 10]

再来点复杂的,使用多个循环,生成推导式。

d_list = [(x, y) for x in range(5) for y in range(4)]
print(d_list)

运行结果是:

[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]

上面代码,x是遍历range(5)的迭代变量(计数器),因此该x可迭代5次,y是遍历range(4)的计数器,因此该y可迭代4次。因此,该(x,y)表达式一共迭代了20次。它相当于下面这样一个嵌套表达式。

dd_list = []
for x in range(5):
for y in range(4):
dd_list.append((x, y))
print(dd_list)

元组推导式

元组推导式与列表推导式类似,其语法结构是:

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

此格式中,[if 条件表达式]不是必须的,可以使用,也可以省略。下面就是输出1~10的元组的乘积的一个例子:

d_tuple = (x * x for x in range(1, 11))
print(d_tuple)

运行结果是:

<generator object <genexpr> at 0x103322e08>

从上面的执行结果可以看出,使用元组推导式生成的结果并不是一个元组,而是一个生成器对象。

使用tuple()函数,可以直接将生成器对象转换成元组。例如:

d_tuple = (x * x for x in range(1, 11))
print(tuple(d_tuple))

输出结果是(1, 4, 9, 16, 25, 36, 49, 64, 81, 100)

字典推导式

字典推导式的语法结构是:

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

其中[if 条件表达式]可以使用,也可以省略。举个例子:

key_list = ['姓名:码农飞哥', '年龄:18', '爱好:写博客']
test_dict = {key.split(':')[0]: key.split(':')[1] for key in key_list}
print(test_dict)

运行结果是:

{'爱好': '写博客', '年龄': '18', '姓名': '码农飞哥'}

嵌套循环

嵌套循环就是循环里面还有循环,最经典就是冒泡排序。冒泡排序每次比较左右相邻的数字,如果前面的数字比后面的大则交换两个数字的位置。下面就演示一下:

test_list = [12, 3, 1, 13, 10, 5, 9]
for i in range(len(test_list)):
for j in range(len(test_list) - i - 1):
if test_list[j] > test_list[j + 1]:
tmp = test_list[j]
test_list[j] = test_list[j + 1]
test_list[j + 1] = tmp
print('第{0}循环后的结果是='.format(str(i)), test_list)
print('最终结果是=', test_list)

运行结果是:

第0循环后的结果是= [3, 1, 12, 10, 5, 9, 13]
第1循环后的结果是= [1, 3, 10, 5, 9, 12, 13]
第2循环后的结果是= [1, 3, 5, 9, 10, 12, 13]
第3循环后的结果是= [1, 3, 5, 9, 10, 12, 13]
第4循环后的结果是= [1, 3, 5, 9, 10, 12, 13]
第5循环后的结果是= [1, 3, 5, 9, 10, 12, 13]
第6循环后的结果是= [1, 3, 5, 9, 10, 12, 13]
最终结果是= [1, 3, 5, 9, 10, 12, 13]

冒泡排序过程介绍:

从上面可以看出,外层循环负责冒泡排序进行的次数,而内层循环负责将列表中相邻的两个元素进行比较,并调整顺序,即将较小的放在前面。

跳出循环

跳出循环的关键字有两个,一个是continue语句,一个是break。

  1. 其中continue语句用于跳出执行本次循环体中剩余的代码,转而执行下一次循环。
n = 0
while n <= 5:
n = n + 1
if n == 3:
continue
print(n)

运行的结果是:

1
2
4
5
6

可以看到数字3被跳过了。

2. break语句用于完全终止当前循环,需要注意的是如果是嵌套循环的话,只能中断使用break的循环。还是拿前面的冒泡排序来举个例子吧!

for i in range(len(test_list)):
for j in range(len(test_list) - i - 1):
if test_list[j] > test_list[j + 1]:
test_list[j], test_list[j + 1] = test_list[j + 1], test_list[j]
if j == 2:
print('内层循环break')
break
if i == 3:
print('外层循环break')
break

运行结果是:

内层循环break
内层循环break
内层循环break
内层循环break
外层循环break

可以看出内层循环的break不影响外层循环。也就是说break只会跳出当前的循环。

总结

本文简单介绍了Python中流程控制的几个关键字,选择结构的话就是: if,elif,else三个关键字。循环结构的话就是while和for两个关键字。语法比较简单。

我是码农飞哥,再次感谢您读完本文

全网同名【码农飞哥】。不积跬步,无以至千里,享受分享的快乐

我是码农飞哥,再次感谢您读完本文

【Python从入门到精通】(十)Python流程控制的关键字该怎么用呢?【收藏下来,常看常新】的更多相关文章

  1. Shell从入门到精通进阶之四:流程控制

    流程控制是改变程序运行顺序的指令. 4.1 if语句 4.1.1 单分支 if 条件表达式; then 命令 fi 示例: #!/bin/bash N=10 if [ $N -gt 5 ]; then ...

  2. 【java从入门到精通】day08-java流程控制-用户交互Scanner--顺序结构--选择结构

    1.java流程控制 Scanner对象: Java提供了一个工具类,可以获取用户的输入 java.until.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入 基本语 ...

  3. 【java从入门到精通】day10-Java流程控制2-switch多选择结构

    1.switch多选择结构 switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支. switch语句中的变量类型可以是: byte.short.int或者char 从j ...

  4. 【Python从入门到精通】(二十五)Python多进程的使用

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本篇重点介绍Python多进程的使用,读者朋友们可以将多进程和多线程两者做一个对比学习. 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题 ...

  5. Python 从入门到精通:一个月就够了

    毫无疑问,Python 是当下最火的编程语言之一.对于许多未曾涉足计算机编程的领域「小白」来说,深入地掌握 Python 看似是一件十分困难的事.其实,只要掌握了科学的学习方法并制定了合理的学习计划, ...

  6. ❤️【Python从入门到精通】(二十七)更进一步的了解Pillow吧!

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 进一步介绍Pillow库的使用,详细了解 干货满满,建议收藏,需要用到时常看看. 小伙伴们如有问题及需要,欢迎踊跃留言哦~ ~ ~. 前言 本文是 ...

  7. Python从入门到精通视频(全60集) ☝☝☝

    Python从入门到精通视频(全60集) Python入门到精通 学习 教程 首先,课程的顺序需要调整:一和三主要是介绍学习和布置开发环境的,一介绍的是非VS开发,三介绍的是VS开发.VS2017现在 ...

  8. Python从入门到精通视频(全60集)✍✍✍

    Python从入门到精通视频(全60集)  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单论单个知识点课程本身没问题,大家看 ...

  9. 【Python从入门到精通】(九)Python中字符串的各种骚操作你已经烂熟于心了么?

    您好,我是码农飞哥,感谢您阅读本文,欢迎一键三连哦. 本文将重点介绍Python字符串的各种常用方法,字符串是实际开发中经常用到的,所有熟练的掌握它的各种用法显得尤为重要. 干货满满,建议收藏,欢迎大 ...

随机推荐

  1. 标准自编码器(TensorFlow实现)

    由 Hinton 提出的标准自动编码机(标准自编码器)只有一个隐藏层,隐藏层中神经元的数量少于输入(和输出)层中神经元的数量,这会压缩网络中的信息,因此可以将隐藏层看作是一个压缩层,限定保留的信息. ...

  2. PointRCNN: 点云的3D目标生成与检测

    PointRCNN: 点云的3D目标生成与检测 PointRCNN: 3D Object Proposal Generation and Detection from Point Cloud 论文地址 ...

  3. python_selenium 框架代码的优化方向

  4. CentOS:操作系统级监控及常用计数器解析

    我相信有一些人看到这篇文章的标题肯定有种不想看的感觉,因为这样的内容实在被写得太多太多了.操作系统分析嘛,无非就是 CPU 使用率.I/O 使用率.内存使用率.网络使用率等各种使用率的描述. 然而因为 ...

  5. huge page 能给MySQL 带来性能提升吗?

    最近一直在做性能压测相关的事情,有公众号的读者朋友咨询有赞的数据库服务器有没有开启huge page,我听说过huge page会对性能有所提升,本文就一探究竟.对过程没有兴趣的可以直接看结论. 二 ...

  6. 5.23考试总结(NOIP模拟2)

    5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...

  7. 【模拟8.09】轰炸行动(bomb) (tarjan缩点和拓扑排序)

    很显然的tarjan嘛......拓扑也很容易想到 我是不会说我因为懒把拓扑改成DFS结果扔了40分然后就是纯板子了 因为我们一条路径的点如果不是一个一个炸,同时炸两个,他们一定会相互到达.... 找 ...

  8. 如何使用 jest 和 lint-staged 只检测发生改动的文件

    我们现在在推进 EPC 的过程中,单元测试是必备的技能,在本地的 Git commit 之前进行单测非常有必要,总不能把所有的单测的压力都放在流水线上. 毕竟在流水线运行单测的成本还是挺高的,从 pu ...

  9. conn / as sysdba连接不上

    问题: SQL> conn / as sysdbaERROR:ORA-09817: Write to audit file failed.Linux-x86_64 Error: 28: No s ...

  10. jenkins pipeline的声明式与脚本式

    自从Jenkins 2.0 版本升级之后,支持了通过代码(Groovy DSL)来描述一个构建流水线,灵活方便地实现持续交付,大大提升 Jenkins Job 维护的效率,实现从 CI 到 CD 到转 ...