程序的流程图
a程序的基本结构
程序由三种基本结构组成:
顺序结构
分支结构
循环结构
这些基本结构都有一个入口和一个出口。任何程序都由这三种基本结构组合而成。
1.,顺序结构是程序按照线性顺序依次执行的一种运行方式。其中“语句块1”和“语句块2”表示一个或一组顺序执行的语句。
2.分支结构是程序根据条件判断结果而选择不同向前执行路径的一种运行方式。包括:
单分支结构
二分支结构
多分支结构
3.循环结构是程序根据条件判断结果向后反复执行的一种运行方式。根据循环体触发条件不同,包括:
条件循环结构
遍历循环结构
程序的基本结构实例
IPO描述
IPO描述主要用于区分程序的输入输出关系,重点在于结构划分,算法主要采用自然语言描述。
输入:圆半径R
处理:
圆面积:S = π*R*R
圆周长:L = 2*π*R
输出:
圆面积S、
周长L
流程图描述
流程图描述侧重于描述算法的具体流程关系,流程图的结构化关系相比自然语言描述更进一步,有助于阐述算法的具体操作过程。
Python代码方式描述
Python代码描述是最终的程序产出,最为细致。
b、程序的分支结构
Python中,if 语句的语法格式如下:
语句块是 if 条件满足后执行的一个或多个语句序列
语句块中语句通过与 if 所在行形成缩进表达包含关系
if语句首先评估<条件>的结果值:
如果结果为True,则执行语句块里的语句序列,然后控制转向程序的下一条语句。
如果结果为False,语句块里的语句会被跳过。
然后Python依次评估寻找第一个结果为True的条件,执行该条件下的语句块,同时结束后跳过整个if-elif-else结构,执行后面的语句。
如果没有任何条件成立,else下面的语句块被执行。else子句是可选的。
If 语句中<条件>部分可以使用任何能够产生True或False的语句--布尔表达式,为bool类型
对于数字(整型和浮点型):零值被认为是false;任何非零值都是true
对于序列类型:一个空序列被解释为false;而任何非空序列被解释为true
布尔运算符and(和)和or(或者)用于组合两个布尔表达式,并产生一个布尔结果
not运算符是一个一元运算符,用来计算一个布尔表达式的反
优先级:从高分到低分依次是not、and最低是or
单分支结构
多分支结构
实例:身体质量指数BMI
BMI的定义如下:
BMI = 体重(kg)÷身高2(m2)
例如:一个人身高1.75米、体重75公斤,他的BMI值为24.49。
例一
例二
c、程序的循环结构
break:终止此循环结构
continue:终止本次循环
1.遍历循环:for语句
根据循环执行次数的确定性,循环可以分为确定次数循环和非确定次数循环。
确定次数循环(遍历循环)指循环体对循环次数有明确的定义,循环次数采用遍历结构中元素个数来体现。
Python通过保留字for实现“遍历循环”:
for <循环变量> in <遍历结构>:
<语句块>
遍历结构可以是字符串、文件、组合数据类型或range()函数:
遍历循环还有一种扩展模式,使用方法如下:
for <循环变量>
in <遍历结构>:
<语句块1>
else:
<语句块2>
当for循环正常执行之后,程序会继续执行else语句中内容。else语句只在循环正常执行之后才执行并结束。
因此可以在<语句块2>中放置判断循环执行情况的语句。
不执行else,继续循环
缺点:
程序开始时必须提供输入数字总数
大规模数字求平均值需要用户先数清楚个数
for循环是需要提供固定循环次数的循环方式
Python提供了另一种循环模式:无限循环,不需要提前知道循环次数,也叫条件循环
2.无限循环:while语句
continue:跳出本次循环
无限循环(条件循环)一直保持循环操作直到特定循环条件不满足才结束,不需要提前知道确定循环次数。
Python通过保留字while实现无限循环。
Python通过保留字while实现无限循环,使用方法如下:
while <条件>:
<语句块>
条件和if语句的判断条件一样,是布尔表达式。
语句块是一条或多条语句。
条件总是在循环顶部被判断,即在循环体(语句块)执行之前,这种结构又被称为前测循环。
无限循环也有一种使用保留字else的扩展模式:
while <条件>:
<语句块1>
else:
<语句块2>
如果循环体忘记累加计数器idx,条件判断一直为真,循环体将一直执行,这就是所谓的死循环程序
这时通常使用
3. continue和break
continue:跳出本次循环
break:终止此循环结构
4. 交互循环
交互式循环是无限循环的一种
允许用户通过交互的方式重复程序的特定部分
以交互循环的视角重新审视求平均数程序,伪码如下:
初始化sum为0
初始化count为0
初始化moredata为"yes"
当moredata值为"yes"时
输入数字x
将x加入sum
count值加1
询问用户是否还有moredata需要处理
输出
5. 哨兵循环
执行循环直到遇到特定的值,循环语句才终止执行的循环结构设计方法
哨兵循环是求平均数的更好方案,思路如下:
设定一个哨兵值作为循环终止的标志
任何值都可以做哨兵,但要与实际数据有所区别
伪码如下:
接收第一个数据
while这个数据不是哨兵
程序执行相关语句
接收下一个数据项
在求考试分数平均数的程序中,可以设定负数为哨兵
6.文件循环
之前求平均数的数字都是用户输入的,如果几百个数求平均,输入困难且容易出错
面向文件的方法是数据处理的典型应用
可以事先将数据录入到文件中,然后将这个文件作为程序的输入,避免人工输入的麻烦,便于编辑修改
d、random库的使用
random库概述
随机数在计算机应用中十分常见,Python内置random库主要用于产生各种分布的伪随机数序列。random库采用梅森旋转算法(Mersenne twister)生成伪随机数序列,可用于除随机性要求更高的加解密算法外的大多数工程应用
使用random库主要目的是生成随机数,因此,读者只需要查阅该库的随机数生成函数,找到符合使用场景的函数使用即可。
这个库提供了不同类型的随机数函数,所有函数都是基于最基本的random.random()函数扩展而来。
对random库的引用方法与math库一样,采用下面两种方式实现:
from random import *
或import random
e、π的计算
应用蒙特卡罗方法求解π的基本步骤如下:
1.随机向单位正方形和圆结构,抛洒大量“飞镖”点
2.计算每个点到圆心的距离从而判断该点在圆内或者圆外
3.用圆内的点数除以总点数就是π/4值。
随机点数量越大,越充分覆盖整个图形,计算得到的π值越精确。实际上,这个方法的思想是利用离散点值表示图形的面积,通过面积比例来求解π值。
π计算问题的IPO表示如下:
1.输入:抛点的数量
2.处理:对于每个抛洒点,计算点到圆心的距离,通过距离判断该点在圆内或是圆外。统计在圆内点的数量
3.输出:π值。
Python代码