第四章

作者: M_小七 | 来源:发表于2020-05-25 14:01 被阅读0次
流程控制
  • 顺序结构
  • 掌握分支结构的功能和用法
  • 分支结构容易出现的各种错误
  • 使用 if 表达式
  • 使用 pass 空语句
  • 掌握断言的功能和用法
  • 掌握 while 循环的语法
  • 使用 while 循环遍历列表或元组
  • 掌握 for in 循环的语法
  • 使用 for in 循环遍历列表和元组
  • 使用 for in 循环遍历字典
  • 在循环中使用 else
  • 掌握嵌套循环的用法
  • 使用 for 表达式
  • 与循环相关的工具函数
  • 使用 break 结束循环
  • 使用 continue 忽略本次循环的剩下语句
  • 使用 return 结束方法
  • 通过实例熟练使用流程控制

顺序结构 Sequence Structure 代码按照编写的顺序,自上而下逐行运行
if 分支结构
Python if 语句有如下3种形式

形式1:
    if 表达式:
        语句
形式2:
    if 表达式:
        语句
    else:
        语句
形式3:
    if 表达式1:
        语句块1
    elif 表达式2:
        语句块2
    elif 表达式3:
        语句块3
    else:
        语句块
  • 条件表达式就是计算结果必须为布尔值的表达式
  • 表达式后面的冒号不能少
  • 注意if后面的出现的语句,如果属于if语句块,则必须同一个锁紧等级
  • 条件表达式结果为True执行if后面的缩进的语句块
username=str(raw_input("请输入用户名:"))
password=str(raw_input("请输入密码:"))

if username !='' and password !='':
    if username == "admin" and password=="12345" :
        print ("身份认证成功")
    else:
        print ("身份认证失败")
else:
    print("请输入用户名和密码")

pass 语句
pass 是空语句,是为了保持程序结构的完整性,pass 不做任何事情,一般用做占位语句

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

断言
Python assert(断言)用于判断一个表达式,在表达式条件为 false 的时候触发异常。
语法格式如下:

assert expression

等价于:

if not expression:
    raise AssertionError

assert 后面也可以紧跟参数:

assert expression [, arguments]

等价于:

if not expression:
    raise AssertionError(arguments)

例:

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

如果输入的年龄不在20~80之间,就会报错。
循环结构

  • while 循环
    while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。
while 判断条件(condition):
    执行语句(statements)……

执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。当判断条件假 false 时,循环结束

count = 0
while (count < 9):
    print('The count is:', count)
    count = count + 1

print("Good bye!")
# The count is: 0
# The count is: 1
# The count is: 2
# The count is: 3
# The count is: 4
# The count is: 5
# The count is: 6
# The count is: 7
# The count is: 8
# Good bye!

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

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

# fkit
# crazyit
# Charli

遍历列表

src_list = [12, 45, 34,13, 100, 24, 56, 74, 109]
a_list = [] # 定义保存整除3的元素
b_list = [] # 定义保存除以3余1的元素
c_list = [] # 定义保存除以3余2的元素
# 只要src_list还有元素,继续执行循环体
while len(src_list) > 0:
    # 弹出src_list最后一个元素
    ele = src_list.pop()
    # 如果ele % 2不等于0
    if ele % 3 == 0 :
        a_list.append(ele) # 添加元素
    elif ele % 3 == 1:
        b_list.append(ele) # 添加元素
    else:
        c_list.append(ele) # 添加元素
print("整除3:", a_list)
print("除以3余1:",b_list)
print("除以3余2:",c_list)
# 整除3: [24, 45, 12]
# 除以3余1: [109, 100, 13, 34]
# 除以3余2: [74, 56]

(2)for-in 循环
for-in 循环专用于遍历范围、列表、元素和字典等可迭代对象包含的元素

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

对于上面的语法格式有两点说明
1.for-in 循环中的变量的值受 for-in 循环控制,该变量将会在每次循环开始时自动被赋值,因此程序不应该在循环中对该变量赋值
2.for-in 循环可用于遍历任何可选代对象,所谓可迭代对象,就是指该对象中包含iter方法,且该方法的返回值对象具有next方法

n = input("输入你要计算的阶乘:")
num = int(n)
result = 1
for i in range(1, num+1):
    result *= i
print(result)

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

a_tuple = ('a', 'b', 'c')
for i in a_tuple:
    print('元素:', i)
    
# 元素: a
# 元素: b
# 元素: c

遍历列表

