非常详细非常零基础的Python教程:流程控制语句

119 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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 字符串|列表|元组|字典|集合:
    代码块

迭代变量存放从序列变量(字符串、列表、元组等)中读取的元素,然后执行代码块。如下面这个图,先判断序列中是否还有项(就是有东西),有的话就取出来(就是先存到迭代变量中),然后执行代码块,循环直到序列被遍历完,退出循环。

image.png

不太好理解,再看举例:

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)。