06-流程控制

程序的三大流程

控制流程(也称为流程控制)是计算机运算领域的用语,意指在程序运行时,个别的指令(或是陈述子程序)运行或求值的顺序。

  • 在程序开发中,一共有三种流程方式:

    • 顺序 —— 从上向下,顺序执行代码
    • 分支 —— 根据条件判断,决定执行代码的 分支
    • 循环 —— 让 特定代码 重复 执行

不管是多么复杂的程序,都是由这些很多简单的流程控制构建起来的。

判断(if)语句

if语句是最简单的选择结构。如果满足条件就执行设定好的操作,不满足条件就执行其他其他操作。

判断的定义

  • 如果 条件满足,才能做某件事情,
  • 如果 条件不满足,就做另外一件事情,或者什么也不做

正是因为有了判断,才使得程序世界丰富多彩,充满变化!

判断语句 又被称为 “分支语句”,正是因为有了判断,才让程序有了很多的分支

判断偶数

需求

  1. 输入一个数
  2. 如果这个数为偶数就打印
# 1. 输入一个数字
num = int(input("请输入一个数字"))

# 2. 判断这个数是否为偶数
# if 语句以及缩进部分的代码是一个完整的代码块
if 0 == num % 2:
    print("%s这个数是二的倍数" % num)

else

思考

在使用 if 判断时,只能做到满足条件时要做的事情。那如果需要在 不满足条件的时候,做某些事情,该如何做呢?

答案

else,格式如下:

if 要判断的条件:
    条件成立时,要做的事情
    ……
else:
    条件不成立时,要做的事情
    ……

注意

  • ifelse 语句以及各自的缩进部分共同是一个 完整的代码块
# 输入一个数字
num = int(input("请输入一个数字:"))

# elif 语句以及缩进部分的代码也是一个完整的代码块0
if 0 == num % 2:
    print("%s这个数是二的倍数" % num)
   
# else 语句以及缩进部分的代码是一个完整的代码块
else:
    print("%s可能是其他的数" % num)

if 语句进阶

elif

  • 在开发中,使用 if 可以 判断条件
  • 使用 else 可以处理 条件不成立 的情况
  • 但是,如果希望 再增加一些条件条件不同,需要执行的代码也不同 时,就可以使用 elif
  • 语法格式如下:
if 条件1:
    条件1满足执行的代码
    ……
elif 条件2:
    条件2满足时,执行的代码
    ……
elif 条件3:
    条件3满足时,执行的代码
    ……
else:
    以上条件都不满足时,执行的代码
    ……
# 输入一个数字
num = int(input("请输入一个数字:"))


# 判断这个数是否为偶数
# if 语句以及缩进部分的代码是一个完整的代码块
if not num:
    print("你输入的是零或者不是数字")

# elif 语句以及缩进部分的代码也是一个完整的代码块0
elif 0 == num % 2:
    print("%s这个数是二的倍数" % num)

elif 0 == num % 3:
    print("%s这个数是三的倍数" % num)

elif 0 == num % 4:
    print("%s这个数是三的倍数" % num)

# else 语句以及缩进部分的代码是一个完整的代码块
else:
    print("%s可能是其他的数" % num)

注意

  1. elifelse 都必须和 if 联合使用,而不能单独使用
  2. 可以将 ifelifelse 以及各自缩进的代码,看成一个 完整的代码块

elif 的应用场景是:同时 判断 多个条件,所有的条件是 平级

  • 在开发中,使用 if 进行条件判断,如果希望 在条件成立的执行语句中增加条件判断,就可以使用 if 的嵌套
  • if 的嵌套 的应用场景就是:在之前条件满足的前提下,再增加额外的判断
  • if 的嵌套 的语法格式,除了缩进之外 和之前的没有区别
  • 语法格式如下:
if 条件 1:
    条件 1 满足执行的代码
    ……
    
    if 条件 1 基础上的条件 2:
        条件 2 满足时,执行的代码
        ……    
        
    # 条件 2 不满足的处理
    else:
        条件 2 不满足时,执行的代码
        
# 条件 1 不满足的处理
else:
    条件1 不满足时,执行的代码
    ……

if 的嵌套—水仙花素

水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。

需求

输入一个数,判断数字是否是水仙花数

  • 水仙花素是一个三位数
  • 每个位上的数字的 3 次幂之和等于它本身

# 输入一个数
num_str = input("请输入一个三位数:")
num = int(num_str)