src_list = [1,22.5,3,45,'ab',78,2]
list_sum = 0
count = 0
for i in src_list:
    if isinstance(i, int) or isinstance(i, float):    
    # 如果该元素是整数或浮点数
        # print(i)
        list_sum += i
        count += 1
print('总和为:', list_sum)
print('平均值为:', list_sum / count)
# 总和为: 151.5
# 平均值为: 25.25

(4)使用 for-in 循环遍历字典
回忆一下字典的三个方法
items : 返回字典中所有 key-value 对的列表。
keys : 返回字典中所有 key 的列表
values :返回字典中所有 value 的列表

my_dict = {'Math':80, 'EP':95, 'English':75}
for key, values in my_dict.items():
    print('key:', key)
    print('value:', values)

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

a_list = [330 , 1.4 , 50,'fkit', -3.5 ]
for ele in a_list:
    print('元素 :', ele)
else:
# 访问循环计数器的值 依然等子最后一个元素的值
    print('else块:', ele)

# 元素 : 330
# 元素 : 1.4
# 元素 : 50
# 元素 : fkit
# 元素 : -3.5
# else块: -3.5

(6)嵌套循环
将一个循环放在另一个循环体中,就形成了嵌套循环,其中for,while,do…while均可作为外层循环和内层循环
(7)for 表达式
for 表达式用于利用其他区间、元组、列表等可迭代对象创建新的列表
for 表达式与普通for 循环的区别有两点
1.在for 关键字之前定义一个表达式,该表达式通常会包含循环计数器
2.for 表达式没有循环体,因此不需要冒号

a_range = range(10)
# 对a_range执行for表达式
a_list = [x * x for x in a_range]
# a_list集合包含10个元素
print(a_list)
b_list = [x * x for x in a_range if x % 2 == 0]
# a_list集合包含5个元素
print(b_list)
# 使用for表达式创建生成器
c_generator = (x * x for x in a_range if x % 2 == 0)
# 使用for循环迭代生成器
for i in c_generator:
    print(i, end='\t')
print()
d_list = [(x, y) for x in range(5) for y in range(4)]
# d_list列表包含20个元素
print(d_list)
dd_list = []
for x in range(5):
    for y in range(4):
        dd_list.append((x, y))
print(dd_list)
            
e_list = [[x, y, z] for x in range(5) for y in range(4) for z in range(6)]
# 3_list列表包含120个元素
print(e_list)
 
src_a = [30, 12, 66, 34, 39, 78, 36, 57, 121]
src_b = [3, 5, 7, 11]
# 只要y能整除x,就将它们配对在一起
result = [(x, y) for x in src_b for y in src_a if y % x == 0]
print(result)

输出结果

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 4, 16, 36, 64]
0   4   16  36  64  
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3), (3, 0), (3, 1), (3, 2), (3, 3), (4, 0), (4, 1), (4, 2), (4, 3)]
[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 0, 3], [0, 0, 4], [0, 0, 5], [0, 1, 0], [0, 1, 1], [0, 1, 2], [0, 1, 3], [0, 1, 4], [0, 1, 5], [0, 2, 0], [0, 2, 1], [0, 2, 2], [0, 2, 3], [0, 2, 4], [0, 2, 5], [0, 3, 0], [0, 3, 1], [0, 3, 2], [0, 3, 3], [0, 3, 4], [0, 3, 5], [1, 0, 0], [1, 0, 1], [1, 0, 2], [1, 0, 3], [1, 0, 4], [1, 0, 5], [1, 1, 0], [1, 1, 1], [1, 1, 2], [1, 1, 3], [1, 1, 4], [1, 1, 5], [1, 2, 0], [1, 2, 1], [1, 2, 2], [1, 2, 3], [1, 2, 4], [1, 2, 5], [1, 3, 0], [1, 3, 1], [1, 3, 2], [1, 3, 3], [1, 3, 4], [1, 3, 5], [2, 0, 0], [2, 0, 1], [2, 0, 2], [2, 0, 3], [2, 0, 4], [2, 0, 5], [2, 1, 0], [2, 1, 1], [2, 1, 2], [2, 1, 3], [2, 1, 4], [2, 1, 5], [2, 2, 0], [2, 2, 1], [2, 2, 2], [2, 2, 3], [2, 2, 4], [2, 2, 5], [2, 3, 0], [2, 3, 1], [2, 3, 2], [2, 3, 3], [2, 3, 4], [2, 3, 5], [3, 0, 0], [3, 0, 1], [3, 0, 2], [3, 0, 3], [3, 0, 4], [3, 0, 5], [3, 1, 0], [3, 1, 1], [3, 1, 2], [3, 1, 3], [3, 1, 4], [3, 1, 5], [3, 2, 0], [3, 2, 1], [3, 2, 2], [3, 2, 3], [3, 2, 4], [3, 2, 5], [3, 3, 0], [3, 3, 1], [3, 3, 2], [3, 3, 3], [3, 3, 4], [3, 3, 5], [4, 0, 0], [4, 0, 1], [4, 0, 2], [4, 0, 3], [4, 0, 4], [4, 0, 5], [4, 1, 0], [4, 1, 1], [4, 1, 2], [4, 1, 3], [4, 1, 4], [4, 1, 5], [4, 2, 0], [4, 2, 1], [4, 2, 2], [4, 2, 3], [4, 2, 4], [4, 2, 5], [4, 3, 0], [4, 3, 1], [4, 3, 2], [4, 3, 3], [4, 3, 4], [4, 3, 5]]
[(3, 30), (3, 12), (3, 66), (3, 39), (3, 78), (3, 36), (3, 57), (5, 30), (11, 66), (11, 121)]

