内容正文:
Python程序实现
学考要点1顺序结构与分支结构
【必修1 数据与计算第79~85页 指导意见第13~19页】
1.顺序结构:算法中各个步骤按照先后顺序依次执行的结构。
2.交换两个变量的值的方法
(1)序列赋值:a,b=b,a
(2)数学法:a=a+b;b=a-b;a=a-b
(3)第三方交换:t=a;a=b;b=t
3.分支结构:先进行条件判断,再根据判断结果分别执行不同处理的
控制结构。算法进行程序实现时,分支结构可以用if语句来实现。
(1)单分支结构
流程图走向:当条件表达式为真时,执行语句块;否则什么都不执行 if <条件表达式>:
<语句块>
续表
流程图走向:当score>60时,输出“合格”;否则什么都不执行 score=float(input())
if score>60:
print('合格')
(2)双分支结构
流程图走向:当条件表达式为真时,执行语句块1;否则执行语句块2 if <条件表达式>:
<语句块1>
else:
<语句块2>
流程图走向:当x>0时,给变量y赋x的值;否则,给变量y赋-x的值 x=float(input())
if x>0:
y=x
else:
y=-x
print(y)
(3)多分支结构
流程图走向:当<条件表达式1>的值为真时,执行<语句块1>, 本块if语句结束。若为假,则判断<条件表达式2>的值,以此类推。直到找到一个为真的条件时,才执行相应的语句块,本块if语句结束
if <条件表达式1>:
<语句块1>
elif <条件表达式2>:
<语句块2>
……
elif <条件表达式n>:
<语句块n>
else:
<语句块n+1>
①一个if语句可以包含多个elif子句,最后的else子句是可选的。
②Python语句中的缩进:语句块缩进4个空格。
学考要点2循环结构
【必修1数据与计算第86~89页 指导意见第13~19页】
1.for循环
for语句:
遍历序列中的元素执行循环体(从序列中的第一个元素开始,依次选择每个元素执行操作直至结束)。当序列中的元素全部遍历完成后,程序继续执行else子句中的语句块 for循环格式:
for <变量> in <序列>:
<循环体>
[else: #else子句可选
<语句块>]
list1=[1,2,3,4]
for i in list1:
print(i) 第1次循环,循环变量i=list1[0]=1;第2次循环,循环变量i=list1[1]=2;第3次循环,循环变量i=list1[2]=3;第4次循环,循环变量i=list1[3]=4;遍历完list1中的所有元素,循环结束
word='abcd'
for x in word:
print(x) 第1次循环,循环变量i=word[0]='a';第2次循环,循环变量i=word[1]='b';第3次循环,循环变量i=word[2]='c';第4次循环,循环变量i=word[3]='d';遍历完word中的所有元素,循环结束
2.range()函数
range()函数用于生成整数序列。
通式:range(start,stop,step)。该序列的索引范围为[start,stop),步长为step。其中,start为起始值,默认值为0时可省略;step为步长,默认值为1时可省略;stop为终值,不可省略。如range(0,10,1)可省略为range(10)。
3.while循环
while语句:
while循环在执行时,首先判断条件是否为真,若条件为真,执行一次循环体,再次判断条件是否为真,若仍为真,则再次执行循环体,直至条件为假时跳出while循环 while 循环格式:
while <条件>:
<循环体>
s=0
while s<10:
s+=4
print(s) 第1次条件,s的值为0,s<10成立,执行循环体s=4;
第2次条件,s的值为4,s<10成立,执行循环体s=8;
第3次条件,s的值为8,s<10成立,执行循环体s=12;
第4次条件,s的值为12,s<10不成立,循环结束
4.转移和中断语句
continue:中断本轮循环的执行,进入下一轮新的循环的判断。
break:跳出整个循环结构。
5.循环嵌套
一个循环体内可以嵌套另一个循环,一般为双重循环,其循环总次数等于内外层次数之积。
学考要点3函数与模块
【必修1数据与计算第90~95页 指导意见第13~19页】
1.函数
(1)函数的定义
def 函数名(参数集合):
<函数体>
[return 函数值]
def:关键字,定义声明;参数集合:调用函数所需传入的参数;return:返回,返回函数执行后的结果。例如:
def add(a,b):
c=a+b
return c
(2)函数的调用
调用函数时参数传递的方法:
①按位置依次传递:按照函数声明时的参数原有顺序依次进行参数传递。如area(3,4,5)。
②参数赋值: 通过赋值语句实现参数传递(可改变原有顺序)。如Area(b=4,c=5,a=3)。
2.Python常见模块
Python包括了大量的模块,它们的功能涉及系统管理、科学计算、图形处理等各个领域。例如:用于实现部分操作系统功能的os模块,与时间处理有关的time模块,可以实现科学计算、数据可视化的numpy和matplotlib,用于多媒体开发和游戏软件开发的pygame模块,支持图形处理的tkinter等。
模块导入的方法:
方法一 import语句
import <模块1>,<模块2>,<模块3>
导入某个模块,就可以引用它的所有公共函数
故该方式调用模块中函数的形式:<模块名>.<函数名>
方法二 fromimport语句
from <模块名> import <函数名>
导入某个模块中的特定函数,就可以引用该函数
故该方式调用函数形式:<函数名>
(1)math模块
名称 含义
math.e 自然常数e
math.pi 圆周率π
math.ceil(x) 对x向上取整 math.ceil(1.3)=2
math.floor(x) 对x向下取整 math.floor(1.3)=1
math.pow(x,y) 指数运算,得到x的y次方 math.pow(2,3)=8
math.log(x) 对数运算,默认基底为e
math.sin(x) 正弦函数
math.cos(x) 余弦函数
math.tan(x) 正切函数
math.degrees(x) 弧度转换成角度
math.radians(x) 角度转换成弧度
注意:ceil()、floor()、 int() 的对比
ceil(1.5)=2 floor(1.5)=1 int(1.5)=1
ceil(-1.5)=-1 floor(-1.5)=-2 int(-1.5)=-1
ceil():向上取整 floor():向下取整 int():截取整数
(2)random模块
例如:import random #导入random模块
a=random.random()*10 #[0,10)范围内的实数
b=random.uniform(0,10) #[0,10]范围内的实数
名称 含义
random.random() 随机生成一个[0,1)范围内的实数
random.uniform(a,b) 随机生成一个[a,b]范围内的实数
random.randint(a,b) 随机生成一个[a,b]范围内的整数
random.choice(seq) 从序列的元素中随机挑选一个元素
random.sample(seq,k) 从序列中随机挑选k个元素
random.shuffle(seq) 将序列的所有元素随机排序
c=random.randint(0,10) #[0,10]范围内的整数
random.choice(range(10)) #[0,9]中随机挑选一个整数
random.sample(range(10),3) #[0,9]中随机挑选三个整数
c=[0,1,2,3,4]
random.shuffle(c) #对整数序列c进行重新排序
(3)Image模块
Image模块是PIL库(Python Imaging Library )中的重要模块,引用它可以完成对图像的一些常用操作,比如获取图像尺寸和像素颜色、旋转图像或改变图像格式等。
numpy模块是将图像每个像素的RGB值以矩阵形式存储。
matplotli模块是根据调整后的像素生成新的图像。
①导入模块
from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
②打开图像并转换成数字矩阵
img=np.array(Image.open(”lena.jpg”).convert(”L”))
③调整每个像素的RGB值
rows,cols=img.shape #图像尺寸分别赋值
for i in range(rows): #依次取每个像素的坐标
for j in range(cols):
if img[i,j]>128: #像素值大于128,赋值1,否则为0
img[i,j]=1
else:
img[i,j]=0
④生成新的图像并显示
例1 有如下Python程序段,若想要测试其所有分支程序代码是否正确,x=int(input('请输入整数x: '))
if x>10:
y=x**2
elif x>0:
y=10*x
else:
y=0
print(y)
下列数据最恰当的一组是( )
A.0,10 B.11,2,-1
C.-2,2,6 D.12,100,-100
【解析】 三分支结构,分为大于10、大于0且小于或等于10、小于或等于0三种情况。选项B的三个数据分别对应三个分支的条件,符合测试要求。选项B正确。
B
变式 用Python算法控制结构描述“您所在街道25分钟后小雨,50分钟后雨停”,设t为距离天气预报发布时间的间隔(单位:分钟),下列选项正确的是( )
A.if t>50:
print(”雨停”)
elif t>25:
print(”小雨”)
B.if t>50:
print(”雨停”)
A
else:
print(”小雨”)
C.if t>25 and t<=50:
print(”小雨”)
else:
print(”雨停”)
D.if t>25:
print(”小雨”)
elif t>50:
print(”雨停”)
【解析】 选项A,该算法描述为:距离当前时间t>50,雨停;距离当前时间25<t<=50,小雨。该算法与题干自然语言描述的算法符合,选项正确。
例2 执行下列Python程序段后,
a=[1,3,4,2,3]
max=a[0]
s=0
for i in range(1,len(a)):
if a[i]>max:
max=a[i]
s=s+max
print(s)
变量s的值是( )
A.15 B.13 C.12 D.7
【解析】 在循环过程中,查找最大值,并将最大值累加到s中。4次循环中max依次为3,4,4,4,选项A正确。
A
变式1 (2024·温岭中学学考模拟)有如下Python程序段:
a=[3,2,1,-8,3,-2,8,6]
s=t=a[0]
for i in range(1,len(a)):
if s>0:
s+=a[i]
else:
s=a[i]
if s>t:
t=s
print(t)
执行该程序段后,输出的结果是( )
A.6 B.-10 C.15 D.33
【解析】 执行过程如下:
C
i — 1 2 3 4 5 6 7
a[i] — 2 1 -8 3 -2 8 6
s 3 5 6 -2 3 1 9 15
t 3 5 6 6 6 6 9 15
选项C正确。
变式2 (2024·浙江1月选考)数组元素a[0]至a[n-1]依次存放着n 个数据,现需要将元素a[n-1]插入在下标为x(0≤x<n-1)的位置。例如:n 为5,数组a 为[0,3,4,6,7],x 为2,插入操作后a 为[0,3,7,4,6]。实现该功能的程序段如下,方框中应填入的正确代码为( A )
temp=a[n-1]
for i in range(n-2,x-1,-1):
a[x]=temp
A.a[i+1]=a[i] B.a[i-1]=a[i]
C.a[i]=a[i+1] D.a[i]=a[i-1]
【解析】 算法实现的功能是将数组末尾元素a[n-1]移动到指定位置x。因此需要将下标位置范围为[x,n-2]区间内的元素整体向后移动一位,移位的方向是将前面的元素覆盖后面的元素,参与移位的元素最左侧为下标x,i的初始值为n-2位置,需要将n-1位置覆盖,选项A正确。
例3 下列表达式能够生成[10,99]范围内的随机整数的是( )
A.random.randint(10,100)
B.random.choice(range(10,99))
C.int(random.random()*89)+10 D.int(random.random()*90)+10
【解析】 选项A,random.randint(10,100)产生10 和100 之间的任意一个整数,选项错误;选项B,random.choice(range(10,99)) 随机从10 和98 之间选择一个整数,选项错误;选项C,int(random.random()*89)+10 随机产生10 和98 之间的任意一个整数,选项错误。选项D正确。
D
变式1 脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成。构成 DNA 的碱基共有 4 种,分别为腺嘌呤(A)、鸟嘌呤(G)、胸腺嘧啶(T)和胞嘧啶(C)。在两条互补碱基链的对应位置上,A 总是和 T 配对,G 总是和 C 配对。编写Python程序实现如下功能: 随机产生一条单链上的碱基序列,输出其对应的互补链上的碱基序列。
import random
DNA=['A','G','T','C']
s=''
for i in range(20):
①________
print(s)
match={'A':'T','T':'A','G':'C','C':'G'}
t=''
for i in range(20):
②________
print('互补链:',t)
横线处应填入的代码为( )
A.①s=random.choice()+s ②t=t+match[i]
B.①s=s+random.choice(DNA) ②t=t+match[s[i]]
C.①s=s+random.choice() ②t=t+match[s[i]]
D.①s=random.choice(DNA)+s ②t=t+match[i]
B
【解析】 ①随机产生第1条碱基链,函数choice()从序列的元素中随机挑选一个元素,需要有参数;②利用字典进行匹配,字符串使用下标提取。选项B正确。
变式2 (2024·长兴中学学考模拟)有如下Python程序段:
import random
a=[0]*6
for i in range(6):
a[i]=random.randint(1,5)*2+1
i=0
while i<5:
if a[i]>a[i+1]:
a[i],a[i+1]=a[i+1],a[i]
else:
a[i]+=1
i+=1
print(a)
执行该程序段后,列表a 的值可能是( )
A.[2,5,10,10,10,9] B.[3,8,7,13,3,9]
C.[8,12,3,5,3,11] D.[6,10,9,7,10,8]
C
【解析】 列表a 的各元素的初值范围为[3,5,7,9,11],循环遍历。若当前数大于后数,则交换;若当前数不大于后数,则当前数+1。所以程序执行后,若该数还是3,5,7,9,11,则该数是与后数交换所得;若该数为4,6,8,10,12,则该数的原数大于后数,为加1 所得。所以不可能出现2和13,故选项A、B 错误。选项D 的第三个数字9 不合理,故选项D 错误。选项C 的原始数可能为7,11,11,3,5,3,程序执行后可得选项C的结果,故选项C 正确。
例4 有如下Python程序段:
def count(a,i):
for j in range(i+1,len(a)):
if a[j]<a[j-1]:
return j-i
else:
return len(a)-j
a=list(map(int,input().split()))#将输入的字符串按照空格符进行分割后转换为整型列表
b=[1]*len(a)
for i in range(len(a)-1):
b[i]=count(a,i)
print(b)
执行该程序段后,若输入的数据为“1 2 2 4 7 6”,则b[1]的值为( )
A.1 B.4 C.3 D.2
【解析】 i=1,调用函数count(a,1),函数中j的范围是[2,len(a)-1],j=2时a[2]==a[1],执行return len(a)-j=4,选项B正确。
B
变式 (2024·新昌中学学考模拟)有如下Python程序段:
def fun(a,b):
n=min(len(a),len(b))
for i in range(n):
if a[i]>b[i]:
return a
if a[i]<b[i]:
return b
if len(a)>len(b):
return a
else:
return b
print(fun(”123”,”23”))
执行该程序段后,输出的结果是( )
A.a B.b C.123 D.23
【解析】 在函数中按顺序执行语句,先执行循环语句,再执行分支语句。在循环中逐个比较字符,a[0]<b[0],执行return b,函数结束,选项D正确。
D
#
$$