顺序执行
对于普通语句,代码从上至下执行。
函数、方法的代码:虽然代码从上至下执行,但是函数只有在调用时候才会执行。
执行规则:
- 普通语句,从上至下直接执行。
- 碰到函数,将函数体载入内存,并不直接执行,需要调用再执行。
- 碰到类,执行类内部的普通语句,但是类的方法只载入,不执行,需要调用再执行。
- 碰到if、for等控制语句,按相应控制流程执行。
- 碰到@,break,continue等,按规定语法执行。
- 碰到函数、方法调用等,转而执行函数内部代码,执行完毕继续执行原有顺序代码。
程序主入口
if name == ‘main’: 为程序主入
口。
在pycharm中打main可以找到。
一个.py除了可以直接运行外,还可以作为模块被其他.py文件导入。不管是直接运行还是被导入, .py文件的最顶层代码都会被执行(python用缩进 来区分代码层次)
但当一个.py文件作为模块被导入时,我们可能不希望一部分代码被运行,那么就将这部分不希望运行的代码调用写在主程序中。
例:
在demo3.py中
调用函数func_one 和 func_two打印显示了
func_one和 func_two
如果加入了主程序(使用main可以快速写入),然后调用func_two
可以发现使用主程序和不使用主程序在同一个.py中没有发现区别。
都打印输出了 func_two
但是在主程序基础上 新建一个python模块, demo4.py
在demo4中导入demo3
运行demo4,会执行demo3内部的代码,打印结果时func_one
因为 调用func_two 被放入了主程序中
如果需要两个都想被调用可以放主程序外
运行demo4两个就都可以显示。
所以当只有想在当前.py中运行,但是有不想被其他.py导入运行的时候,可以放入程序主入口进行代码保护。
补充:
在同个.py中 下划线下划线name 打印结果为下划线下划线main。
而在其他.py中导入该.py运行打印结果 下划线下划线name为被导入的.py的名字。(上文例子为例,在demo4中导入demo3,name就为demo3)
所以主程序保护是一个判断程序,
假如name等于main的时候就可以运行,
如果name不等于main的时候就不运行。
条件判断
if elif else三个关键字来进行条件判断。
条件判断使用原则:
- 每个条件后面要使用冒号(:)作为判断行的结尾,表示接下来是满足条件(结果为true)后要执行的语句块。
- 除了if分支必须有,elif和else分支都可以根据情况省略。
- 使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。
- 顺序判断每一个分支,任何一个分支首先被命中并执行,则其后面的所有分支被忽略,直接跳过!
- 可以有多个elif,但是只能有一个else。
- 在python中没有switch-case语句。
if ➕判断条件表达式➕: (直接回车)
自动缩进,满足条件后的语句内容。
elif➕判断表达式➕:
自动缩进,满足条件后的语句内容。
elif➕判断条件表达式➕:
自动缩进,满足条件后的语句内容。
else ➕: (注意⚠️else后面不能叫条件判断表达式只能直接冒号)
自动缩进,满足条件后的语句内容。
条件判断嵌套
if…elif…else语句结构可以放在另外一个if…elif…else语句结构中。
例:
循环控制
循环控制介绍
循环控制就是让程序循环运行某一段代码直到满足退出条件,才退出循环。
python用for 和 while 来进行循环控制。
break与continue语句
break:当循环体执行过程中想要退出循环,就可以使用到break语句。
break跟在循环体内部,不能用于外部。
continue:用于跳过当前循环体剩余部分的代码,直接开始下一轮循环。它不会退出和终止循环。
while循环表达式
当程序从上至下执行时,遇到while循环语句,则会判断表达式是否成立,当成立时,会进入while循环体内,执行循环体内部执行代码块。直到判断表达式不成立时,则终止循环。
while 判断条件表达式:
条件成立时的内部代码块
例:
1、打印五次hello amy
2、求1—100之间的和。
循环是不可逆的,只能一直往下执行。
3、基于例2,在不改变while判断条件的情况下,当n=8的时候退出循环。
可以使用break语句
注意:break是退出循环,是循环语句,跟在循环体内部,而不是跟在if语句。
4、基于例2,在不改变while判断条件的情况下,当n=8的时候跳过当前循环进入下一轮循环。
可以使用continue语句。
注意⚠️:
这种时候n += 1要位置更换,放在if之前。
才能正常运行。
while和else
当程序正常结束的时候会执行else。
如图所示:
当内部循环使用了break的时候则不会使用else的内部代码。
因为break时候强制结束循环,所以不会执行else内容。
注意:这里else和while平级所以不需要缩进,但是else内部需要缩进。
while嵌套
尽量嵌套两层,不要在3层以上,那样效率会低。
例:制作如图所示
代码:
代码分析:解析看pycharm第22行和打印结果。
for循环、range()函数
range()【类】
range()是个类:生成一个范围。
range()括号内必须要有参数。
例:print(range(10))返回结果range(0,10)代表0到10
以列表形式呈现:print(lise(range(10)))得到的列表为[0,1,2,3,4,5,6,7,8,9]
一个左闭右开的内容,没有数字10.
range(start,stop,step)
例:print(lise(range(1,10,2)))得到[1,3,5,7,9]
小结:
1、默认从0开始
2、默认返回的是range()对象【括号内的对象】
3、左闭右开区间
4、步长默认为1
5、使用ange(start,stop,step)起始参数,结束参数,和步长的时候注意和切片的区分,是用逗号,而不是用冒号
for循环
for循环虽然与while一样是循环,但是for循环通常用来遍历可迭代的对象。
注意⚠️:
for…in…是固定格式。
iterable:是可迭代的对象。
i是变量名(可以更改),代表可迭代对象里面的每个元素。
整数是不可迭代的,所以不能用来作为对象,会报错。如果想用整数循环遍历可以使用range()函数来进行。
例:for i in 12: 会报错
for i in range(12):就可以进行遍历
就是从0-11遍历一遍,而且都是整数。
for I in ‘12’:字符串12的遍历结果为1 、2。
for循环嵌套
99乘法表制作:
第一层for循环是1-10.
第二层则是1到1+第一层的循环数。
如果第二层也是1-10 则打印会是:
1 1。 1 2。1 3。1 4。1 5。1 6。1 7。1 8。1 9。2 1。2 2 等等。会出现数字重复。
当对应去值完成后,进行组合打印输出。
这里可以用format函数(见字符串格式化内)
先占坑符 "{}{}={}"
之后输入需要占坑的函数。
format(j, I, (Ij))
当需要同行的时候不换行,但是非同行要换行。
现在嵌套内设置不换行。只空格,之后在第一层for循环中进行换行设置。
当第二层中设置range(i,10)也可以,只不过是倒置的。
for循环中的break 和 continue和while中一样
例:在1-9中当i等于8 的时候结束循环。
在1-9遍历循环中当i等于8时候跳过,执行下一次循环。【可以看到打印是7、9 没有8】
在双层循环中:
break只退出当前循环并不是退出外层循环
如图所示。
可以发现并没有到33结束,而是少了个3的列数
通过建立flag标志
首先建立了flag为false。
在第一层for循环中,id语句当flag为true的时候结束外层循环。
在第二次循环中建立if语句当j等于3的时候,flag就是true。