控制流程(也称为流程控制)是计算机运算领域的用语,意指在程序运行时,个别的指令(或是陈述、子程序)运行或求值的顺序。
在程序开发中,一共有三种流程方式:
不管是多么复杂的程序,都是由这些很多简单的流程控制构建起来的。
if
语句是最简单的选择结构。如果满足条件就执行设定好的操作,不满足条件就执行其他其他操作。
正是因为有了判断,才使得程序世界丰富多彩,充满变化!
判断语句 又被称为 “分支语句”,正是因为有了判断,才让程序有了很多的分支
需求
# 1. 输入一个数字
num = int(input("请输入一个数字"))
# 2. 判断这个数是否为偶数
# if 语句以及缩进部分的代码是一个完整的代码块
if 0 == num % 2:
print("%s这个数是二的倍数" % num)
思考
在使用 if
判断时,只能做到满足条件时要做的事情。那如果需要在 不满足条件的时候,做某些事情,该如何做呢?
答案
else
,格式如下:
if 要判断的条件:
条件成立时,要做的事情
……
else:
条件不成立时,要做的事情
……
注意:
if
和 else
语句以及各自的缩进部分共同是一个 完整的代码块# 输入一个数字
num = int(input("请输入一个数字:"))
# elif 语句以及缩进部分的代码也是一个完整的代码块0
if 0 == num % 2:
print("%s这个数是二的倍数" % num)
# else 语句以及缩进部分的代码是一个完整的代码块
else:
print("%s可能是其他的数" % num)
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)
注意
elif
和 else
都必须和 if
联合使用,而不能单独使用if
、elif
和 else
以及各自缩进的代码,看成一个 完整的代码块elif 的应用场景是:同时 判断 多个条件,所有的条件是 平级 的
if
进行条件判断,如果希望 在条件成立的执行语句中 再 增加条件判断,就可以使用 if 的嵌套if 条件 1:
条件 1 满足执行的代码
……
if 条件 1 基础上的条件 2:
条件 2 满足时,执行的代码
……
# 条件 2 不满足的处理
else:
条件 2 不满足时,执行的代码
# 条件 1 不满足的处理
else:
条件1 不满足时,执行的代码
……
水仙花数(Narcissistic number)也被称为超完全数字不变数(pluperfect digital invariant, PPDI)、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),水仙花数是指一个 3 位数,它的每个位上的数字的 3 次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
需求
输入一个数,判断数字是否是水仙花数
# 输入一个数
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 条件1:
条件1满足执行的代码
不太建议使用,不满足条件时没有任何提示
只有两种情况下使用
if 条件1:
条件1满足执行的代码
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
语句基本语法需求 —— 打印 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
函数输出内容的后面增加 , end=""
""
中间可以指定 print
函数输出内容之后,继续希望显示的内容# 向控制台输出内容结束之后,不会换行
print("*", end="")
# 单纯的换行
print("")
end=""
表示向控制台输出内容结束之后,不会换行
假设 Python
没有提供 字符串的 *
操作 拼接字符串
需求
*
,每一行星号的数量依次递增*
**
***
****
*****
开发步骤
*
应该如何处理?列
的星星显示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
开发步骤
*
**
***
****
*****
******
*******
********
*********
*
替换成对应的行与列相乘# 定义起始行
row = 1
# 最大打印 9 行
while row <= 9:
# 定义起始列
col = 1
# 最大打印 row 列
while col <= row:
# end = "",表示输出结束后,不换行
# "\t" 可以在控制台输出一个制表符,协助在输出文本时对齐
print("%d * %d = %d" % (col, row, row * col), end="\t")
# 列数 + 1
col += 1
# 一行打印完成的换行
print("")
# 行数 + 1
row += 1
while condition:
do something
Python 频繁地使用迭代器。它允许在数据结构长度未知和具体实现未知的情况下遍历整个数据结构,并且支持迭代快速读写中的数据,以及允许不能一次读入计算机内存的数据流的处理。
在计算机科学里,遍历的一种,指的是按照某种规则,不重复地访问某个对象的所有内容的过程。
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() 函数可创建一个整数列表,一般用在 for 循环中。
函数语法:
range(start, stop[, step])
参数说明:
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 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="\t")
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
是专门在循环中使用的关键字
break
某一条件满足时,退出循环,不再执行后续重复的代码continue
某一条件满足时,不执行后续重复的代码
break
和continue
只针对 当前所在循环 有效
从内部中断循环
break
退出循环
break
只针对当前所在循环有效
案例:登录账号
passworld = '123456'
while True:
passwd = input("请输入密码")
if passwd == passworld:
# 当满足条件时 中断循环
break
# 重复执行的代码
print("输入的密码错误,请重新输入")
continue
#
for i in range(10):
if i % 2 == 0:
continue
print(i)
continue
时,条件处理部分的代码,需要特别注意,不小心会出现 死循环
continue
只针对当前所在循环有效
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('正常结束')