04. 流程控制

一、流程控制

  流程控制就是用来控制程序运行中各语句执行顺序的语句。基本的流程结构为:顺序结构分支结构(或称选择结构),循环结构

  • 顺序结构:程序自上到下执行,中间没有任何判断和跳转;
  • 分支结构:根据条件,选择性的执行某段代码,有 if……elseswitch……case 两种分支语句;
  • 循环结构:根据循环条件,重复性的执行某段代码,有 whiledo……whilefor 三种循环语句;

二、顺序结构

  顺序结构 是 Python 程序默认的执行流程,按照代码的先后顺序,从上到下依次执行,中间没有任何的判断和跳转

顺序结构执行流程

print("你好,世界!")
print("Hello world!")

三、分支结构

  选择语句 也被称为 分支语句,它通过给定的条件进行判断,从而决定执行两个或者多个分支中哪一只。因此,在编写选择语句之前,应该首先明确判断条件是什么,并确定判断结果为“真”或“假”时应分别执行什么样的操作/算法。在 Python 语言中提供了if 语句用来实现分支结构

3.1、if语句的单分支结构

  Python 中使用 if 关键字来组成选择语句。

if 关系表达式:
    代码块

  执行流程

  1. 首先计算 关系表达式 的值
  2. 如果关系表达式的值为 执行语句体
  3. 如果关系表达式的值为 不执行语句体
  4. 继续执行后面的其它语句

if语句的单分支结构

  代码块中保存着一组代码,同一个代码块中的代码,要都执行要么都不执行。代码块就是一种为代码分组的机制。代码块以缩进开始,直到代码恢复到之前的缩进级别时结束。

num = int(input("请输入一个数:"))
if num > 10: 
    print("你输入的数比10大") 
    print("你输入的数字大于10")
print("你输入的数字是:", num)

  使用 if 语句时,如果只有一条语句,语句块可以直接写到 “:” 的右侧。

num = int(input("请输入一个数:"))
if num > 10: print("你输入的数比10大") 
print("你输入的数字是:", num)

  在 Python 中,if 语句可以使用逻辑运算符来连接多个条件,如果希望所有条件同时满足,则需要使用 and,如果希望只要有一个条件满足即可,则需要使用 or。

num = int(input("请输入一个数:"))
if num < 10 or num > 20: 
    print("你输入的数不在10和20之间")
print("你输入的数字是:", num)
print()

num = int(input("请输入一个数:"))
if 10 <= num <= 20: 
    print("你输入的数在10和20之间")
print("你输入的数字是:", num)

Python 对代码的缩进要求非常严格,同一级别的代码块的缩进量必须相同。如果不采用合理的代码缩进,将抛出 SyntaxError 异常;

在 if 结构里面还可以嵌套 if 结构,代码块是可以嵌套的,每增加一个缩进级别,代码块就低一级;

3.2、if语句的双分支结构

if 关系表达式:
    代码块1
else: 
    代码块2

  执行流程

  1. 首先计算 关系表达式 的值
  2. 如果关系表达式的值为 就执行 语句体 1
  3. 如果关系表达式的值为 就执行 语句体 2
  4. 继续执行后面的其它语句

if语句的双分支结构

num = int(input("请输入一个数:"))
if num > 10: 
    print("你输入的数比10大") 
else:
    print("你输入的数不大于10")
print("你输入的数字是:", num)

  if..else 语句可以使用关系表达式进行简化。

语句1 if 条件表达式 else 语句2

  它的执行流程如下:

  • 条件运算符在执行时,会先对条件表达式进行求值判断
    • 如果判断结果为 True,则执行语句 1,并返回执行结果
    • 如果判断结果为 False,则执行语句 2,并返回执行结果
num = int(input("请输入一个数:"))
print("你输入的数比10大") if num > 10 else print("你输入的数不大于10")

3.3、if语句的多分支结构

if 关系表达式1:
    代码块1;
elif 关系表达式2:
    代码块2;
……
else:
    代码块n+1;

  执行流程

  1. 首先计算 关系表达式 1 的值
  2. 如果为 就执行 语句体 1;如果为 就计算 关系表达式 2 的值
  3. 如果为 就执行 语句体 2;如果为 就计算 关系表达式 3 的值
  4. ……
  5. 如果 所有的关系表达式 结果都为 ,就执行 else 子句中的 语句体 n+1
  6. 继续执行其它语句

if语句的多分支结构

num = int(input("请输入一个数:"))
if num > 10: 
    print("你输入的数比10大") 
elif num < 10:
    print("你输入的数比10小")
else:
    print("你输入的数等于10")

  else 是一条包罗万象的语句,只要不满足任何 if 和 elif 中的条件测试,其中的代码就会执行。这可能引入无效甚至恶意的数据。如果知道最终要测试的条件,应考虑使用一个 elif 代码块来代替 else 代码块。这样就可以肯定,仅当满足相应的条件时,代码才会执行。

num = int(input("请输入一个数:"))
if num > 10: 
    print("你输入的数比10大") 
elif num < 10:
    print("你输入的数比10小")
elif num == 10:
    print("你输入的数等于10")

else 结构是可选的;

if-elif-else 结构中最多只会有一个代码块会执行;

如果多个条件表达式之间是“互斥”关系,哪个判断和执行语句声明在上面还是下面,无所谓;

如果多个条件表达式之间有“交集”关系,需根据实际情况,考虑清除应该将哪个结构写在上面;

