小聂python 发表于 2022-11-2 11:11:24

代码看不懂,注释一下

https://fishc.com.cn/template/default/style/t2/bgimg.jpgs = input("请输入待解压字符串:")

s += ' '    # 小技巧:末尾添加一个空格
ch = s
result = ''
repeat = ''

for each in s:
    if each.isdecimal():
      repeat += each
      continue
    else:
      if repeat != '':
            for i in range(int(repeat)-1):
                result += ch
               
      result += each
      repeat = ''
      ch = each

result.rstrip() # 去掉末尾的空格

print(f"解压后的字符串:{result}")

zhangjinxuan 发表于 2022-11-2 11:11:25

'''
解压规则:
如果一个数字后面跟一个字符,这里假设这个数字 n, 这个字符为 c
那么c就出现了n次
比如:
按照该解压规则解压字符串:
-6
最终的结果会是:
------
可以重复出现多次该结构:
-8/4[3
结果会是:
--------////[[[
但是如果只出现了一个数字 n,那么只会出现 n - 1 次的 n 的第一位数,比如:
5
结果会是:
5555
再比如:
6-3
结果会是
66666---
或者:
13-1
结果会是:
111111111111-

只出现了一个字符c那么就只会出现一个字符c:
-
结果会是:
-
再比如:
+=4
结果会是:
+====
'''

s = input() #正常读入字符串
s += ' '    #加上一个空格,可以使遍历最后一个时,也能执行,解压操作
ch = s   #循环需要添加的字符
result = '' #最终解压后结果
repeat = '' #循环添加次数

for each in s: #遍历待解压的字符串
    if each.isdecimal(): #如果当前是一个数字
      repeat += each #加到次数中
      continue #遍历下一个字符,可以不用写
    else: #如果不是一个数字
      if repeat != '': #如果次数非空
            for i in range(int(repeat)-1): #循环 repeat - 1 次
                result += ch #最终结果末尾添加ch
               
      result += each #最终结果加一下该字符
      repeat = '' #循环次数清空
      ch = each #ch设置为当前的字符,是下一次出现数字时要循环的字符

result.rstrip() # 去掉末尾的空格

print(f"解压后的字符串:{result}") #照常输出解压结果

自己造出来了解压规则,求给最佳{:10_254:}

tommyyu 发表于 2022-11-4 16:38:48

s = input("请输入待解压字符串:") #输入

s += ' '    # 小技巧:末尾添加一个空格
ch = s
result = ''
repeat = ''

for each in s:
    if each.isdecimal(): # 如果当前字符串是一个数字
      repeat += each   # repeat 是重复的次数,此时将重复的次数加到 repeat 末尾
                         # 比如 repeat = '',此时读入了一个3,repeat 就会变成 '3'
                         # 如果 repeat = '10',此时又读入了一个 1,repeat 就会变成'103'
                         # 这种方法比用数字存储简便
      continue         # 直接进入下一轮循环,此句没有什么实际作用,可以删去
    else:
      if repeat != '':                  # 如果 repeat 的值是 '',则前面的字符串并不需要重复
            for i in range(int(repeat)-1):# 这个 for 循环可以改成 result += ch * (repeat-1)
                result += ch
               
      result += each                      # 读入当前的字符串
      repeat = ''                         # 重置 repeat
      ch = each                           # 重置当前的字符串

result.rstrip() # 去掉末尾的空格

print(f"解压后的字符串:{result}") # 打印

小聂python 发表于 2022-11-5 09:04:41

全部注释

zhangjinxuan 发表于 2022-11-5 12:08:15

请说明一下解压的规则!

tommyyu 发表于 2022-11-5 16:46:48

zhangjinxuan 发表于 2022-11-5 12:32
自己造出来了解压规则,求给最佳

这个是小甲鱼课后作业里面的一道题,规则在作业里面

你总结的单独的一个数会出现 n-1 次的 n 的第一位数这一条好像是 bug

zhangjinxuan 发表于 2022-11-5 16:53:28

tommyyu 发表于 2022-11-5 16:46
这个是小甲鱼课后作业里面的一道题,规则在作业里面

你总结的单独的一个数会出现 n-1 次的 n 的第一位 ...

beep

zhangjinxuan 发表于 2022-11-6 18:35:07

楼主在吗?

zhangjinxuan 发表于 2022-11-11 14:49:49

楼主在吗,都过去六天了{:10_266:}
页: [1]
查看完整版本: 代码看不懂,注释一下