4、Python的流程控制

想学习更多Python知识,请关注微信公众号 莫同学vv

 

Python使用 if 语句提供分支支持,提供了 while、for-in 循环,也提供了 break 和 continue 来控制程序的循环结构。

 

顺序结构

程序总是从上向下依次执行,排在前 面的代码先执行,排在后面的代码后执行。

 

if 分支结构

Python的 if 语句有如下三种形式:

第一种形式:
if expresson :
    statements ...

第二种形式 :
if expression :
    statements...
else :
    statements ...

第三种形式:
if expression :
    statements ...
elif expression :
    statements ...
..//可以有零条或多条 elif 语句 
else :
    statement ...

 

如果 if 条件为“真”,程序就会执行 if 条件后面的多条语句,否则就会依次判断 elif 条件,如果 elif 条件为“真”,程序就会执行 elif 条件后面的多条语句,如果前面所有条件都为“假”,程序就会执行 else 后的代码块(如果有)。

案例:

input_age = input("请输入您的年龄 :") 
age = int(input_age)
if age > 18 :
# 只有当 age > 18 时,下面整体缩进的代码块才会执行 
# 整体缩进的语句是一个整体,要么一起执行,要么一起不执行 
    print("你已经成年了")

代码不要忘记缩进

案例:

input_age = input("请输入您的年龄 :") 
age = int(input_age)
if age > 18 :
# 只有当 age > 18 时,下面整体缩进的代码块才会执行 
# 如果下面的代码块不缩进,会报错
print("你已经成年了")

案例:

# 定义变量 c,并为其赋值
a = 10
if a > 5 :
# 如果a > 5,则执行下面的条件执行体,只有 a- = 1 一行代码为条件执行体
    a -= 1 
# 下面是一行普通代码,因为没有缩进,不属于条件执行体,所以总是执行
print("a 大于 4")

案例:

# 定义变量 c,并为其赋值
a = 10
if a > 5 :
# 如果a > 5,则执行下面的条件执行体,只有 a- = 1 一行代码为条件执行体
    a -= 1 
# 下面是一行普通代码,因为没有缩进,不属于条件执行体,所以总是执行
print("a 大于 4")
# 此处的 else 将没有 if 语句,因此编译出错 
else :
# 否则,执行下面的条件执行体,只有一行代码作为代码块 
print ("a 不大于 4")

不要随意缩进

位于同一个代码块中的所有语句必须保持相同的缩进,既不能多,也不能少 。

案例:

input_age = input("请输入您的年龄 :") 
age = int(input_age)
if age > 18 :
    # 缩进了4个空格
    print("你已经成年了")
     # 缩进了5个空格
     print("你已经成年了----")

案例:

input_age = input("请输入您的年龄 :") 
age = int(input_age)
if age > 18 :
    # 缩进了4个空格
    print("你已经成年了")
   # 缩进了3个空格
   print("你已经成年了----")

不要遗忘冒号

如果程序遗忘了冒号,那么 Python 解释器就无法识别代码块的开始点。

案例:

input_age = input("请输入您的年龄 :") 
age = int(input_age)
# 演示漏掉 if 后的冒号
if age > 18 
    print("你已经成年了")

if 条件的类型

除了 False 本身,各种代表“空”的 None、空字符串、空元组、空列表、空字典都会被当成 False处理。

案例:

# 定义空字符串
s = "" 
if s :
    print('s 不是空字符串') 
else :
    print('s 是空字符串') 
# 定义空列表
mylist = [] 
if mylist :
    print('mylist 不是空列表') 
else :
    print('mylist是空列表') 
# 定义空字典
mydict = {}
if mydict :
    print('mydict 不是空字典') 
else :
    print('mydict 是空字典')

注意:在使用 if else 分支语句时, 一定要先处理包含范围史小的情形。

 

pass 语句

有时候程序需要占一个位、放一条语句,但又不希望这条语句做任何事情,此时就可通过 pass 语句来实现,通过使用 pass 语句,可以让程序更完整 。

