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分)
上一题
下一题