如果多个条件表达式之间有 “包含”关系,通常情况下,需要 将范围小的声明在范围大的上面。否则,范围小的没机会执行;

四、循环结构

  循环就是重复的做某件事情;它具有明确的开始和停止标志;一组被重复执行的语句称之为 循环体,能否继续执行,取决于 循环的终止条件。在 Python 中循环分为 for循环while循环;循环结构具有以下四个组成部分:

  1. 初始化部分(init_statement)
  2. 循环条件部分(test_exp)
  3. 循环体部分(body_statement)
  4. 迭代部分(alter_statement)

  通常情况下,循环结构都是因为②中循环条件返回false;

4.1、for循环

  for 循环时一个计次循环,通常适用于枚举或遍历序列,以及迭代对象中的元素。一般应用在循环对象已知的情况下。

for 迭代变量 in 可迭代对象:
    语句块
else:
    代码块

  其中,迭代变量用于保存读取出的值;对可迭代对象可以是任何有序的序列对象,如列表、元组、字符串等;

  执行流程

  1. 判断可迭代对象中是否还有项
    • 如果 没有,则循环结束,继续执行后面的其它语句
    • 如果 ,则 执行循环体语句
  2. 下一项
  3. 回到 ① 继续执行 条件判断语句
  4. 如果循环正常结束(即没有被 break 打断的情况下),则执行 else 中的代码块

for循环的执行流程

for element in "Sakura":
    print(element,end="")
else:
    print("\n循环执行完毕")

print("\n其它语句开始执行")

  for 循环还可以和 range() 函数搭配使用,range() 可以用来生成一个自然数的序列,它有三个参数,第一个参数是 起始位置,可以省略,默认是 0,第二个参数是 结束位置,第三个参数是 步长,也可以省略,默认是 1。

for i in range(0,10,2):
    print(i)

  步长可以为负,用来实现倒计时的效果。

for i in range(5,-1,-1):
    print(i)

4.2、while循环

①初始化条件
while ②循环条件:
    ③循环体
    ④迭代条件
else:
    代码块

  执行流程

  1. 执行 初始化语句
  2. 执行 条件判断语句,看其结果是 真 还是 假
    • 如果是 循环结束,如果循环有 else ,则执行 else 里面的代码块,然后继续执行后面的其它语句
    • 如果是 执行循环体语句
  3. 执行 条件控制语句
  4. 回到②继续执行 条件判断语句
  5. 如果循环正常结束(即没有被 break 打断的情况下),则执行 else 中的代码块

while循环的执行流程

i = 0
while i < 10:
    print(i)
    i += 1
else:
    print("循环执行完毕")

print("其它语句执行了")

  在要求满足很多条件才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量称为 标志(flag),充当程序的交通信号等。可以让程序在标志为 True 时继续运行,并在任何时间导致标志为 False 时让程序停止运行。这样,在 while 语句中就只需检查一个条件:标志的当前值是否为 True。然后将所有测试(是否应将标志设置为 False 的事件)都放在其它地方,从而让程序更整洁。

i = 0
flag = True

while flag:
    print(i)
    i += 1
  
    if i == 10:
        flag = False
else:
    print("循环执行完毕")

print("其它语句执行了")

4.4、无限循环

  while 循环的无限循环:

while True:
    循环体

4.5、嵌套循环

  将一个循环结构A声明在另一个循环结构B的循环体,就构成了嵌套循环;

  • 外层循环:循环结构B,控制行数
  • 内层循环:循环结构A,控制列数

  内层结构遍历一遍,相当于外层循环循环体执行一次;假设外层循环需要执行 m 次,内层循环需要执行 n 次。此时内层循环的循环体一共执行了 m*n 次;

i = 1
while i <= 9:
    j = 1
    while j <= i:
        print(j, "*", i,"=", i*j, end="\t")
        j += 1
    print()
    i += 1

4.6、跳转语句

  • break结束当前循环,后面不能直接写执行语句,默认跳出包裹此关键字最近的一层循环;
  • continue结束当次循环,后面不能直接写执行语句,默认结束包裹此关键字最近的循环的一次;
i = 0
while(i < 5):
    i += 1
    if(i == 3):
        break
    print("i = ", i)
else:
    print("循环结束")
i = 0
while(i < 5):
    i += 1
    if(i == 3):
        continue
    print("i = ", i)
else:
    print("循环结束")

break 和 continue 语句只能配合循环语句使用,不能单独和 if 使用;

break 和 continue 都是只对离它最近的循环起作用;

五、pass空语句

  在 Python 中,还有一个 pass 语句,表示空语句,是为了保持程序结构的完整性。它不做任何事情,一般起到占位的作用。在 Python 3 中,我们可以使用 ... 代替 pass 语句。

# 模块,通过模块可以对Python进行扩展
# 引入一个time模块,来统计程序执行时间
from time import *

# time()函数可以用来获取当前的时间,返回的单位是秒
begin = time()
num = 100000

# 获取num以内的所有质数
i = 2
while i <= num**0.5:
    flag = True
    j = 2
    while j < i:
        if i % j == 0:
            # 一旦进入判断,则证明i一定不是质数
            flag = False
            # 此时内循环没有继续执行的必要
            # 使用break提前退出循环
            break
        j += 1
    if flag:
        pass
        # print(i)
    i += 1   

end  = time()
print("花费的时间:", end - begin, "秒")  
posted @ 2024-09-12 21:38  星光映梦  阅读(17)  评论(0编辑  收藏  举报