案例:

s =input("请输入一个整数: ") 
s = int(s)
if s > 5:
    print("大于 5") 
elif s < 5:
# 空语句,相当于占位符
    pass
else :
    print ("等于 5")

断言 assert

断言语句和 if分支有点类似,它用于对一个 bool 表达式进行断言,如果该 bool 表达式为 True,该程序可以继续向下执行, 否则程序会引发 AssertionError 错误。

assert 断言的执行逻辑是: 

if 条件为 False :
程序引发 AssertionError 错误

案例:

input_age = input("请输入您的年龄 :") 
age = int (input_age)
assert 20 < age < 80
print("您输入的年龄在 20 和 80 之间")

循环结构

while 循环

案例:

# 循环的初始化条件
i = 8
# 当 i 小于 10 时,执行循环体 
while i < 10 :
    print("i 的值为:", i) 
    # 迭代语句
    i += 1
print("循环结束!")

在使用 while 循环, 一定要保证循环条件有变成假的时候,否则这个循环将成为一个死循环,永远无法结束这个循环。

案例:

# 循环的初始化条件
i = 8
# 当 i 小于 10 时,执行循环体 
while i < 10 :
    print("i 的值为:", i) 
    # 迭代语句
    i -= 1
print("循环结束!")

使用 while 循环遍历列表和元组

由于列表和元组的元素都是有索引的,因此程序可通过 while循环、 列表或元组的索引来遍历列表和元组中的所有元素。

遍历元组案例:

tuple1 = ('zhangsan', 'lisi', 'wangwu') 
i = 0
# 只有 i 小于 len(tuple1 ),继续执行循环体
while i < len(tuple1):
    print(tuple1[i]) 
    #根据 i来访问元组的元素 
    i += 1

遍历列表案例:

list1 = ['zhangsan', 'lisi', 'wangwu']
i = 0
# 只有 i 小于 len(list1 ),继续执行循环体
while i < len(list1):
    print(list1[i]) 
    #根据 i来访问列表的元素 
    i += 1

for-in 循环

语法: 

for 变量 in 字符串|范围|集合等 : 
    statements

使用 for-in 循环遍历列表和元组

在使用for-in 循环遍历列表和元组时,列表或元组有几个元素,for-in 循环的循环体就执行几次。

for-in 遍历元组案例:

tuple1 = ('zhangsan', 'lisi', 'wangwu')
for ele in tuple1 :
    print("当前元素是:", ele)

for-in 遍历列表案例:

list1 = ['zhangsan', 'lisi', 'wangwu']
for ele in list1 :
    print("当前元素是:", ele)

使用 for-in 循环遍历字典

使用 for-in 循环遍历字典其实也是通过遍历普通列表来实现的。

字典包含了如下三个方法,先调用字典的上面三个方法之一来获取字典的所有 key-value 对、 所有 key、 所有 value, 再进行遍历。

1、items():返回字典中所有 key-value对的列表

2、 keys():返回字典中所有 key 的列表

3、values():返回字典中所有 value 的列表

案例:

dict1 = {'语文': 89, '数学': 92, '英语': 80}
# 通过 items ()方法遍历所有的 key-value 对
# 由于 items 方法返回的列表元素是 key value 对,因此要声明两个变量 
for key, value in dict1.items() :
    print('key:', key)
    print('value:', value) 
# 通过 keys ()方法遍历所有的 key 
print("-------------")
for key in dict1.keys():
    print('key:', key)
    # 通过 key 获取 value 
    print('value', dict1[key])
# 通过 values()方法遍历所有的 value 
print("-------------")
for value in dict1.values() :
    print('value :', value)    

循环使用 else

Python 的循环都可以定义 else 代码块,当循环条件为 False 时,程序会执行 else 代码块

while 和 else 使用案例:

i = 0
while i < 5 :
    print('i 小于 5:', i)
    i += 1 
else:
    print('i大于或等于 5:', i)

for-in 和 else 使用