# 判断输入数是否正确
if num > 100 and num < 1000:
    print("输入的数正确,继续验证。。。")
    
    num1 = int(num_str[0])
    num2 = int(num_str[1])
    num3 = int(num_str[2])
    
    num4 = num1**3 + num2**3 + num3**3
    # 每个位上的数字的 3次幂之和等于它本身
    if num4 == num:
        print("{} 是水仙花数".format(num))
    else:
        print("{} 不是水仙花数".format(num))

else:
    print("输入的数字不可能是水仙花数,请重新验证")

总结

if 的三种形式

  • if
if 条件1:
    条件1满足执行的代码

不太建议使用,不满足条件时没有任何提示

  • if ... else

只有两种情况下使用

if 条件1:
    条件1满足执行的代码
else:
    以上条件都不满足时,执行的代码
    ……
  • if ... elif ... elif ... else

多条件选择使用

if 条件1:
    条件1满足执行的代码
    ……
elif 条件2:
    条件2满足时,执行的代码
    ……
elif 条件3:
    条件3满足时,执行的代码
    ……
else:
    以上条件都不满足时,执行的代码
    ……

if嵌套

if 条件1:
    if 条件 1 基础上的条件 2:
        条件 2 满足时,执行的代码
        ……    
    # 条件 2 不满足的处理
    else:
        条件 2 不满足时,执行的代码
else:
    以上条件都不满足时,执行的代码
    ……

循环

while是计算机的一种基本循环模式。当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。while语句的一般表达式为:while(表达式){循环体}。

while 循环基本使用

循环的作用就是让 指定的代码 重复的执行

while 循环最常用的应用场景就是 让执行的代码 按照 指定的次数 重复 执行

while 语句基本语法

第一个 while 循环

需求 —— 打印 5 遍 Hello Python

思考 —— 如果要求打印 100 遍怎么办?

注意:while 语句以及缩进部分是一个 完整的代码块

# 1. 定义重复次数计数器
i = 1

# 2. 使用 while 判断条件
while i <= 5:
    # 要重复执行的代码
    print('Hello Python !')

    # 处理计数器 i
    i = i + 1

print("循环结束后的 i = %d" % i)

注意:循环结束后,之前定义的计数器条件的数值是依旧存在的

限制条件的位置不同,造成的结果也不同

死循环

由于程序员的原因,忘记 在循环内部 修改循环的判断条件,导致循环持续执行,程序无法终止!

循环计算

用嵌套打印小星星

需求

  • 在控制台连续输出五行 *,每一行星号的数量依次递增
*
**
***
****
*****
  • 使用字符串 * 打印
# 1. 定义一个计数器变量,从数字1开始,循环会比较方便
row = 1

while row <= 5:
    
    print("*" * row)
    
    row += 1

循环嵌套打印小星星

print 函数的使用做一个增强

  • 在默认情况下,print 函数输出内容之后,会自动在内容末尾增加换行
  • 如果不希望末尾增加换行,可以在 print 函数输出内容的后面增加 , end=""
  • 其中 "" 中间可以指定 print 函数输出内容之后,继续希望显示的内容
  • 语法格式如下:
# 向控制台输出内容结束之后,不会换行
print("*", end="")

# 单纯的换行
print("")

end="" 表示向控制台输出内容结束之后,不会换行

假设 Python 没有提供 字符串的 * 操作 拼接字符串

需求

  • 在控制台连续输出五行 *,每一行星号的数量依次递增
*
**
***
****
*****

开发步骤

  1. 完成 5 行内容的简单输出
  2. 分析每行内部的 * 应该如何处理?
  • 每行显示的星星和当前所在的行数是一致的
  • 嵌套一个小的循环,专门处理每一行中 的星星显示
row = 1

while row <= 5:

    # 假设 python 没有提供字符串 * 操作
    # 在循环内部,再增加一个循环,实现每一行的 星星 打印
    col = 1

    while col <= row:
        print("*", end="")

        col += 1

    # 每一行星号输出完成后,再增加一个换行
    print("")

    row += 1

九九乘法表

需求 输出 九九乘法表,格式如下:

1 * 1 = 1	
1 * 2 = 2	2 * 2 = 4	
1 * 3 = 3	2 * 3 = 6	3 * 3 = 9	
1 * 4 = 4	2 * 4 = 8	3 * 4 = 12	4 * 4 = 16	
1 * 5 = 5	2 * 5 = 10	3 * 5 = 15	4 * 5 = 20	5 * 5 = 25	
1 * 6 = 6	2 * 6 = 12	3 * 6 = 18	4 * 6 = 24	5 * 6 = 30	6 * 6 = 36	
1 * 7 = 7	2 * 7 = 14	3 * 7 = 21	4 * 7 = 28	5 * 7 = 35	6 * 7 = 42	7 * 7 = 49	
1 * 8 = 8	2 * 8 = 16	3 * 8 = 24	4 * 8 = 32	5 * 8 = 40	6 * 8 = 48	7 * 8 = 56	8 * 8 = 64	
1 * 9 = 9	2 * 9 = 18	3 * 9 = 27	4 * 9 = 36	5 * 9 = 45	6 * 9 = 54	7 * 9 = 63	8 * 9 = 72	9 * 9 = 81