for 表达式当然也是有循环的,它同样会对可迭代对象进行循环一一可迭代对象包含几个对象,该循环就对for 之前的“表达式”执行几次(相当于for 之前的表达式就是循环体),并将每次执行的值收集起来作为新的列表元素
for 表达式最终返回的是列表,因此for 表达式也被称为列表推导式
还可以在for 表达式后面添加if 条件,这样for 表达式将只迭代那些符合条件的元素
如果将for 表达式的方括号改为圆括号, for 表达式将不再生成列表,而是生成一个生成器(generator ),该生成器同样可使用for 循环选代。对于使用圆括号的for 表达式,它最终返回的是生成器,因此这种for 表达式也被称为生成器推导式

(8)常用工具函数
zip()函数
把两个列表(或元祖,字符串也行)‘压缩’ 成一字zip对象(可迭代对象),使用循环可以并行的循环两个列表;

l1 = [1,2,3,4]
l2 = [1,2,3,4]
r = [i for i in zip(l1,l2)]
print(r) 
# [(1, 1), (2, 2), (3, 3), (4, 4)]

返回的是一个列表,里边是由原列表元素组成的元祖
注意:列表元素数量不一样,zip()函数将以长度短的列表为准

l1 = [1,2,3,4]
l2 = [1,2,3]
r = [i for i in zip(l1,l2)]
print(r) # [(1, 1), (2, 2), (3, 3)]

reversed()函数
反向遍历,可接受列表、元祖、字符串(set集合和字典不行,否则报错)等参数。

s = (1,2,3,)
r = [i for i in reversed(s)]
print(r)
# [3, 2, 1]

sorted()函数
对列表、元祖、字符串进行反向排序

s = (1,2,3)
r = sorted(s)
r1 = sorted(s,reverse=True)
print(r) # [1, 2, 3]
print(r1) # [3, 2, 1]
  • 控制循环结构
    break
    break可以用来终止当前的循环语句,即使循环没结束,执行了break语句这个循环就终止了,直接跳出整个循环
def func2():
    for i in range(1,11):
        if i % 2 == 0:
            break
        #到第一个符合条件的情况下就停止。不输出符合条件的语句,并停止。
        print(i)
func2()
#  输出结果:1

continue
continue语句是用来告诉程序跳出本次循环,然后执行下一轮循环,不同与break,break是跳出整个循环,continue是结束这一次循环,继续下一次循环

def func():
    for i in range(1,11):
        if i % 2 == 0:
            continue
        #if判断后,跳过continue语句下的表达式。不输出print(i)
        print(i)
func()
# 输出结果:1 3 5 7 9

pass
pass语句实际上什么都不做,它只是在语法上需要一条语句但程序不需要进行任何操作时才使用

def func1():
    for i in range(1,11):
        if i % 2 == 0:
            pass
    #pass不做任何操作
        print(i)
func1()
# 1输出结果: 2 3 4 5 6 7 8 9 10

return
return语句用于从包围它的最直接方法,函数或匿名函数返回。本次只说使用return结束方法,其他return不在这次中过多说明

def test():
    # 外层循环
    for i in range(10):
        for j in range(10):
            print('i的值是:%d,j的值是:%d'%(i, j))
            if i == j:
                return
            print('return后的输出语句')
test()
# i的值是:0,j的值是:0

从这个运行结果来看,虽然 return 并不是专门用于控制循环结构的关键字 ,但通 return 语句确实可结束一个循环

相关文章

网友评论

      本文标题:第四章

      本文链接:https://www.haomeiwen.com/subject/ihfjgctx.html