课时 09 简单算法及其程序实现 课件(共38张PPT)2027届浙江选考信息技术总复习

资源下载
  1. 二一教育资源

课时 09 简单算法及其程序实现 课件(共38张PPT)2027届浙江选考信息技术总复习

资源简介

(共38张PPT)
课时09 简单算法及其程序实现
一、解析算法及其程序实现
1. 解析算法的基本思想是指根据问题的前提条件与所求结果之间的关系,找出求解问题的数学    ,并通过表达式的计算来实现问题的求解。
2.情景实例:出租车计费问题。
(1)某出租车计费标准为:3公里以内13元;3公里至10公里部分,每公里2.5元;10公里以上部分,每公里3.75元;实行等候计时收费,在拥堵人行道等候累计每满3分钟收0.9元等候费(不满3分钟不收费),最后求出计费金额并保留1位小数。
表达式
(2)抽象与建模。
①首先由输入函数确定出租车行驶的总里程数和人行道等候时间,再根据里程数收费标准计算出最后的金额,各个数据对应的数据类型及变量名如表所示。
②建立计算模型。
13+t//3*0.9 (0p= 13+2.5*(s-3)+t//3*0.9 (3.030.5+3.75*(s-10)+t//3*0.9 (s>10.0)
(3)设计算法。根据上述计算模型,判定该算法可以用解析算法,用    描述算法。
变量名 数据类型 变量含义
s 数值型——实型 总里程数(单位:公里)
t 数值型——实型 等候时间(单位:分钟)
p 数值型——实型 计费金额(单位:元)
流程图
程序 s=float(input("请输入出租车的路程(公里):"))
t=float(input("请输入等候时间(分钟):"))
if s>0 and s<=3.0:
p=    1
elif s>3.0 and s<=10.0:
p=13+2.5*(s-3)+t//3*0.9
else:
p=30.5+3.75*(s-10)+t//3*0.9
print("最终计费金额(元):",    )
运行结果 请输入出租车的路程(公里):25
请输入等候时间(分钟):6
最终计费金额(元):88.5
(4)编写程序。
13+t//3*0.9
round(p,1)
1. 枚举算法的基本思想是把问题所有可能的解    ,然后判断每一个列举出的可能解是否为正确的解。
2. 情景实例:鸡兔同笼问题。
(1)有鸡与兔在同一个笼子里,已知共有76只脚,问鸡与兔可能各有几只?
(2)抽象与建模。
①已知笼中共有76只脚,故最多有19只兔或38只鸡,又因为鸡与兔都在笼子里,所以鸡与兔的数量都要小于各自的最大值。各个数据对应的数据类型及变量名如表所示。
②建立计算模型。
4*i+2*j=76 (1≤i<19,1≤j<38)
一一列举
二、枚举算法及其程序实现
变量名 数据类型 变量含义
i 数值型——整型 兔的数量(单位:只)
j 数值型——整型 鸡的数量(单位:只)
(3)设计算法。根据上述计算模型,判定该算法可以用    算法,用流程图描述算法。
枚举
(4)编写程序。
4*i+2*j==76
程序 for i in range(1,19):
for j in range(1,38):
if     :
print("兔有",i,",鸡有",j);break
运行结果 兔有 1 ,鸡有 36
兔有 2 ,鸡有 34
兔有 3 ,鸡有 32
兔有 4 ,鸡有 30
兔有 5 ,鸡有 28
兔有 6 ,鸡有 26
兔有 7 ,鸡有 24
兔有 8 ,鸡有 22
兔有 9 ,鸡有 20
兔有 10 ,鸡有 18
兔有 11 ,鸡有 16
兔有 12 ,鸡有 14
兔有 13 ,鸡有 12
兔有 14 ,鸡有 10
兔有 15 ,鸡有 8
兔有 16 ,鸡有 6
兔有 17 ,鸡有 4
兔有 18 ,鸡有 2
典例 1 完数是除了自身之外的所有约数之和等于它本身的数,例如6=1+2+3。编写Python程序,输出1~1000范围内的完数和除它本身以外的约数的列表。请在画线处填入合适的代码。
for n in range(1,1001):
a=[]
for i in range(1,n):
if    ①   :
a.append(i)
if    ②   :
print(n,a)
n%i==0
sum(a)==n
题型导向一 解析算法
胜券点拨1
明考向 本题主要考查解析算法的程序实现
审关键 正确的数学表达式
考场思维快闪 ① ①处判断i是否为n的约数
② ②处将列表a中所有的约数相加,若和等于它本身,则输出n和除它本身以外的约数的列表
典例 2 某算法如下:对任意一个正整数n,若n为偶数,则下一步将其除以2;若n为奇数,则下一步将其乘以3再加1,不断重复,经过有限次运算后,一定可以得到1。编写Python程序验证这一算法。
(1)当n为10时,执行上述算法,数据的变化过程是:10→        →1。
(2)实现上述功能的Python程序如下,请在画线处填入合适的代码。
n=int(input("请输入一个整数:"))
if n>0:
print("变化过程为:",n,end="")
while n!=1:
if    ①   :
n=n//2
else:
   ②   1
