从0.1开始学Python——[4]
如果按照一行一行输入命令的方式执行语句,那么Python默认将会按顺序从第一行执行到最后一行。因此,为了实现更多功能,引入了 流程控制语句,它的作用是改变程序运行顺序,使得程序可以跳转回来再次执行或者某些内容不执行,也可以多次执行指定的程序。
流程控制语句
流程控制语句分为两大类:条件判断语句和循环语句。
条件判断语句
if语句
产生分支,通过条件判断决定执行哪个分支,最常见的就是if语句。即if 条件表达式:语句。先对条件表达式求值判断:True就执行后面的语句,False则不执行后面的语句。如上面结构所示,if语句只决定执不执行它后面的这一条语句,你在if语句之外再写语句就不是if管得着的了,想让if管很多条的话,需要把它后面的语句写成代码块。就是相当于把很多语句缝在一起塞在那个语句的位置,要么都执行要么都不执行。但是要注意代码块不能像单个语句一样放在条件表达式后面,而是要另起一行放并缩进(一个tab和四个空格效果相同,但是写代码的时候不能混着用)。此时的形式为
if 条件表达式:
(缩进)代码块。
什么时候有一条内容恢复到之前的缩进级别了,这时上面的代码块结束。写程序可能会有很多很多缩进,所以不同代码块就看它自己的什么时候缩进级别恢复。例如:
num = 17
if num > 15:
print('shiwodadiao')
print('dungeon master')
print('gold wind')
print('222') # 这一句就不属于上面的代码块了,if语句管不住他
运行后那三句只会一起输出或不输出,但是‘222’这一句一直输出。
条件表达式可以有多个,几个表达式之间用逻辑运算符连接即可加粗样式。一般常见的条件表达式有一种不是判断大小,而是判断某值的内容(即字符串内容),这里用input()函数输入要被判断的变量,这个函数不用多讲,值得一提的是这个函数的返回值是字符串形式,你自己输入不需要打‘’。比大小什么的记得类型转换。
if-else语句
if语句只有执行和什么都不做两种选择,而为了能通过不满足条件执行另一个语句,需要用到if-else语句。基本语法为
if 条件表达式:
(缩进)代码块
else:
(缩进)代码块。
这时,判断完条件表达式之后,False的话不会什么也不干,而是执行代码块,如:
num = input('请输入num')
if num == 'admin':
print('shiwodadiao')
print('dungeon master')
print('gold wind')
else:
print('嗨害嗨,不对捏')
if-elif-else语句
这个属于是上一个的加强版,为了能通过不同条件执行不同语句,需要用到 if-elif-else语句。形如:
if 条件表达式:
(缩进)代码块
elif 条件表达式:
(缩进)代码块
elif 条件表达式:
(缩进)代码块
……
else:
(缩进)代码块。
在整个语句执行中,从上到下依次判断,哪个True执行哪个,都是False就执行最后一个else的代码块,这也决定了只有一个结果会输出。例如:
num = input('请输入num')
if num == 'admin':
print('shiwodadiao')
print('dungeon master')
print('gold wind')
elif num == 'admin1':
print('是你小子')
elif num == 'admin2':
print('禁止访问')
else:
print('嗨害嗨,不对捏')
由于这种语句是从上到下检查,所以如果几个判断表达式之间有包含关系,例如>=10,>=20,>=30,如果>=10在最前面会导致后面的永远不会执行,所以解决这种问题一方面可以自己改顺序,另一方面可以采用同时有上下限的方式解决。
循环语句
就是循环进行一部分代码的语句,常见的就是while循环和for循环。
while循环语句
基本结构就是
while 条件表达式
(缩进)代码块
else:
(缩进)代码块(else这一块可有可无)。
只要条件表达式判断出来是True就执行,然后再判断,直到判断出False,退出循环,跳出循环后,执行else的语句。例如:
i = 1
while i < 10:
i += 1
print('pr')
else:
print('prprpr')
想要循环语句可以发挥功能,需要:1.初始化一个值,也就是条件表达式中涉及的变量需要一个初始值,不然默认为零可能会影响执行;2.需要条件表达式用来让循环可以工作;3.条件表达式涉及的变量需要改变大小,不然循环结束不了。
循环语句嵌套
经典循环套循环。例如:
i = 0
while i < 7:
j = 0 # 注意这个j一定不能在外面,因为它在每一行需要被重置,不然就不能继续循环了
while j < 3:
print('* ', end='')
j += 1
print()
i += 1
这是一个画i行j列*矩形的代码。
好用的break
break可以退出循环语句(包括else语句)。在嵌套结构中有利于减少运算次数,比如找质数的任务,非质数可能有好几对约数,如果用break,那找到第一个1和本身以外的约数就可以退出去找别的了。例如:
i = 2 # 1不是质数也不是合数
while i <= 100:
j = 2
flag = True
while j < i:
if i % j == 0: # j一定不能是1,不然全不是质数了,注意质数性质。
flag = False
# break
j += 1
if flag:
print(i)
i += 1
上述代码加上井号处的break就可以退出循环,减少验证次数,使执行时间更短,因为flag已经变了,再判断出别的约数没有任何改变。
再看,因数是成对的,2和5,5和2实际上是一样的,也就是往后取也是浪费时间,也就是说不需要取j < i的所有数就能知道是不是质数,取到i的平方根就行了,因为后面再找到的因数就相当于2和5与5和2的关系了,但是有一些非质数除了1和本身之外只有自己的平方根是约数,所以上述代码需要改为:
i = 2 # 1不是质数也不是合数
while i <= 100:
j = 2
flag = True
while j <= i ** 0.5: # 修改处
if i % j == 0: # j一定不能是1,不然全不是质数了,注意质数性质。
flag = False
# break
j += 1
if flag:
print(i)
i += 1
注意改成<=,因为有的非质数只有自己平方根一个额外约数。
continue
continue是跳过某一次,其余的继续执行。例如:
i = 0
while i < 5:
i += 1
if i == 2:
continue
print(i)
else:
print('欧儿了')
结果为:
1
3
4
5
欧儿了
也就是跳过了2。注意,break和continue二者只作用于离他们最近的循环。
pass的作用
pass是用来占据代码位置的语句,没有实际意义,没想好写什么就可以用这个,防止语法错误。比如刚才的:
i = 0
while i < 5:
i += 1
if i == 2:
pass
print(i)
else:
print('欧儿了')
continue改成pass以后,执行结果就是:
1
2
3
4
5
欧儿了
因为没有实际意义,所以2的输出也不受影响,说白了就是直接让if语句不发挥功能得走一下过场。