for循环同样可使用 else 代码块,当 for 循环把区间、元组或列表的所有元素遍历一次之后,for 循环会执行 else 代码块,在 else 代码块中,循环计数器的值依然等于最后一个元素的值。

案例:

list1 = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
for name in list1 :
    print("name in list1", name)
# 访问循环计数器的值,依然等子最后一个元素的值
else :
    print("name not in list1", name)

嵌套循环

如果把一个循环放在另一个循环体内,那么就可以形成嵌套循环。嵌套循环既可以是 for-in 循环嵌套 while 循环,也可以是 while 循环嵌套 do while 循环,即各种类型的循环都可以作为外层循环,各种类型的循环也都可以作为内层循环。

for 表达式

for 表达式用于利用其他区间、元组、列表等可迭代对象创建新的列表。

语法:

[表达式 for 循环计数器 in 可法代对象]

案例:

range1 = range(10)
# 用for-in 循环遍历每个元素,然后将每个元素乘以2
list1 = [x * 2 for x in range1]
print(list1)

还可以在 for 表达式后面添加 if 条件,这样 for表达式将只迭代那些符合条件的元素。

案例:

range1 = range(10)
list2 = [x * 2 for x in range1 if x % 2 ==0]
# list2 集合包含5个元素
print(list2)

如果将 for 表达式的方括号改为圆括号,for 表达式将不再生成列表,而是生成一个生成器 (generator),该生成器同样可使用 for循环选代。

案例:

range1 = range(10)
# 使用 for 表达式创建生成器
generator1 = (x * 2 for x in range1 if x % 2 == 0) 
# 使用 for 循环迭代生成器
for x in generator1 :
    print(x, end='\t')

for 表达式可使用多个循环,就像嵌套循环一样

案例:

list1 = [ (x, y) for x in range(3) for y in range(2)] 
# list1列表包含6个元素
print(list1)

上面的 for 表达式相当于如下嵌套循环

案例:

list1 = []
for x in range(3) :
    for y in range(2):
        list1.append((x, y))
print(list1)

控制循环结构

Python 提供了 continue 和 break 来控制循环结构,除此 之外,使用 return 可以结束整个方法,当然也就结束了一次循环

使用break结束循环

break 用于完全结束一个循环,跳出循环体,不管是哪种循环,一旦在循环体中遇到 break,系统就将完全结束该循环,开始执行循环之后的代码。

案例:

# 一个简单的 for 循环
for i in range(0 , 10) :
    print("i 的值是 :", i) 
if i == 2 :
    # 执行该语句时将结束循环
    break

对于带 else 语句块的 for 循环,如果使用 break 强行中止循环,程序将不会执行 else 块。

案例:

# 一个简单的 for 循环
for i in range(0 , 10) :
    print("i 的值是 :", i) 
if i == 2 :
    # 执行该语句时将结束循环
    break
# 以下语句不会被执行
else :
    print("else 语句块", i)

使用 continue 忽略本次循环的剩下语句

continue 的功能和 break 有点类似,区别是 continue 只是忽略当次循环的剩下语句,接着开始下一次循环,并不会中止循环,而 break 则是完全中止循环本身。

案例:

# 一个简单的 for 循环
for i in range(5):
    print("i 的值是:", i)
    if i == 1:
        # 忽略本次循环后面的语句,当 i 的值为1的时候直接跳过下面的语句,执行下一次循环
        continue
    print("continue 后的语句")

使用return结束方法

Python程序中的大部分循环都被放在函数或方法中执行,一旦在循环体内执行到一条 return 语句时,return 语句就会结束该函数或方法,循环自然也随之结束。

案例:

def test() :
    # 外层循环
    for i in range(10) :
        for j in range(10) :
            print("i 的值为:%d ,j 的值为:%d" %(i, j))
            if j == 1 :
                # 循环只能执行到i等于0、j等于1,当j等于l时程序将完全结束
                return
            print("return 后的输出语句")
test()

 

想学习更多Python知识,请关注微信公众号 莫同学vv

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值