内容正文:
第二章 算法与程序设计
本单元的内容结构如下:本单元以学科大概念“算法”为主题组织教学内容,在运用算法解决问题的过程中,需要在根据真实情境界定问题的基础上,按照“抽象与建模→设计、描述算法→算法的程序实现”这个路径去逐步实现。
本单元的内容结构如下:
(一)抽象与建模
1. 符号化数据:通过抽象,从复杂的现实世界问题中抽取出与解决问题有关的要素并符号化表示。
2. 建立计算模型:对要素加以确定或假设,定义出一个有明确已知条件和求解目标的问题,并用数学符号描述解决该问题的计算模型。
(二)设计、描述算法
1.算法的概念
广义地讲,“算法”指的是解决问题或完成任务的一系列步骤。在计算机科学领域内,“算法”指的是用计算机解决问题的步骤,是为了解决问题而需要让计算机有序执行的、无歧义的、有限步骤的集合。
2. 算法的特征
①有穷性:处理步骤必须是有限的。
②可行性:每一步的操作与要求都是可行的,并且能在有限的时间内完成。
③确定性:每一步的执行描述必须是明确的。
④有0个或多个输入:算法被执行时,数据可以从外部获取,也可以包含在算法中。
⑤有1个或多个输出:算法必须有问题求解的结果,且至少包含一个输出。
3. 算法的要素
(1)数据:用算法解决问题时,必须明确参与运算的初始数据、运算时产生的中间数据以及问题解决的结果数据。
(2)运算:在对数据进行运算时,必须明确每一步的运算是什么、对哪些数据进行运算等。
(3)控制转移:在算法执行过程中,有时需要根据数据或运算结果的特点进行不同的处理,需要运用控制转移来执行不同的操作。
4. 算法的描述:常见的算法描述方式有自然语言、流程图、伪代码、计算机程序设计语言等。
5. 算法的控制结构:算法的控制结构有顺序结构、分支结构和循环结构三种。
顺序结构 分支结构 循环结构
(三)算法的程序实现
1.编程环境
要让计算机按照预先设计的算法进行处理,需要将该算法用计算机程序设计语言进行描述,形成计算机程序。通过运行程序,让计算机自动执行程序中的命令,并对结果进行检测分析和验证。
2. Python语言基础
(1) 基本数据类型:Python常见的基本数据类型有整型、实型、字符串型、布尔型。
(2)基本运算符:
算术运算符
关系运算表
其中,“in”成员资格运算符用来检查一个值是否包含在指定的序列中,以下示例使用了成员资格运算符分别检查“w”和“x”是否出现在字符串“rw”中。
逻辑运算表
【注意】三种基本运算优先级:算术运算>关系运算>逻辑运算
(3)变量和赋值语句
1.变量命名规则:
①变量名由字母(包含汉字)、数字、下划线(_)组成
②首字只能以字母或下划线(_)开头,不能以数字开头。
③变量名不能和Python的关键字相同,比如 print、input
④区分大小写。如 SUM ≠ sum ≠ Sum
2.赋值语句:
赋值符号:= 功能:将表达式的值赋给左边变量的语句。
基本格式:变量名 = 表达式
一次给多个变量赋值:x=y=z=1 x,y,z=1,5,9
两个变量的交换:x,y=y,x
多个变量赋值写在同一行时,用分号隔开,如:x=1;y=2;z=3
赋值运算符:- = 、+= 、*= 、/= 、%=
(4)基本数据结构
1.字符串和列表:字符串和列表都是由一些数据元素共同组成的一个序列整体。
字符串:由0个或多个字符组成的序列(有单引号或者双引号标识)
例:“中天高中” “1234” ‘abc’ ‘1+2=3’
长度计算:len()
2.列表:由0个或多个元素组成的序列(不同类型的元素可以存在于同一列表当中)
例:[3,5,7] [1,3,“a”,”b”,”c”](列表用方括号[ ]表示,元素之间用逗号分割)
定义n 个元素组成的列表格式:List =[元素1,元素2,… ,元素n]。
字符串或列表中的元素,可以通过索引进行访问。
索引 0 1 2 N-3 N-2 N-1
序列 ……
索引查找——语法格式:列表名[索引值]
正向索引:从左向右计数,从起始元素开始,索引值从0开始递增
逆序索引:从右向左计数,从起始元素开始,索引值从-1开始递减
切片操作——语法格式:列表名 [start : end : step]
【注意】一个完整的切片表达式包含两个“:”,用于分隔三个参数(start(包含)、end(不包含)、step),当只有一个“:”时,默认第三个参数step=1。
列表的相关操作
ls=[1,2,3] ls = ls*3
运行结果: [1,2,3,1,2,3,1,2,3]
ls=[1,2,3] ls = ls+[7]
运行结果: [1,2,3,7]
1).append( ) 语法格式:listname.append(obj)(将插入的元素整体插入)
list=['a','x','b']
list.append('do')
print(list)
运行结果:['a', 'x', 'b', 'do']
list=['a','x','b']
list.append(['do'])
print(list)
运行结果:['a', 'x', 'b', ['do']]
2).extend( ) 语法格式:listname.extend (obj) (插入序列中的元素)
list=['a','x','b']
list.extend(['do'])
print(list)
运行结果:['a', 'x', 'b', 'do']
list=['a','x','b']
list.extend('do')
print(list)
运行结果:['a', 'x', 'b', 'd','o']
extend( )与.append( )的区别:append会将插入的元素视为一个整体,,extend是把序列包含的元素逐个添加到列表中
3).insert( ) 语法格式:listname.insert (index,obj)
例:a.insert(0,x)会插到整个列表的之前,而a.insert(len(a),x)相当于a.append( )。
List = [123, 'xyz', 'zara', 'abc']
List.insert( 3, 2009)
运行结果: [123, 'xyz', 'zara',2009, 'abc']
4).remove( ) 语法格式:listname.remove ( )
需指定要删除的元素的值(若该元素在列表中多次出现,则删除第一个)
list=[1,2,3,7,'a','x','b']
list.remove('a')
print(list)
运行结果:[1, 2, 3, 7, 'x', 'b']
2)使用列表方法.pop( ) 语法格式:listname.pop ( )
5).pop() 删除列表中的一个元素,默认删除最后一个元素,删除具体位置上的元素要指定索引值。
list=[1,2,3,7,'a','x','b']
list.pop(2)
print(list)
运行结果:[1, 2, 7, 'a', 'x', 'b']
list=[1,2,3,7,'a','x','b']
list.pop()
print(list)
运行结果:[1,2,3,7,'a','x']
6).clear( ) clear,可以清除列表中的所有元素,清除完列表就会变成一个空列表。
list=[1,2,3,7,'a','x','b']
list.clear()
print(list)
运行结果:[]
7)修改列表中的元素:指定索引值,为指定索引的元素赋予一个新值
lst=[10,20,30,40]
lst[2]=12
print(lst)
运行结果:[10,20,12,40]
2.字典
键和值在字典中成对出现,一一对应,且每个键只能对应一个值,在同一个字典中,“键”必须是唯一的,但“值”可以重复。
例:dic={“铅笔”:71,”橡皮”:98,”钢笔”:59} (键值对用冒号分隔,各个对之间用逗号分隔)
①字典元素的创建
dictname = {'key_1": 'value_1', 'key2": 'value_2', .., 'key_n': 'value_n'}
dic={} #创建空字典dic(使用{}直接创建)
②字典元素的访问
字典是无序的,不支持索引、切片等操作,主要通过键获取对应的值。
通过键,去查找对应的值格式:字典名[键]。键(key)必须存在,否则会报错。
aa = {'人才':60,'英语':'english','adress':'here'}
print(aa['英语'])
运行结果:english
③在字典中增加元素
格式:字典名[新添加的键名] = 新添加的键对应的值
aa = {'人才':60,'英语':'english','adress':'here'}
aa['价格'] = 100
print(aa)
运行结果: {'人才': 60, '英语': 'english', 'adress': 'here', '价格': 100}
④字典修改键的值
格式:字典名[要修改的键名] = 新值
aa = {'人才':60,'英语':'english','adress':'here', '价格': 100}
aa['价格'] = 80
print(aa)
运行结果: {'人才': 60, '英语': 'english', 'adress': 'here', '价格':80}
3.程序设计
(1) Python中的注释 在 Python中,“ # ”后面的内容为注释,注释主要用于对程序代码进行说明。注释在程序运行时不执行。
(2) Python常见内建函数
【函数补充说明】
int():将整数类字符串和数字转换成整型(文字类的字符串和小数类的字符串是无法用int()函数转换的)。浮点数:抹零取值(不进行四舍五入,小数部分直接舍去);整数类字符串:转换成整型
例:int(‘123’)=123 int(3.6)=3 int(2.95)=2 int(-3.9)=-3
float():函数用于将整数和数字类字符串转换成浮点数。文字类无法转换,整数转换成浮点数,末尾为.0
例:float(‘123’)=123.0 float(123)=123.0 float(3.14)=3.14
str():将任意类型参数转换为字符串。
例:str(123)=’123’ str(3.14)=’3.14’
input():用来接收用户的键盘输入,返回的结果是字符串。必要的时候可以使用内置函数int()、float()、str()对用户输入的内容进行类型转换;一般格式是:x=input('提示语:')
例:x=int(input(‘请输入圆的半径:’)
print():要输出的内容写在小括号内,同时输出多个数据,用逗号隔开;print()函数默认以换行符作为其结束值。print(num, end =' ')中的end = ' '将print()函数的结束值设置为一个空格。
abs(x):函数返回数字的绝对值
例:abs(-3.14)=3.14 abs(3.14)=3.14
len():返回序列(字符、列表、元组等)长度或项目个数,求字典(键值对个数)、列表((元素个数)、字符串(字符个数)
例:len([1,2,3])=3 len(‘中天高中’)=4 len([1,3,“a”,”b”,”c”]’)=5
chr(x):返回当前整数对应的 ASCII 字符
例:chr(65)=’A’ chr(122)=’Z’
ord(x):返回x对应的ASCII值
例:ord(‘A’)=65 ord(‘a’)=97
round(x,n):第一个参数是要四舍五入的数;第二个参数是保留的小数位数,可选,如果不写默认保留到整数。
例:round(3.1415)=3 round(3.1415,0)=3.0 round(3.1415,3)=3.142
type():判断数据类型
range():创建一个整数序列 语法格式:range(stop)或range(start, stop[, step])
【注意】start: 初值(包含)stop: 终值(不包含)step:步长,默认为1。[, step]表示该项可被省略
4. 分支结构的程序实现
在 Python中,分支结构用if语句来实现。
(1) 单分支 (2) 双分支 (3) 多分支
if 条件表达式 : if 条件表达式: if 条件表达式1:
语句块 语句块1 语句块1
else: elif 条件表达式2:
语句块2 语句块2
else:语句块 3
5. 循环结构的程序实现
在 Python中,循环结构可以用for语句或while语句实现。
(1)for循环——次数循环
for语句常见格式如下:
for <变量> in <序列>:
<循环体>
for语句通过遍历序列中的元素实现循环,并通过序列的元素数量来控制循环次数。当序列中的元素为有序整数时,常可利用内建函数range来实现。range函数由三个参 数(起始值、终值、步长值)来决定序列中元素的个数和范围。range函数的参数必须为整数。若起始值缺省,则默认为0。步长值是序列中元素之间的差,若缺省,则默认为1。
例如range(a,b,k),若k为正数,产生整数序列:a、a+k、a+2k、…,最后一个数必须小于b;若k为负数,产生整数序列:a、a+k、a+2k、...,最后一个数必须大于b
break语句可用于在序列还没被完全遍历完或循环条件仍然为真的时候,实现强行退出循环。
(2)while循环——条件循环
while语句常见格式如下:
while <条件>:
<循环体>
while语句在执行时,首先会判断条件是否为真,如果条件为真,执行一次循环体,再次判断条件是否为真,如果仍为真,那么再执行一次循环体,以此类推,直到条件为假时退出循环。
6.函数与模块
(1) 函数的构造
在 Python中,定义函数的语法如下:
函数名的命名规则与变量名一样。完成函数构造后,在程序中就可以根据需要调用该函数。
(2) 模块的导入与应用
在编写程序的时候,经常需要引入其他模块。Python的各模块补充了许多功能强大的 函数,在使用import语句或from---import语句将函数所在的模块导入后,就能使用其中的 函数。导入的语法如下:
语法一:import <模块> 语法二:from <模块> import <函数名>
Python常见的模块:math模块 random模块、Image模块、numpy模块和matplotlib模块等。
7.解析算法的程序实现
解析算法的基本思想是指根据问题的前提条件与所求结果之间的关系,找出求解问题的数学表达式,并通过表达式的计算来实现问题的求解。在解析算法的程序实现过程中, 首先要确保数学表达式的正确性,然后在程序中正确描述该数学表达式。
8.枚举算法的程序实现
枚举算法的基本思想是把问题所有可能的解一一列举,然后判断每一个列举出的可能解是否为正确的解。枚举算法程序实现的三个主要环节:枚举解、筛选解和输出解。其一般程序结构特点是循环包含分支结构语句,实现对枚举出的解进行判断与筛选。
学科网(北京)股份有限公司
$