测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A21834. 字符消消乐有一个字符消消乐游戏。随机产生一串长度为n只包含数字“456”的字符串,如有连续相同的字符则进行消除,提示:字符“0”的 ASCII码值是十进制48。如字符串“455655565”,其消除过程如下:第一步:消除字符“5”后形成新字符串“4655565”;第二步,消除字符“5”后形成新字符串“4665”;第三步,消除字符“6”后形成新字符串“45”;最后消除结束,结果为“45”。实现上述…

填空题 困难

题目描述

字符消消乐

有一个字符消消乐游戏。随机产生一串长度为n只包含数字“456”的字符串,如有连续相同的字符则进行消除,提示:字符“0”的 ASCII码值是十进制48。

如字符串“455655565”,其消除过程如下:

第一步:消除字符“5”后形成新字符串“4655565”;

第二步,消除字符“5”后形成新字符串“4665”;

第三步,消除字符“6”后形成新字符串“45”;

最后消除结束,结果为“45”。

实现上述功能的Python程序如下,请在划线处填入合适的代码。

import random
n=int(input("请输入字符串长度:"))
s=""
for i in range(n):         #生成n个由“456”字符组成的字符串
    m=random.randint(4,6)
    s=s+chr(48+_______① ________ )
print("字符串为:",s)
i=0
while i<len(s):     #变量i存储连续相同字符的起始位置索引
    r=i    #变量r存储连续相同字符的末尾位置索引
    while r<len(s)-1 and ______② ________ :   #留意r值的范围,索引不能越界
        r=r+1
    if ______③________ :       #当有2个及以上连续相同的字符,需要消除
        s=s[:i]+ ______④________                
      ______⑤________                   
    else:
        i=i+1
print("消除后,字符串为:",s)

参考答案

import random n=int(input("请输入字符串长度:")) s="" for i in range(n):     #生成n个由“456”字符组成的字符串     m=random.randint(4,6)     s=s+chr(48+m) print("字符串为:",s) i=0 while i<len(s):    #枚举思想,变量i存储连续相同字符的起始位置索引     r=i        #变量r存储连续相同字符的末尾位置索引     while r<len(s)-1 and s[r]==s[r+1]:     #留意r值的范围,索引不能越界         r=r+1     if i<r:     #当i<r时,说明有2个及以上连续相同的字符,需要消除         s=s[:i]+s[r+1:]   #字符串为不可变序列,需要通过切片重组,消除s[i:r+1]部分子串         i=i-1     #消除后返回到前一个字符位置,判断是否与后续字符相同     else:         i=i+1 print("消除后,字符串为:",s)  

答案解析

评分标准:

(1)m(或等效答案);(2分)

(2)s[r]==s[r+1] (或等效答案);(2分)

(3)i<r (或等效答案);(2分)

(4)s[r+1:] (或等效答案);(2分)

(5)i=i-1 或i-=1 (或等效答案)。 (2分)

上一题 下一题