内容正文:
第4单元 计算与问题解决
4.2 数值计算
数据与计算(必修1)
1
4.2.1 numpy、matplotlib模块
1. numpy模块: Python语言的一个科学计算包。它包含很多的数学函数,通过对其调用,可以方便地进行各种数学运算。
使用前需要先将模块导入,例如:
import numpy as np #导入numpy模块并定义别名np(别名是为了方便后续调用)
2. matplotlib模块:Python语言的一个绘图库。可以绘制各种线图、直方图、饼图等。
pyplot:提供很多画图函数,使用前需要先导入(import matplotlib. pyplot as plt),绘图时,坐标系能够根据数据范围自动生成。
知识记忆
能综合使用numpy、matplotlib模块进行简单图像的绘制。
技能要求
1. 在Python中,绘制函数图像需要使用的模块是( )。
A. win32com、numpy B. numpy、matplotlib
C. math、matplotlib D. math、random
2. 下列有关利用计算机绘制函数图像的描述错误的是( )。
A. 精确度高,便于数据分析
B. 可以根据实际需要绘制不同形式的图像
C. 可以通过读图直接求出函数的值
D. 提高了人们的工作效率
B
C
典题演练
4.2.2 枚举算法
1. 枚举算法:又称穷举法或列举法,是一种最为直接,同时又最为耗时的解决问题的方法。在已知答案范围的情况下,依次地枚举该范围内所有的取值,并对每个取值进行考查,确定是否满足条件。经过循环遍历之后,筛选出符合要求的结果
枚举算法基本思路:
(1) 确定枚举对象、枚举范围和判定条件;
(2) 一一列举可能的解,验证是不是问题的解。
枚举算法特点:思路直接、正确性明显易证;利用了计算机运算速度快、精度高的优势。
知识记忆
2. 枚举算法的一般结构:循环 + 判断
常见程序框架:
for 枚举对象 in 枚举范围:
if 满足判定条件:
输出解
知识记忆
1. 水仙花数是指一个三位数,它的各个数位上的数字的3次方之和就等于它本身,例如153=13+53+33。编程输出所有的水仙花数。请在序号处填写正确的代码,且不改变原程序的结构。
print(“所有水仙花数:”)
for x in range(100,__①__ ):
b = x //__②__ # 百位
s = (x//10) % 10 #十位
g = x %__③__ # 个位
if x == (b**3+s**3+g**3):
print(x)
填空:①________ ②_________ ③__________
1000
100
10
典题演练
2. 百钱百鸡是一个有名的数学问题。其内容是:公鸡5文钱1只,母鸡3文钱一只,小鸡3只1文钱,用100文钱买100只鸡,其中公鸡、母鸡和小鸡都必须有,问公鸡、母鸡和小鸡各有多少只?用枚举法编程解决问题。请在序号处填写正确的代码,且不改变原程序的结构。
for gj in range(1,100): # 枚举公鸡数量
for mj in range(1,100): #枚举母鸡数量
xj =__①__ # 计算小鸡数量
if xj<100 and xj__②__3==0 :#如果小鸡数量在范围内,且为3的倍数
if gj*5+__③__+xj//3==100:# 判断是否恰好使用了100文钱
print(gj,mj,xj)
填空:①____________ ②_____________ ③_____________
100-gj-mj
%
mj*3
典题演练
4.2.3 迭代算法
1. 迭代算法:迭代算法是一种通过反复执行一组指令来解决问题的方法,每一次执行都是基于上一次的结果进行更新,直到满足某个终止条件为止。在编程中,迭代通常通过循环结构来实现。
知识记忆
什么是阶乘?
阶乘就是从1开始,一直乘到你要求的那个数。例如4的阶乘1*2*3*4=24,即4!=24.通常可以写成公式:
n!=1*2*3*...*(n-1)*n.
知识记忆
什么是阶乘?
阶乘就是从1开始,一直乘到你要求的那个数。例如4的阶乘1*2*3*4=24,即4!=24.通常可以写成公式:
n!=1*2*3*...*(n-1)*n.
迭代算法计算4的阶乘
准备工作
①输入要计算阶乘的数4
②创建一个变量“结果”,用来记录每一次乘法的结果。初始值为1
循环相乘
③从1到4每次都用“结果”*当前数字,把结果更新回“结果”变量。
知识记忆
2. 迭代求解问题的三个步骤:(1) 确定迭代变量(让谁);(2) 建立迭代关系式(如何);(3) 控制迭代过程(次数)。
例如:使用迭代法计算n! = 1×2×…×n。
(1) 确定迭代变量 s,初始设定为1
(2) 建立迭代关系式:s = s*i
迭代示意图
(3) 控制迭代过程:for i in range(1, n+1)
迭代代码如下:
s = 1
for i in range(1,n+1):
s = s*i
知识记忆
3. 一般程序框架:
x = 初始值
for i in range(迭代次数):
x = f(x) # 函数f为迭代关系式
知识记忆
一、 单项选择题
1. 利用迭代算法解决问题,有下列三个步骤:
(1) 对迭代过程进行控制
(2) 确定迭代变量
(3) 建立迭代关系式
请问这三个步骤正确的步骤顺序是( )。
A. (1) (2) (3) B. (2) (1) (3)
C. (2) (3) (1) D. (3) (2) (1)
C
迭代法求解问题的三个步骤:a、确定迭代变量;b、建立迭代关系式;c、对迭代过程进行控制。
典题演练
2. 角谷猜想:任给一个自然数,若为偶数则除以2,若为奇数则乘3加1,得到一个新的自然数后按上面的法则继续进行,若干次后得到的结果必为1。要用Python来验证角谷猜想,可以有很多方法,其中( )算法的执行效率最快。
A. 二分 B. 分治
C. 迭代 D. 递归
C
典题演练
二、 操作实践题
3. 斐波那契数列:该数列的第一个和第二个数均为1,从第三个数起,每个数都是它前两项数字的和。求斐波拉契数列第n项的值。打开 “I-斐波那契数列.py”,请在序号处填写正确的代码,且不改变原程序的结构。
f1 = f2 = 1 #变量f1和f2表示斐波那契数列的第一个数和第二个数
n =__①__(input(“请输入要求该数列的第几个数:”))
for i in range(3,__②__ ): # 求该数列的第n个数
f1,f2=f2,f1+f2
print(“第”,n,“个数是”,___③__)
填空:①____________ ②_____________ ③_____________
int
n+1
f2
典题演练
4. 辗转相除法求最大公约数:除数和余数反复做除法运算,当余数为 0 时,取当前算式除数为最大公约数。
例如,计算15与10的最大公约数,首先15%10 = 5,然后10%5 = 0,因此最大公约数为5。
打开“Ⅰ—辗转相除求公约数.py”,请在序号处填写正确的代码,且不改变原程序的结构。
a, b = map(int, input(“请输入两个整数,中间用空格隔开:”). split())
r = a%b
典题演练
while __①__: # 迭代控制
a = b
b = r
__②__
print(“最大公约数是{0}”. format(__③__)) # 答案为除数
填空:①______________ ② _____________ ③ ______________
r!=0 或 r
r = a%b
b
根据题目描述可知余数为0时结束迭代,因此第一空为r!=0 或 r;为使迭代能够重复进行,第二空必须计算新的余数r,所以为 r = a%b;第三空为除数b。
典题演练
$