内容正文:
第4课 数组3——数组应用
第二章│数组与链表
——2.1 数组,教材P34~45
新课程目标
1.利用数组结构进行数据分析,解决实际问题。
目录
CONTENTS
教材整体感悟 知本与探源
01
02
命题整体感知 尝试与研析
01
教材整体感悟 知本与探源
教材整体感悟 知本与探源
本课核心点 ● 重难点
1.基于数组实现数据合并
(1)实现方式1
a=[2,5,6,9,11]
教材整体感悟 知本与探源
b=[1,10,12,13,15,18]
c=[]*(len(a)+len(b))
pa,pb,pc=0,0,0
while pa<len(a) and pb<len(b):
if a[pa]<b[pb]:
c[pc]=a[pa]
pa+=1
教材整体感悟 知本与探源
else:
c[pc]=b[pb]
pb+=1
pc+=1
while pa<len(a):
c[pc]=a[pa]
pa+=1
教材整体感悟 知本与探源
pc+=1
while pa<len(b):
c[pc]=b[pb]
pb+=1
pc+=1
print(”数据合并后, 数组c中元素为: ”,c)
(2)实现方式2
教材整体感悟 知本与探源
a=[2,5,6,9,11]
b=[1,10,12,13,15,18]
c=[]
pa,pb=0,0
while pa<len(a) and pb<len(b):
if a[pa]<b[pb]:
c.append(a[pa])
教材整体感悟 知本与探源
pa+=1
else:
c.append(b[pb])
pb+=1
while pa<len(a):
c.append(a[pa])
pa+=1
教材整体感悟 知本与探源
while pa<len(b):
c.append(b[pb])
pb+=1
print(”数据合并后, 数组c中元素为: ”,c)
(3)实现方法3
a=[2,5,6,9,11]
b=[1,10,12,13,15,18]
教材整体感悟 知本与探源
i=len(a)-1
j=len(b)-1
for t in range(len(b)):
a.append(0) # 为b追加一个元素0
k=len(a)-1
while j>=0:
if i>=0 and a[i]>b[j]:
教材整体感悟 知本与探源
a[k]=a[i]
i-=1
else:
a[k]=a[j]
j-=1
k-=1
print(”数据合并后, 数组a中元素为: ”,a)
教材整体感悟 知本与探源
2.矩阵的转置,将矩阵的行列互换得到的新矩阵称为转置矩阵,转置矩阵的行列式不变
(1)实现方法1:
A=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
B=[]
for i in range(len(A[0])):
temp=[]
教材整体感悟 知本与探源
for j in range(len(A)):
temp.append(A[j][i])
B.append(temp)
print(”原矩阵: ”)
print(A)
print(”转置后矩阵: ”)
print(B)
教材整体感悟 知本与探源
(2)实现方法2:
A=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
B=[[0 for j in range(len(A))] for i in range(len(A[0]))]
for i in range(len(A[0])):
for j in range(len(A)):
B[i][j]=A[j][i]
print(”原矩阵: ”)
教材整体感悟 知本与探源
print(A)
print(”转置后矩阵: ”)
print(B)
3.一维数组实现矩阵
A=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],将列表划分为4行4列的矩阵,如图所示。已知i表示行号,j表示列号,n表示总列数。
教材整体感悟 知本与探源
(1)取第3行第2列的值(i=3,j=2),表达式为:A[i*n+j]。
注意:i*n+j表示列表A中的索引(下标)。
(2)已知 p=9(p为列表A中的索引),则在矩阵中行号:i=p//n;在矩阵中列号:j=p%n,即在矩阵中的第2行第1列。
02
命题整体感知 尝试与研析
命题整体感知 尝试与研析
例1[2023·杭州学军检测]数组a存储降序排列的m个数据,数组b存储升序排列的n个数据,两个数组中存储的数据为[1,20]范围的不重复的随机整数。现将两个数组的数据合并到数组c中,使数组c的数据为左右交替上升。
a=[19,17,6,4,3]
命题整体感知 尝试与研析
b=[5,7,8,13,15,20]
m=len(a);n=len(b)
c=[-1]*(m+n)
pa=m-1;pb=0;pc=0;k=1
while ①_________________________:
if pa==-1 or a[pa]>b[pb]:
s=b[pb]
pa>=0 or pb<=n-1
命题整体感知 尝试与研析
pb+=1
elif pb==n or a[pa]<b[pb]:
s=a[pa]
②_______________
c[pc]=s
k=1-k
pa-=1
命题整体感知 尝试与研析
print(c)
(1)若数组a为14,9,5,3,数组b为1,2,7,15,20,则数组c为
_____________________________________。
(2)请在横线处填入合适的代码。
(3)程序中加框处代码有误,请改正:_________________________。
【解析】 (1)根据题目描述可以得到。
(2)需要将数组a和数组b有序数据段合并至新数组c中,使其数据为左右
1,3,7,14,20,15,9,5,2
pc=m+n-pc-k
命题整体感知 尝试与研析
交替上升。在此处的while循环遍历数组a和数组b中的所有数据,根据存放需要,数组a从数组尾开始,数组b从数组头开始,所以①处的答案为pa>=0 or pb<=n-1;if语句用于判断,将那个数组中的元素记录在s中,结合上下代码,elif中记下数组a元素,pa前移,所以②处的答案为pa-=1。
(3)确定pc的位置,由于需要前后放置,当上次在前面时,则需要转换到后面,其中k确定是前移还后移,故改错答案为:pc=m+n-pc-k。
命题整体感知 尝试与研析
变式1有2 组器件共n 个,要用一台检测设备检测。每个送检器件的信息包含送达时间(时间单位为秒,下同)、检测时长和优先级。优先级有m(1<m<6)个等级,由高到低分别用0~m-1 的整数表示。每个机器件的送达时间各不相同。编写Python程序模拟检测过程,先合并两组器件的数据,然后计算所有器件的平均等待时长,其中每个器件等待时长为其开始检测的时间与送达时间的时间差。请回答下列问题:
(1)由题意可知,图中器件A、B、C、D 的检测顺序为A-C-D-B,如果A、C、D 的等待时长分别为0、1、0,则B 的等待时长为_______。
6
命题整体感知 尝试与研析
(2)定义如下merge(lst1, lst2)函数,参数lst1 和lst2 的每个元素由送达时间、检测时长和优先级3 项构成,lst1 和lst2 均已按送达时间升序排列。函数功能是将lst2 中的元素合并到lst1 中,并将lst1 按送达时间升序排列,函数返回lst1。
命题整体感知 尝试与研析
def merge(lst1,lst2):
i=len(lst1)-1
j=len(lst2)-1
for t in range(len(lst2)):
lst1.append([0,0,0]) # 为lst1 追加一个元素[0,0,0]
k=len(lst1)-1
while j>=0:
命题整体感知 尝试与研析
if i>=0 and lst1[i][0]>lst2[j][0]:
lst1[k]=lst1[i]
i-=1
else:
lst1[k]=lst2[j]
j-=1
k-=1
命题整体感知 尝试与研析
return lst1
①调用merge(lst1,lst2)函数,若lst1 为[[0,3,2],[1,1,2],[12,2,2]],lst2 为[[2,1,1],[4,3,0],[11,3,2]],则while 语句中循环体的执行次数是__________。
②若函数中while 语句的条件“j>=0”误写为“k>=0”,会导致某些情况下无法得到符合函数功能的结果。调用merge(lst1,lst2)函数,下列4 组数据中能测试出这一问题的是_________ (单选,填字母)。
4
A
命题整体感知 尝试与研析
A.lst1=[[0,3,2],[4,3,0]] lst2=[[1,1,2]]
B.lst1=[[1,1,2]] lst2=[[0,3,2],[4,3,0]]
C.lst1=[[1,1,2],[4,3,0]] lst2=[[0,3,2]]
D.lst1=[[4,3,0]] lst2=[[0,3,2],[1,1,2]]
【解析】 (1)从表格中可以看出A 的优先级为2,A 在处理时,B 和C 在等待,A 在时刻3 处结束,B 和C 等待了2 秒和1 秒,C 的优先级比B 的优先级高,C 先处理,从时刻2 到达,在时刻4 结束。D 在时刻4 到达,
命题整体感知 尝试与研析
优先级比B 高,D 先处理,在时刻7 结束,因此B 在7 时刻开始处理,每个器件等待时长为其开始检测的时间与送达时间的时间差,因此B 的等待时长为7-1=6。如图所示:
(2)①若lst1 为[[0,3,2],[1,1,2],[12,2,2]],lst2 为[[2,1,1],[4,3,0],[11,3,2]],结合自定义函数的程序,将具体数据代入,程序先在lst1 后添加len(lst2)个数据元素,再比较大小,将较大值从后往前
命题整体感知 尝试与研析
放入lst1 中,过程如下图所示,可知循环体执行了4 次。
②若函数中while 语句的条件“j>=0”误写为“k>=0”,j 是指向lst2 的指针,则当lst2 中的数据已经处理完时,会出问题,因此答案选A。
命题整体感知 尝试与研析
例2蛇形矩阵(Snake matrix)是矩阵的一种,请将程序段中横线处补充完整,分别输出如图所示的两种蛇形矩阵:
def snake1(n):
a=[[0 for i in range(n)] for j in range(n)]
命题整体感知 尝试与研析
s=1
for i in range(n):
if①_________________:
for j in range(n):
a [i][j]=s
s+=1
else:
i%2==0
命题整体感知 尝试与研析
for j in range(②_______________________):
a[i][j]=s
s+=1
return a
def snake2(n):
a=[[0 for i in range(n)] for j in range(n)]
left,right,low,high=0,n-1,0,n-1
n-1,-1,-1
命题整体感知 尝试与研析
s=1
while left<=right:
for i in range(left,right+1):
③_________________
s+=1
low+=1
for i in range(low,high+1):
a[low][i]=s
命题整体感知 尝试与研析
a[i][right]=s
s+=1
right-=1
for i in range(right,left-1,-1):
a[high][i]=s
s+=1
④__________________
high-=1
命题整体感知 尝试与研析
for i in range(high,low-1,-1):
a[i][left]=s
s+=1
left+=1
return a
# 主程序
size=6
命题整体感知 尝试与研析
print(”蛇形矩阵1”)
a=snake1(size)
for i in range(size):
for j in range(size):
print(f'{a[i][j]:3}',end=””)
print()
print(”蛇形矩阵2”)
命题整体感知 尝试与研析
b=snake2(size)
for i in range(size):
for j in range(size):
print(f'{b[i][j]:3}',end=””)
print()
【解析】 蛇形矩阵1的特征是奇数行数字顺序排列,偶数行数字逆序排列。可以先创建一个二维数组,并初始化所有元素值为0,然后从上到
命题整体感知 尝试与研析
下扫描方阵,其中顺序扫描奇数行,逆序扫描偶数行,依次修改每个元素的值为s,每修改一个元素值就让s增1。
蛇形矩阵2 的特征是顺时针从外到内时元素值递增。可以设置4 个变量分别表示矩阵的左、右、上、下边界, 按照顺序横向、顺序纵向、逆序横向、逆序纵向的顺序从外向内依次修改每个元素的值为s,每修改一个元素值就让s增1。为了实践模块化编程的思想, 程序把生成蛇形矩阵的算法设计成一个函数,然后在主函数中调用这些函数,并输出蛇形矩阵。
命题整体感知 尝试与研析
例3 用4×4 的方阵表示时钟,一列表示一个数字,列1、列2 表示“时”,列3、列4 表示“分”,将每个数字转换为4 位二进制,显示在相应列中,如时间“08:25”每位数字转换成二进制分别是“0000”“000”“0010”“0101”,在方阵中表示如图1所示,最终时钟效果如图2所示。用Python 程序模拟方阵时钟的效果,“08:25”的模拟结果如图3所示。
图1 图2 图3
命题整体感知 尝试与研析
(1)时间“19:07” 的方阵时钟效果为_______ (单选,填字母)。
(2)实现上述功能的程序如下,请在横线处填入合适的代码。
b=[0,0,0,0,
0,0,0,0,
A. B.
A
命题整体感知 尝试与研析
0,0,0,0,
0,0,0,0 ] # 表示4×4 方阵
time=input(”输入时间(例: 08:25 输入0825): ”)
for i in range(len(time)):
n=①_________________
r2=””
for j in range(4): # 将数字转为4 位二进制
int(time[i])
命题整体感知 尝试与研析
r2=②__________________
n//=2
for j in range(len(r2)):
if r2[j]==”1”:
b[j*4+i]=1
s=””
print(time,”模拟结果: ”)
str(n%2)+r2
命题整体感知 尝试与研析
for i in range(len(b)):
s+=str(b[i])+” ”
if ③________________________________:
print(s)
s=””
【解析】 (1)1D=0001B;9D=1001B;7D=0111B,选项A正确。
(2)①将输入的时间依次提取字符,并转换为数值,答案为int(time[i]);
(i+1)%4==0 或i%4==3
命题整体感知 尝试与研析
②十进制转二进制,并将余数逆序连接,答案为str(n %2)+r2;③判断一行是否已满,已满则换行,答案为(i+1)%4==0 或i%4==3。
命题整体感知 尝试与研析
例4[2023·嘉兴一中检测]某学校工会举行书画大赛,共邀请8位评委,评分范围为1至10分,选手总分为8位评委评分之和去掉1个最高分,每位选手的得分数据记录在文本文件中,如图1所示。
命题整体感知 尝试与研析
(1)主程序。从文本文件读取数据,计算选手总分,按照总分由高到低输出。运行结果如图2所示。请在该程序段的横线处填入合适的代码。
data=readdata(”scores.txt”)
print(”各选手总分数据为:
”,data)
n=①_______________
flag=[True]*n #标记数据是否可使用
print(”总分从高到低为: ”)
len(data)
命题整体感知 尝试与研析
for i in range(②________________):
pos=findmax() #在数组data中查找可使用的最大数的位置
flag[pos]=False #设置使用状态
print(data[pos][0],data[pos][1])
(2)编写readdata()函数,从文本文件读取数据,计算总分,返回列表格式如图2所示。请在该程序段的横线处填入合适的代码。
def readdata(filename): #读取数据,计算总分,返回列表
0,n或n
命题整体感知 尝试与研析
f=open(filename)
line=f.readline()
lst=[]
while line:
sp=line.split(”,”) #以逗号为分隔符,切分每行数据
s=0
imax=0
命题整体感知 尝试与研析
for i in range(1,len(sp)): #取每个评分数据
val=int(sp[i])
if val>imax:
imax=val
s=s+val
③___________________________ #计算每位选手最终的得分
lst.append([sp[0],s]) #添加到列表
s=s-imax或s-=imax
命题整体感知 尝试与研析
line=④___________________
return lst
(3)编写findmax()函数,功能为在数组data中查找当前最大数,并返回该数在数组中的索引位置,程序段如下:
def findmax():
maxnum=0
for i in range(n):
f.readline()
命题整体感知 尝试与研析
if⑤ :
maxnum=data[i][1]
pos=i
return pos
在该程序段的横线处填入代码,合适的选项是______ (单选,填字母)。
A.maxnum>data[i][1] and flag
B.maxnum>data[i][1] or not flag
C
命题整体感知 尝试与研析
C.maxnum<data[i][1] and flag[i]
D.maxnum<data[i][1] or flag[i]
【解析】 (1)①由前后代码可知,需要对n赋初值,n表示选手人数,答案为len(data)。
②按列表查找列表中的最大值,并利用语句flag[pos]=False,将查找到的相应位置的标记为已使用,下次不再判断,答案为0,n。
(2)readdata()函数的任务是按行读取scores.txt的内容。
命题整体感知 尝试与研析
③for循环将所有评委得分累加,但需要去除最高得分,最高的存储在imax中,答案为s-=imax。
④读取下一行,答案为f.readline()。
(3)findmax()函数找到剩余数据中的最大值,判断语句的条件为当前分数大于目前最大值且当前分数没有被标记过,具体语句maxnum<data[i][1]and flag[i]。
命题整体感知 尝试与研析
变式1 为统计班级同学假期的阅读情况,王老师通过某APP 设置打卡任务,记录阅读打卡信息“姓名,打卡日期,阅读开始时间,结束时间”。他从数据库导出上周的打卡记录数据,如图1所示。编写Python 程序统计上周每位同学阅读的总时长,并按总时长从高到低选出前5 位同学授予“阅读之星”的称号,
若有同学的阅读总时长
相同,则一起输出。程
序运行结果如图2所示。
命题整体感知 尝试与研析
(1)若某条打卡记录为“YYF,2022/8/3,20:32:15,20:47:41”,则该同学的阅读时长为_________秒。
(2)时间格式转换。定义如下的convert()函数,将“时:分:秒”的格式转换为秒,请在横线处填入合适的代码。
def convert(s):
m=int(s[0:2])*3600+_________________________________#
return m
926
int(s[3:5])*60+int(s[6:8])
命题整体感知 尝试与研析
(3)主程序。逐行读取“data.csv”文件中的数据,根据阅读开始时间和结束时间,计算每位同学的阅读总时长,并按要求输出符合条件的同学,请在横线处填入合适的代码。
file=open(”data.csv”) #打开文件
line=file.readline() #从文件中读取一行
stu={} #存储每位同学的阅读总时长
while line:
命题整体感知 尝试与研析
info=line.split(”,”) #将line 以“,”为分隔符,分割成多个字符串组成的列表
t=①_________________________________
if info[0] in stu:
stu[info[0]]+=t
else:
②_____________________
convert(info[3])-convert(info[2])
stu[info[0]]=t
命题整体感知 尝试与研析
line=file.readline()
file.close()
select(stu) #调用select()函数输出符合条件的同学信息
(4)输出符合条件的同学。定义如下的select()函数,按照每位同学的阅读总时长降序排序,输出前5 位同学的姓名和阅读时长。若有同学的阅读总时长相同,则一起输出。
def select(stu):
命题整体感知 尝试与研析
x=list(stu.items()) #列表x 的元素由字典中每个键值对“(键,值)”组成
x.sort(key=lambda x:x[1],reverse=True) #以阅读总时长为关键字进行降序排序
print(”上周班级阅读之星: ”)
for i in range(len(x)):
命题整体感知 尝试与研析
print(”姓名: ”+x[i][0],”阅读总时长: ”+str(x[i][1]))
请回答下列问题:
①执行画线处的代码后,列表x 中的部分数据如下所示:
x=[['XZZ',8100],['WYQ',11515],['CJY',11928],['CXK',10171], …]
若姓名为“XZZ”同学的阅读总时长可用x[0][1]访问,则姓名为“CJY”同学的阅读总时长可用_____________访问。
②程序中加框处代码有误,请改正:______________________________。
x[2][1]
i>=5 and x[i][1]!=x[i-1][1]
命题整体感知 尝试与研析
【解析】 (1)(47-32)*60+41-15=926
(2)将时间转换成为秒,将小时转换为秒:int(s[0:2])*3600;将分钟转换为int(s[3:5])*60 ,加上秒 int(s[6:8]),答案为int(s[3:5])*60+int(s[6:8])。
(3)while line循环,逐行读取阅读数据,并利用字典stu,统计每位学生的阅读时间。
①调用函数convert()将时间转换为秒,并将结束时间减去开始时间,存入字典中,答案为convert(info[3])-convert(info[2])。
命题整体感知 尝试与研析
②如果该学生第1次出现,则在字典中添加元素,info[0]学生姓名为键,时间为键值。
(4)①x[2][0]的值为CJY,则阅读时间为11928存储在x[2][1]。②第5名可能有多个,如果人数超过了5个,则判断是否与前一个相同,如果不同则查找结束,答案为:i>=5 and x[i][1]!=x[i-1][1]。
命题整体感知 尝试与研析
|随|堂|检|测|
1.某程序功能如下:输入n,生成n×n的方阵,内容为1~9的随机整数,存于列表a中。再对以(x0,y0)和(x1,y1)为对角顶点的矩形区域中的数据进行水平翻转,并将变换后的二维数组以矩阵形式输出,再输入小于n的四个数字(如a,b,c,d,四者关系必须满足a<c,b<d),用逗号间隔。输入“2,1,6,5”,则左上角为a[1][2] ,右下角为a[5][6],则运行程序后,运行界面如图所示:
命题整体感知 尝试与研析
(1)以上图为例,如果输入左上角+右下角的坐标为“2,3,7,5”。水平翻转后,则元素a[3][4]的值在新数组保存在元素a[_____][_____](填写下标)中。
3
5
命题整体感知 尝试与研析
(2)实现上述功能的Python程序如下,请在横线处填入合适的代码。
#生成n*n的矩阵
import random
n=input(”输入n, 产生n*n的方阵: ”)
a=[[random.randint(1,9) for i in range(n)] for j in range(n)]
for i in a:
print(i)
命题整体感知 尝试与研析
print()
x,y=[],[]
xy=input(”请输入左上角+右下角坐标: ”) #输入左上角坐标+右下角坐标,用逗号分隔数字,如:“2,1,14,13”
xy=xy+”,”
c,j=0,0
for i in range(len(xy)):
命题整体感知 尝试与研析
if xy[i]==”,”:
if ①__________________________________________:
x.append(int(xy[j:i]))
else:
y.append(int(xy[j:i]))
②____________
c=c+1
c%2!=0 或c%2==1 或其他等价答案
j=i+1
命题整体感知 尝试与研析
for i in range(x[0],x[1]+1,1):
for j in range(y[0],(y[0]+y[1])//2+1,1):
a[i][j],a[i][③_________________]=a[i][③________________],a[i][j]
for i in range(len(a)):
print(a[i])
【解析】 (1)由于2,1,6,5 表示左上角为a[1][2] ,右下角为a[5][6],
y[0]+y[1]-j
y[0]+y[1]-j
命题整体感知 尝试与研析
则2,3,7,5表示左上角为a[3][2] ,右下角为a[5][7];在同一行对换,4与5之间交换。
(2)提取字符串操作,由于先y再x,c的初始值为0,所以c为偶数为存入y,为纵坐标。
①处答案为c%2!=0 或c%2==1 或其他等价答案。
②j为下一数字的开始位置,i指向“,”位置,答案为j=i+1。
③对称位置交换,答案为y[0]+y[1]-j。
命题整体感知 尝试与研析
2.[2023·苍南中学检测]机器人移动路线管理。机器人在一平面内按照程序预置数据来完成移动操作(如图所示),规则如下:①只能水平或垂直方向移动,方向取值为上U、下D、左L、右R,不能走斜线;每次移动1~5 单位距离;②从起点出发,经过若干步后,尽可能返回到起点,如不能自动返回,则计算剩余移
动次数。实现上述功能的Python
程序如下,请在横线处填入合适
的代码。
命题整体感知 尝试与研析
(1)主程序。
bp=startpos() #输入起点坐标
dirt=[] #移动方向
step=[] #移动距离
readdata() #从“data.csv” 文件中读取移动数据
pos=[bp] #从起点开始存储所有经过点的x、y 坐标
for i in range(0,len(dirt)): #利用预置数据移动
命题整体感知 尝试与研析
tmp=move(pos[i],dirt[i],step[i])
pos.append(tmp)
print(”经过的位置点如下所示: ”,”n”,pos)
if tmp==_______________ #判断能否返回起点
print(”可以直接返回起点位置! ”)
else:
print(”不能直接返回起点位置! ”,end=””)
pos[0] 或bp
命题整体感知 尝试与研析
stpx=gettimes(pos[0][0],pos[-1][0])
stpy=gettimes(pos[0][1],pos[-1][1])
print(”至少需要移动”+str(stpx+stpy)+”次才能返回起点位置! ”)
(2)编写函数startpos(),功能为输入起点坐标,返回坐标的值,返回值类型为列表。代码如下:
def startpos():
命题整体感知 尝试与研析
x=int(input(”输入起点的x 坐标: ”))
y=int(input(”输入起点的y 坐标: ”))
return _____________#
(3)编写函数readdata(),功能为从CSV 文件中读取预置的移动数据。代码如下:
def readdata():
import csv
[x,y]
命题整体感知 尝试与研析
f=open(”data.csv”,”r”,encoding=”utf——8”)
f_csv=csv.reader(f)
title=next(f_csv) #读取标题行
for line in f_csv:
dirt.append(line[0])
step.append(_________________)#
f.close()
int(line[1])
命题整体感知 尝试与研析
(4)编写位置移动函数move(),实现计算移动到的新位置。代码如下:
def move(pos,dr,lg): #位置移动
new_pos=[0,0]
if dr==”U”:
x=0;y=1
elif dr==”D”:
x=0;y=-1
命题整体感知 尝试与研析
elif dr==”L”:
x=-1;y=0
elif dr==”R”:
x=1;y=0
new_pos[0]=pos[0]+x*lg
___________________________#
return new_pos
new_pos[1]=pos[1]+y*lg
命题整体感知 尝试与研析
(5)编写函数gettimes(),计算剩余移动次数。代码如下:
def gettimes(p1,p2):
p=abs(p1-p2)//5
if abs(p1-p2)%5!=0:
_______________#
return p
【解析】 (1)这里比较简单,按注释,判断是否起点。起点坐标保存在变
p=p+1
命题整体感知 尝试与研析
量bp 中,还有列表pos 中索引为0的位置,所以填写:bp 或pos[0]。
(2)这里按要求写即可,关键是看清要求,返回值的类型为列表,代码:
[x,y]。
(3)这里根据代码上下文,容易想到的是:line[1],根据函数调用代码move(pos[i],dirt[i],step[i]),分析move()函数相关代码,step[i] 对应参数lg,lg 应该是一个整数,所以这里对应的代码是:int(line[1])。
(4)new_pos[0]是横坐标,那么new_pos[1]就应该是纵坐标,代码是:new_pos[1]=pos[1]+y*lg。
命题整体感知 尝试与研析
(5)根据return p,可知变量p 保存的是移动次数。根据p=abs(p1-p2)//5,如果条件语句不满足(能整除5),函数值就直接返回p 了,就要多移动一次,代码是:p=p+1 或p+=1。
感谢聆听,再见!
pc=
if :
break
$$