开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 18 天,点击查看活动详情
流程控制
if语句
if语句可细分成三种形式,分别是 if 语句、if else 语句和 if elif else 语句
语法格式:
if 表达式:
代码块
对于上述格式,当表达式满足条件(表达式是true)执行代码块,不满足就不执行。
if 表达式:
代码块 1
else:
代码块 2
对于上述格式,当表达式满足条件(表达式是true)执行代码块1,不满足就执行代码块2.
if 表达式 1:
代码块 1
elif 表达式 2:
代码块 2
elif 表达式 3:
代码块 3
...//其它elif语句
else:
代码块 n
对于上述格式,如果表达式1满足就执行代码块1,若表达式2满足就执行代码块2,...,若都不满足就执行最后一个else块(注意不是elif块)的代码块。
注意:“代码块”由具由相同缩进量的若干条语句组成。if、elif、else 语句的最后都有冒号:,不要忘记。
举例:
age = 17
if age < 18 :
print("你还未成年,建议在家人陪同下使用该软件!")
print("如果你已经得到了家长的同意,请忽略以上提示。")
#该语句不属于if的代码块
print("软件正在使用中...")
上述代码会输出:你还未成年,建议在家人陪同下使用该软件!如果你已经得到了家长的同意,请忽略以上提示。软件正在使用中...如过age = 19,那不满足age<18,不会执行if代码块,会输出软件正在使用中...
if嵌套
if、if else 和 if elif else 之间可以相互嵌套,也可以嵌套循环。举例:
proof = int(input("输入驾驶员每 100ml 血液酒精的含量:"))
if proof < 20:
print("驾驶员不构成酒驾")
else:
if proof < 80:
print("驾驶员已构成酒驾")
else:
print("驾驶员已构成醉驾")
可以看到if else语句嵌套了一个if else语句,运行结果:
->输入驾驶员每 100ml 血液酒精的含量:10
->驾驶员不构成酒驾
pass
pass意思是通过,是个空语句。
if proof < 20:
pass
else:
print("驾驶员已构成酒驾")
假设proof是18,那代码运行结果就是空的。如果proof是21,那会输出驾驶员已构成酒驾。pass就是“过”的意思。
assert断言
assert 语句,又称断言语句,可以看做是功能缩小版的 if 语句,它用于判断某个表达式的值,如果值为真,则程序可以继续往下执行;反之,Python 解释器会报 AssertionError 错误。
转成if语句可以这么理解:
if 表达式==True:
程序继续执行
else:
程序报 AssertionError 错误
如果表达式满足条件,就继续执行,如果不满足,程序就报错。举例使用:
mathmark = int(input())
#断言数学考试分数是否位于正常范围内
assert 0 <= mathmark <= 100
#只有当 mathmark 位于 [0,100]范围内,程序才会继续执行
print("数学考试分数为:",mathmark)
运行程序:
90
数学考试分数为: 90
110
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\file.py", line 3, in <module>
assert 0 <= mathmark <= 100
AssertionError
要求mathmark在0到100之间,110不在那个范围,就报错了。
while循环
满足条件表达式就执行循环中的代码块,语法如下:
while 条件表达式:
代码块
举例:
# 循环的初始化条件
num = 1
# 当 num 小于100时,会一直执行循环体
while num < 100 :
print("num=", num)
# 迭代语句
num += 1
print("循环结束!")
上述程序会输出1,2,3,...,99。输出99后,num变成100不满足条件,就不执行循环了。
for循环
先看语法格式:
for 迭代变量 in 字符串|列表|元组|字典|集合:
代码块
迭代变量存放从序列变量(字符串、列表、元组等)中读取的元素,然后执行代码块。如下面这个图,先判断序列中是否还有项(就是有东西),有的话就取出来(就是先存到迭代变量中),然后执行代码块,循环直到序列被遍历完,退出循环。
不太好理解,再看举例:
add = "http://c.biancheng.net/python/"
#for循环,遍历 add 字符串
for ch in add:
print(ch,end="")
代码中print里面有个参数end,end等于""表示不换行,默认是"\n",具体可以参考变量与运算符章节中的print函数小节。代码中迭代变量ch会先后存序列变量字符串add中的每个字符(就是先后ch先后赋值字符串中的每个字符,如最开始ch='h',ch='t',ch='t'...),并代入循环体使用,当读完add中最后一个字符/(并执行循环体),后发现没有下一项,就退出循环。运行结果如下:
http://c.biancheng.net/python/
举例1:
my_list = [1,2,3,4,5]
for ele in my_list:
print('ele =', ele)
运行结果如下:
ele = 1
ele = 2
ele = 3
ele = 4
ele = 5
可以自己看理解一下这个例子。
举例2:
print("计算 1+2+...+100 的结果为:")
#保存累加结果的变量
result = 0
#逐个获取从 1 到 100 这些值,并做累加操作
for i in range(101):
result += i
print(result)
range()是python中的内置函数,range(101)的会生成[0,101)内的整数(记住左闭右开)。
运行结果:
计算 0+1+2+...+100 的结果为:
5050
循环是可以嵌套循环的,如for循环嵌套for循环,嵌套while循环;while循环嵌套for循环都是可以的。
跳出循环之break与continue
break:可以理解成终止当前循环,如果有两层循环,终止的是内层的。
continue:是终止本次循环。可以理解成跳过执行本次循环体中剩余的代码,转而执行下一次的循环。
举例:
add = "http://c.biancheng.net/python/,http://c.biancheng.net/shell/"
# 一个简单的for循环
for i in add:
if i == ',' :
#终止循环
break
print(i,end="")
print("\n执行循环体外的代码")
当i不等与逗号时,就会一直执行循环,i去字符串add中取字符,取到了逗号,执行for循环中的if语句,直接break终止循环,运行结果:
http://c.biancheng.net/python/
执行循环体外的代码
如果没有break,那运行结果应该是:http://c.biancheng.net/python/,http://c.biancheng.net/shell/,如果是用continue的话,看下面:
add = "http://c.biancheng.net/python/,http://c.biancheng.net/shell/"
# 一个简单的for循环
for i in add:
if i == ',' :
#终止循环
continue
print(i,end="")
print("\n执行循环体外的代码")
运行结果如下:
http://c.biancheng.net/python/http://c.biancheng.net/shell/
发现只是跳过了逗号(跳过本次(逗号)循环)。
双层循环举例:
for i in range(2):
print("i:",i)
for j in range(5):
if j == 3:
break
print(j,end="") #输出不换行
当i等1时执行内层循环,j取1,取2,当j取3时执行iif语句,遇到break后退出内层循环,继续执行外层循环,i取2,继续。运行结果:
i:0
012
i:1
012
若上述代码break处换成continue,运行结果就会变成:
i:0
0124
i:1
0124
程序中在j取3时执行if语句,遇到continue,会跳过后面的语句(结束本次循环),进入下次循环(j取4)。