小尼用“0”与“1”数字字符串记录了小张连续若干局的竞赛得分数据,该数据存在一处错误,错误在连续多个0的最后一个位置。为了找出错误,小尼的处理方法如图a所示,程序运行示例如图b。
(1)小尼的某次记录为:"1010101000101101111001111",按照小尼的修改方式处理后每局的比分为。
(2)定义Find_errors(a)函数,列表a存放小尼记录的比分。函数功能是找出疑似错误位置。
def Find_errors(a):
head=-1; tail=-1
link= []; i = 0
while i < len(a):
k = i
while i < len(a) and a[i] == 0:
i += 1
if:
link.append([i-1,-1])
if tail==-1:
head=len(link)-1
else:
link[tail][1]=len(link)-1
tail=len(link)-1
i += 1
return head,link
①在划线处填入合适的代码
②若列表a= [1,0,1,0,1,0,0,0,1,1,1,0,1,1,0,1,0,0,1],则link的最终值为 。
(3)对每个疑似错误位置分别修改数据,并统计每局比分,请在划线处填入合适的代码。
def Accumulated_points(a,head,link):
ans=[] ; p=head
while p!=-1:
f1 = 0 ; f2 = 0 ; flag=True
k = link[p][0]; a[k] = 1
sp = str(k + 1) + " "
for j in range(len(a)):
if a[j] == 1:
f1 += 1
else:
f2 += 1
①:
sp += "/" + str(f1) + ":" + str(f2)
f1 = 0; f2 = 0
if f1!=0 or f2!=0:
flag=False
if flag:
ans.append(sp)
②
p=link[p][1]
return ans
# 获取小尼记录数据,存入列表a中,代码略
head,link=Find_errors(a)
ans=Accumulated_points(a,head,link)
if len(ans)>0:
#输出修改后的每局比分,代码略
else:
print("记录数据有误")