print("→",n,end="")
else:
print("输入错误,请重新输入")
(3)该程序段采用的算法是       (单选:A.解析算法 / B.枚举算法)。
5→16→8→4→2
n%2==0
n=n*3+1
A
胜券点拨2
明考向 本题主要考查解析算法的程序实现
审关键 正确的数学表达式
考场思维快闪 (1) 根据算法特点:偶数,下一步将其除以2;奇数,下一步将其乘以3再加1。初始时,n=10,10是偶数,得到n=10/2=5;5是奇数,得到n=5×3+1=16;16是偶数,得到n=16/2=8;8是偶数,得到n=8/2=4;4是偶数,再次除以2,得到n=4/2=2;2是偶数,得到n=2/2=1
(2) 解析算法的基本思想是指根据问题的前提条件与所求结果之间的关系,找出求解问题的数学表达式,并通过表达式的计算来实现问题的求解。在该程序段中,根据输入的整数n,通过一系列的逻辑判断和数学运算,最终得到结果1,符合解析算法的特点
(3) 解析算法的基本思想是指根据问题的前提条件与所求结果之间的关系,找出求解问题的数学表达式,并通过表达式的计算来实现问题的求解。在该程序段中,根据输入的整数n,通过一系列的逻辑判断和数学运算,最终得到结果1,符合解析算法的特点
典例 3 [2025.1浙江选考]根据机器的负载率对工厂的6台机器(编号0~5)进行监控和调度,调度规则是:每隔1小时采集1次各台机器的负载率(负载率用百分制表示,例如,负载率95%表示为95,机器休息时的负载率为0),负载率超过90的机器都调度休息;如果所有机器负载率都不超过90,则负载率最高的机器休息,若多台机器负载率同为最高,则编号最小的机器休息,休息的机器在休息1小时后再次工作。
请回答下列问题:
(1)若某次采集到0~5号机器的负载率依次为75、85、88、0、88、87,当前处于休息状态的机器编号是3,接下来休息的机器编号是       。
2
题型导向二 枚举算法
(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。
n=6 #机器台数
a=[0]*n #列表a长度为n,各元素值均为0
#启动0~4号机器工作,5号机器休息,代码略
while True:
'''延时1小时,再采集各机器负载率存入a,a[i]存放i号机器的负载率,代码略'''
t=0
cnt=0
for i in range(n):
if    ①   :
#调度i号机器休息,代码略
cnt+=1
if a[i]>a[t]:
   ②   1
elif a[i]==0:
#调度i号机器工作,代码略
if    ③   :
#调度t号机器休息,代码略
a[i]>90
t=i
cnt==0 或 a[t]<90
胜券点拨3
明考向 本题主要考查枚举算法的程序实现
审关键 枚举的判断条件
考场思维快闪 (1) 若机器负载率均不超过90,则负载率最高的机器休息,2号和4号机器负载率同为最高,则编号最小的2号机器休息
(2) ①负载率超过90的机器都调度休息。②查找负载率最大的机器,将编号保存在变量t中。③如果所有机器负载率都不超过90,则负载率最高的机器休息,变量cnt统计的是负载率超过90的机器数量,故当cnt为0时,此时负载率最大的t号机器休息(t一定是同为最高负载率的机器中编号最小的)
1.解析算法的解题过程。
(1)建立正确的数学模型,即写出正确的数学表达式。
(2)保证计算过程描述的正确性。
(3)使用Python表达式来表示数学表达式。
2.解析算法程序实现的步骤。
(1)运用解析算法分析问题,寻找问题中各要素之间的关系,用数学表达式表示它们的关系。
(2)写出解决问题的解析步骤,编写程序实现,通过运行程序求得问题的解。
通法一 解析算法
1. 枚举算法常用于解决是否存在或有多少种可能等类型的问题。
2. 使用枚举算法的两个条件。
(1)可预先确定每个状态的元素个数,且问题的规模不是特别大。
(2)状态元素a1,a2,…,an的值的范围为一个连续的值域。
3. 枚举算法的三要素:枚举范围、枚举对象和判断条件。
4. 枚举算法的枚举范围是用来表示枚举对象存在的一个连续区间,可用循环结构语句实现。判断条件用来检测当前枚举的对象是否为问题的解,可用分支结构语句实现。
5. 枚举算法的优点与缺点。
(1)优点。
①由于枚举算法一般是现实生活中问题的直译,因此比较直观,易于理解。
②由于枚举算法建立在考察大量状态,甚至是穷举所有状态的基础上,所以算法的正确性比较容易证明。
(2)缺点:枚举算法的效率取决于枚举状态的数量以及单个状态枚举的代价,因此效率比较低。
通法二 枚举算法
操作 代码和解释
打开/读取文件 ①f=open("test.txt","r") 
'''以读("r")的方式打开文件“test.txt”,其他常见的文件模式还有写("w")、读写("w+")和追加("a")等'''
②f.read() 
'''读取整个文件,它通常将读取到的文件内容放到一个字符串变量中,方便一次性读取,返回字符串类型'''
③f.read(size) 
'''可以采用多次调用read(size)方法,每次最多读取size个字节的内容,如果文件大小不确定,使用该方法较为安全'''
④f.readline() #调用函数可以每次读取一行内容,并返回字符串
⑤f.readlines() #调用函数可以一次性读取整个文件内容,并按行返回到list
写入文件 f=open("test.txt","w")
f.write("需要写入的文字")
①write()需要传入一个字符串作为参数,否则会报错
②写入文件与读取文件类似,只不过模式用“w”表示。写入模式中,如果要写入的文件为空文件,则直接写入;若文件中已经存在内容,那么旧内容将会被覆盖,若不想被覆盖则需要将模式改为“a”
关闭文件 f.close() #文件使用完毕后必须关闭
通法三 Python的文件读写操作
1.计算球表面积的过程如下:
①输入球半径r;
②π=3.14;
③计算球表面积为4πr2;
④输出球表面积S。
求解该问题适合使用的算法是 (  )
A.排序算法 B.枚举算法
C.解析算法 D.查找算法
解析算法的基本思想是根据问题的前提条件与所求结果之间的关系,找出求解问题的数学表达式,并通过对其计算来实现问题的求解。
C 
√
一、解析算法
2.有一对兔子,从出生后第3个月起每3个月生一对兔子,小兔子长到第3个月后每3个月又生一对兔子。假如兔子都不会死亡,求第m个月的兔子总数。实现上述功能的Python程序如下,请在画线处填入合适的代码。
t=2
m=int(input("输入第几个月:"))
n=       .
tz=2**(n+1)
#f格式化输出,将{}中的变量值代入输出
print(f"第{m}个月兔子的总数为{tz}")
使用解析算法,首先分析已知条件和所求结果之间的关系。根据题目给出的条件,列出下表:
可以看到每当月份为3的倍数时,兔子的数量翻倍,所以可以列出关系式:兔子数量=2**(月份//3+1),故n=m//3。
m//3 
3.下列问题中,适合使用枚举算法解决的有 (  )
①找出50内的所有素数
②计算已知半径的圆的周长
③列举10000以内所有13的倍数
④某次测试成绩排名
⑤在某字符串中找出所有数字
A.①②③ B.①③⑤
C.②③④ D.②④⑤
枚举算法的基本思想是把问题所有可能的解一一列举,然后判断每一个列举出的可能解是否为正确的解。本题中,只有①③⑤适合使用枚举算法解决,②适合使用解析算法,④适合使用排序算法。
B 
√
二、枚举算法
4.小明设置了一个5位数字的密码,可现在他只记得4**9*,“*”位置的数字被遗忘。已知该数字密码是623的倍数,设计Python程序帮助小明找出所有可能的密码。
li=[]
for i in range(40090,50000):
if str(i)[0]=="4" and str(i)[3]=="9" and        :
#append()用于在列表末尾添加元素
li.append(i)
print(li)
请回答下列问题:
(1)该程序使用的算法是       。
(2)请在画线处填入合适的代码。
(1)for循环遍历范围内的所有可能解,if语句进行判断,使用的是枚举算法。 (2)由题意可知,该5位数4**9*是623的倍数。
枚举算法 
i%623==0 
5.著名的鸡兔同笼问题为今有雉兔同笼,上有三十五头,下有九十四足,问雉兔各几何?解决该问题的Python程序如下:
for m in range(0,48):
for n in range(0,24):
if m+n==35 and 2*m+4*n==94:
print("鸡有"+str(m)+"只,兔子有"+str(n)+"只")
下列关于该程序的说法,不正确的是 (  )
A.该程序采用了枚举算法的思想
B.将第一行代码改为“for m in range(0,36)”可以减少枚举次数,优化程序
C.执行该程序段后,输出“鸡有23只,兔子有12只”
D.为了优化程序,可将m和n的范围都修改为range(0,36)
根据描述,一只兔子4只脚,鸡和兔子一共94只脚,因此兔子的数量n不会超过23,若将n的范围修改为range(0,36),会增加n的枚举数量,不能优化算法。
D 
√
6.[2026.1浙江选考]服务器根据温度数据生成状态码,满足一定条件时发送给智能终端以控制风扇运行。生成和发送状态码的规则如下:
①温度≤15℃时,状态码为0;温度≥35℃时,状态码为2;其他温度范围,状态码为1。
②当状态码连续k(k>1)个相同,且与最近已发送状态码不同时,则发送该状态码。
请回答下列问题:
(1)若k为3,最近已发送状态码为1,随后生成的状态码序列为“0,0,0,2,0,0,1,1,1,0”,则由该序列触发的状态码发送次数为       次。
(1)根据题目描述,当状态码连续k(k>1)个相同,且与最近已发送状态码不同时,才会发送状态码,最近已发送状态码为1,则随后生成的状态码序列发送情况如下:
故共发送两次。
2
(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。
sent=last=-1
#获取k值,代码略
while True:
#获取温度数据保存到变量t中,代码略
   ①   .
if t>=35:
code=2
elif t>15:
code=1
if    ②   :
if code!=last:
cnt=1
else:
   ③   .
if cnt==k:
#发送状态码code,代码略
sent=code
last=code
#延时1分钟,代码略
(2)①处code为当前状态码,后面的分支语句给出了code分别为1和2的条件判断,此处应为code赋初值0,故填入代码为code=0。②发送状态码的条件有两个,在后续的代码中只判断了“状态码连续k(k>1)个相同”,此处应先判断“当前状态码与最近已发送状态码不同”,变量sent表示最近已发送状态码,故填入代码为code!=sent。③last表示上一次的状态码,cnt表示当前状态码的连续相同个数,若当前状态码code与上一次的状态码last相同,则cnt累加1,故填入代码为cnt+=1。
code=0 
code!=sent 
cnt+=1 或 cnt=cnt+1 
7.[2026湖丽衢模拟]某电商平台每分钟监测当前排队等待客服服务的用户数,根据等待用户数动态调整客服模式(人工模式或“AI+人工”混合模式)。当排队用户数超过上限阈值N时,系统切换到混合模式;当排队用户数低于下限阈值M(M(1)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。
#设置上限阈值N和下限阈值M,代码略
c=0
ct=[] #记录混合模式的起止时间点
mode=0 #0表示人工模式,1表示混合模式
ctime=1
while True:
#读取当前排队用户数,存入s,代码略
if s>N and mode==0 or    ①   :
c=c+1
if    ②   :
mode=1-mode
ct.append(ctime)
c=0
else:
c=0
   ③   .
#延时1分钟,代码略
(2)如下代码实现的功能是输出ct中每次混合模式的起止时间点,加框处代码有误,请改正。
i=0
while ist=ct[i]
ed=ct[i+1]
#输出混合模式的起止时间点,代码略
i=i+2
sc==3 或 c>=3 
ctime+=1 
i(1)①if语句判断需要切换模式的情况,s>N and mode==0表示排队用户数超过上限阈值N且为人工模式,则另一种情况是排队用户数低于下限阈值M且为混合模式,故填入代码为s=3。③每分钟读取一次当前排队用户数,ctime记录当前时间,故填入代码为ctime+=1。 (2)每次循环取ct[i]和ct[i+1]为一组起止时间点,因此i最大为len(ct)-2,加框处正确代码为i8.[2024.7浙江]某App依据手机每秒钟屏幕的亮、熄,记录当天00:00:00至23:59:59之间手机持续亮屏的各时间段,并生成手机亮屏日志文件。若用0表示熄屏,1表示亮屏,某天前10秒的屏幕状态为“0011011110”,则日志中记为“00:00:02,00:00:03,00:00:05,00:00:08”,表示首个持续亮屏时间段的开始与结束时间点分别为“00:00:02”和“00:00:03”,时长为2秒,而第2个持续亮屏时间段时长为4秒。
编写Python程序读取某天的日志文件,计算并输出手机当天亮屏的总时长、单次持续亮屏时长的最大值和相应的时间段(若相应时间段有多个,则按时间顺序全部输出)。
(1)若某天日志文件记录的前6个时间点如图所示,可知当天10:00:00该手机处于       (单选,填字母:A.亮屏状态 / B.熄屏状态)。
(2)定义函数tosec(x),参数x是形如“08:00:00”的字符串,表示时间点。该函数返回时间点x是当天的第几秒(约定00:00:00为当天第0秒)。请在画线处填入合适的代码。
def tosec(x):
'''从时间点x中提取时、分,转为整型后分别存储在变量h、m中,代码略'''
s=       .
n=h*3600+m*60+s
return n
(1)每2个时间点为一组,分别表示亮屏的开始和结束时间,第2组中亮屏的结束时间为09:59:59,第3组的开始时间为10:05:03,因此10点为熄屏时间。 (2)函数tosec的功能是将时间转换为秒,变量h和m分别表示时和分,因此变量s表示秒,将索引第6、7位上的数字串转换为整型。
B 
int(x[6:]) 或 int(x[-2:]) 
(3)定义函数getdata(t),该函数功能是依次计算每个持续亮屏时间段的时长并存入列表c,对应时间段存入列表d,返回c和d。请在画线处填入合适的代码。
def getdata(t):
i=0
c=[];d=[]
while i       .
#在列表c末尾添加一个元素
c.append(tmp)
d.append(t[i]+"—"+t[i+1])
i+=2
return c,d
(3)函数getdata(t)是依次计算每个持续亮屏时间段的时长和持续时间,i表示t数组中索引,每2个时间点为一个持续的时间段,调用tosec函数将前后两个时间点(t[i+1]和t[i]分别表示结束和开始时间点)转换成对应的秒数,将两个秒数的差值加1,结果为持续时长tmp。
(4)实现上述功能的主程序如下,请在画线处填入合适的代码。
'''读取日志文件中各时间点,依次存入列表t,t形如["08:00:00",……],代码略'''
c,d=getdata(t)
tot=0;cmax=0
res=""
for i in range(len(d)):
tot+=c[i]
if c[i]>cmax:
cmax=c[i]
res=d[i]
elif        :
res=res+","+d[i]
'''输出当天亮屏的总时长tot
输出单次持续亮屏时长的最大值cmax和相应的时间段res
代码略'''
(4)cmax表示最长持续时间,c[i]表示当前的持续时长,若相应时间段有多个,需将c[i]连接到res中,按时间顺序全部输出。
tmp=tosec(t[i+1])-tosec(t[i])+1 
c[i]==cmax 
9.[2026杭州模拟]有两个仅包含数字字符的字符串s1和s2,它们的长度分别为n和m。现要从这两个字符串中各取若干字符,字符数总和为k(k≤n+m),重新拼接这些字符,在保持所取字符在原字符串中相对顺序不变的情况下,组成一个最大的字符串。例如,有字符串"392"和"768",从其中取出4个字符能组成的最大字符串为"9782"。请回答下列问题:
(1)若字符串s1的值为"506",s2的值为"503",则从其中取出5个字符能组成的最大字符串为      。
(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。
def select(s,d):
'''返回由字符串s中d个字符组成的最大字符串,其中字符的相对顺序不变,代码略'''
#读取s1、s2、n、m、k,代码略
   ①   .
for p in range(k):
if p<=n and k-p<=m:
x=select(s1,p)
   ②   .
tmp=""
i,j=0,0
while iif j>=len(y) or i   ③   :
tmp+=x[i]
i+=1
else:
tmp+=y[j]
j+=1
if tmp>res:
res=tmp
print("组成的最大字符串为:",res)
"56503" 
res="" 
y=select(s2,k-p) 
x[i:]>y[j:] 或 x[i:]>=y[j:] 或其他等价答案 
(1)对于字符串s1="506"和s2="503",需要从中选出5个字符组成最大的字符串。可以枚举从s1中取2或3个字符,从s2中取剩余的3或2个字符,组合后比较大小,最终选择s1的"56"和s2的"503"拼接得到"56503"。 (2)①在循环开始前,需要一个变量来保存当前能组成的最大字符串,以便在每次生成候选字符串后进行比较,这个变量应初始化为空字符串,故填入代码为res=""。②在循环中,p表示从s1中取出的字符数,剩下的k-p个字符需要从s2中选择,故填入代码为y=select(s2,k-p)。③在合并x和y时,需要选择当前可以放入结果字符串的最大字符,同时保持原字符串顺序不变,正确的做法是比较剩余的子串x[i:]和y[j:],如果x[i:]>y[j:],应选择x[i],否则选择y[j],故填入代码为x[i:]>y[j:]或其他等价答案。
10.[2022.7浙江]查找与替换。从键盘上分别输入要查找和替换的字符串,对文本文件进行查找与替换,替换后保存到新的文本文件中。
实现查找与替换功能的思路是:首先可从待检索文本文件“in.txt”逐行读取文本内容到列表text,然后从键盘上输入查找的字符串key和替换的字符串new,对列表text中的元素逐个进行查找并替换,结果保存到列表result,最后将result写入文件“out.txt”。
(1)主程序。
text=readfile("in.txt") #读入文件
key=input("请输入要查找的字符串:")
new=input("请输入要替换的字符串:")
result=[]
for line in text:
newline=replace(key,new,line) #替换
result.append(newline) #添加到列表
writefile("out.txt",result) #写入文件
该程序段采用的算法是       (单选,填字母:A.解析算法 / B.枚举算法)。
(1)解析算法的基本思想是指根据问题的前提条件与所求结果之间的关系,找出求解问题的数学表达式,并通过表达式的计算来实现问题的求解,枚举算法的基本思想是把问题所有可能的解一一列举,然后判断每一个列举出的可能解是否为正确的解。从题干“……逐行读取文本内容到列表text……”可以推断出使用了枚举算法。
B 
(2)读写文本文件。如下的readfile函数,逐行读取文本文件数据存入列表并返回。请在画线处填入合适的代码。
def readfile(filename):
#打开文件
f=open(filename,encoding="UTF-8")
text=[]
line=f.readline() #从文件中读取一行
while line:
text.append(line) #添加到列表
line=f.readline()
f.close()
return        .
def writefile(filename,text):
#将text写入filename文件,代码略
(2)根据题干“逐行读取文本文件数据存入列表并返回”,观察列表相关语句“text=[]”和“text.append(line)”,应填入的代码为text。
text 
(3)查找字符串。如下的findstr函数,在字符串line中从begin位置开始查找key在字符串line中的位置,请在画线处填入合适的代码。
def findstr(key,line,begin):
for i in range(begin,len(line)-len(key)+1):
if        :
return i
return -1
(3)自定义函数findstr的功能是在字符串line中查找key,如果找到了,则返回第一次出现key的索引,如果不存在key,则返回-1。从语句“for i in range(begin,len(line)-len(key)+1)”看出for循环语句遍历索引,因此从line中选择从i开始长度为len(key)的字符,和key进行比较,故填入代码line[i:i+len(key)]==key。
line[i:i+len(key)]==key 
(4)替换字符串。如下的replace函数,在字符串line中检索所有的字符串key并替换为new,请在画线处填入合适的代码。
def replace(key,new,line):
begin=0
while beginpos=findstr(key,line,begin)
if pos==-1:
       .
else:
line=line[0:pos]+new+line[pos+len(key):len(line)]
begin=pos+len(key)
return line
(4)自定义函数replace的功能是在字符串line中检索所有的字符串key并替换为new,程序使用了while循环从begin开始遍历字符串line,调用自定义函数findstr在字符串line中查找key,返回值为pos,若pos==-1成立,说明当前行不存在key,直接跳出循环或终止循环即可,故填入代码为break,或其他能跳出循环的、改变变量begin的语句。
break 或其他等价答案 
11.[2023.6浙江选考]某仓库有一排连续相邻的货位,编号依次为0~n-1,用于放置A、B两种类型的箱子,A型箱子占2个相邻货位,B型箱子占1个货位。编写程序,根据已完成的放置或搬离操作,输出空货位数及还可放置A型箱子的最多数量(不移动已放置的箱子)。请回答下列问题:
(1)若n为10,开始时货位全空,经过如图所示的放置或搬离操作后,不移动已放置箱子的情况下,还可放置A型箱子的最多数量为       个。
(1)10个空位放置情况如图所示,一个A型箱要占2个相邻货位,故最多可放2个。
2 
(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。
#读取货位总数,存入n,代码略
cnt1=n
#货位状态,0表示对应的货位为空
lst=[0]*n
while True:
'''读取本次已操作的数据:箱子类型、操作类型、货位编号起始值,存入t、d和s,代码略'''
if t=='A':
w=2
   ①   :
w=1
else: #t不是'A'或'B'时退出循环
break
#d为'P'时表示放置,否则表示搬离
if d=='P':
   ②   .
(2)①处从cnt1=n可以看出,cnt1是空位数量。搬离时cnt1+=w,说明变量w为应搬离的数量,那么当t=='B'时,搬离数量w应为1,故填入代码为elif t=='B'。②处搬离时空位加w,则放置时空位减w,故填入代码为cnt1-=w。③处列表lst存储货位状态,0表示对应的货位为空,故此处统计连续两个空位的个数并存储到变量cnt2,统计完后索引i的值加2,由于if结构下面索引i已经加1,故填入代码为i+=1。
else:
cnt1+=w
lst[s]=1-lst[s]
if t=='A':
lst[s+1]=1-lst[s+1]
i,cnt2=0,0
while iif lst[i]==0 and lst[i+1]==0:
   ③   .
cnt2+=1
i+=1
print('当前空货位数:',cnt1,',还可放置A型箱子的最多数量:',cnt2)
elif t=='B' 
cnt1-=w 或 cnt1=cnt1-w 
i+=1 或 i=i+1 
12.[2024.6浙江选考]某监控设备可定时采集红绿信号灯状态数据,数据格式记为[a,b],其中a、b分别为红灯和绿灯的状态值,0表示灯灭,1表示灯亮,如[0,1]表示红灯灭、绿灯亮。
现要编写程序,每隔1秒采集并检测信号灯是否存在如下异常状态:第一类,红绿灯同亮或同灭;第二类,红灯或绿灯超时,即保持同一状态时长大于上限值(如300秒)。检测到异常状态就发送相应信息。请回答下列问题:
(1)若检测到“红绿灯同亮”异常,则采集到的数据是       (单选,填字母)。
A.[0,0]
B.[0,1]
C.[1,0]
D.[1,1]
(1)根据题意,0表示灯灭,1表示灯亮,故红绿灯同亮为[1,1]。
D 
(2)实现上述功能的部分Python程序如下,请在画线处填入合适的代码。
#设置信号灯保持同一状态时长上限值
tlimit=300
pre=[-1,-1]
'''t[0]、t[1]分别记录红灯、绿灯保持同一状态的时长'''
t=[0,0]
while True:
#接收一次采集到的状态数据,存入d,代码略
if    ①   :
if d[0]==1:
#发送“红绿灯同亮”信息,代码略
else:
#发送“红绿灯同灭”信息,代码略
(2)①根据if下面的语句块可知,画线处判断红绿灯是否处于相同状态,故填入代码为d[0]==d[1]。②根据for循环中的语句可知,i是列表d、pre和t的索引,故填入代码为range(2)。③循环遍历两个灯的状态,若当前状态与上一次状态相同,则持续时长t[i]加1,若持续时长大于上限值tlimit,则发送超时信息,故填入代码为t[i]>tlimit。
for i in    ②   :
if d[i]==pre[i]:
t[i]+=1
if    ③   :
if i==0:
'''发送“红灯超时”信息,代码略'''
else:
'''发送“绿灯超时”信息,代码略'''
else:
t[i]=1
pre=d
#延时1秒,代码略
range(2) 或 range(len(d)) 
t[i]>tlimit 
d[0]==d[1] 

展开更多......

收起↑

资源预览