开发步骤

  1. 打印 9 行小星星
*
**
***
****
*****
******
*******
********
*********
  1. 将每一个 * 替换成对应的行与列相乘
# 定义起始行
row = 1

# 最大打印 9 行
while row <= 9:
    # 定义起始列
    col = 1

    # 最大打印 row 列
    while col <= row:

        # end = "",表示输出结束后,不换行
        # "	" 可以在控制台输出一个制表符,协助在输出文本时对齐
        print("%d * %d = %d" % (col, row, row * col), end="	")

        # 列数 + 1
        col += 1

    # 一行打印完成的换行
    print("")

    # 行数 + 1
    row += 1

总结:

while condition:
	do something

for迭代

Python 频繁地使用迭代器。它允许在数据结构长度未知和具体实现未知的情况下遍历整个数据结构,并且支持迭代快速读写中的数据,以及允许不能一次读入计算机内存的数据流的处理。

在计算机科学里,遍历的一种,指的是按照某种规则,不重复地访问某个对象的所有内容的过程。

for语句

for item in 'hello world !':
	print(item)

for i in range(10)

In [15]: for i in range(10):
    ...:     print(i)
    ...:
0
1
2
...

range

range() 函数可创建一个整数列表,一般用在 for 循环中。

函数语法:

range(start, stop[, step])

参数说明:

  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
In [18]: list(range(10))
Out[18]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

In [21]: tuple(range(10))
Out[21]: (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

for迭代可迭代对象

for可以迭代所有可迭代对象(字符串、列表、元组、集合、字典)

for num in list(range(1000)):
	print(num)

案例:用 for 迭代获取所有水仙花数

for num in range(1000):
	
	print(num)

案例:用for循环实现九九乘法表

for row in range(1, 10):
    
    for col in range(1, row + 1):
        
        print("%d * %d = %d" % (col, row, row * col), end="	")
        
    print()

提升(长见识):

用for实现水仙花数

for x in range(0, 10):
    for y in range(0, 10):
        for z in range(1, 10):
            sum = z * 100 + y * 10 + x
            if sum == x ** 3 + y ** 3 + z ** 3:
                print(sum)
# 列表推导式
[(x ** 3 + y ** 3 + z ** 3) for x in range(1, 10) for y in range(0, 10) for z in range(0, 10) if (x*100+y*10+z) == x ** 3 + y ** 3 + z ** 3]

break 和 continue

breakcontinue 是专门在循环中使用的关键字

  • break 某一条件满足时,退出循环,不再执行后续重复的代码
  • continue 某一条件满足时,不执行后续重复的代码

breakcontinue 只针对 当前所在循环 有效

break

从内部中断循环

  • 在循环过程中,如果 某一个条件满足后 再希望 循环继续执行,可以使用 break 退出循环

break 只针对当前所在循环有效

案例:登录账号

passworld = '123456'

while True:
	
    passwd = input("请输入密码")	
    if passwd ==  passworld:
		# 当满足条件时 中断循环
        break

    # 重复执行的代码
    print("输入的密码错误,请重新输入")

continue

  • 在循环过程中,如果某一个条件满足后,不希望执行循环代码,但是又不希望退出循环,可以使用 continue
  • 也就是:在整个循环中,只有某些条件,不需要执行循环代码,而其他条件都需要执行
# 
for i in range(10):
    if i % 2 == 0:
        continue
    print(i)
  • 需要注意:使用 continue 时,条件处理部分的代码,需要特别注意,不小心会出现 死循环

continue 只针对当前所在循环有效

else语句

else 可以在while和for循环中运用,else和while或for搭配使用,不再是条件判断的含义。而是当while条件不成立时,直接跳出while循环,执行else输出如:

else与while一起使用

而是当while条件不成立时,直接跳出while循环,执行else输出如:

count = 0
while count < 12:
   if 5 == count:
        print('中断 while else 语句')
        # 中断 while else 语句
        break
   count += 1
else:
   print('正常结束')

else与for一起使用

count = 0
for i in range(10):
	if 5 == count:
        print('中断 for else 语句')
        # 中断 for else 语句
        break
else:
   print('正常结束')
原文地址:https://www.cnblogs.com/mark-wq/p/12672908.html