鱼C论坛

 找回密码
 立即注册
查看: 3941|回复: 8

[已解决]代码看不懂,注释一下

[复制链接]
发表于 2022-11-2 11:11:24 | 显示全部楼层 |阅读模式
3鱼币
https://fishc.com.cn/template/default/style/t2/bgimg.jpgs = input("请输入待解压字符串:")

s += ' '    # 小技巧:末尾添加一个空格
ch = s[0]
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}")
最佳答案
2022-11-2 11:11:25
  1. '''
  2. 解压规则:
  3. 如果一个数字后面跟一个字符,这里假设这个数字 n, 这个字符为 c
  4. 那么c就出现了n次
  5. 比如:
  6. 按照该解压规则解压字符串:
  7. -6
  8. 最终的结果会是:
  9. ------
  10. 可以重复出现多次该结构:
  11. -8/4[3
  12. 结果会是:
  13. --------////[[[
  14. 但是如果只出现了一个数字 n,那么只会出现 n - 1 次的 n 的第一位数,比如:
  15. 5
  16. 结果会是:
  17. 5555
  18. 再比如:
  19. 6-3
  20. 结果会是
  21. 66666---
  22. 或者:
  23. 13-1
  24. 结果会是:
  25. 111111111111-

  26. 只出现了一个字符c那么就只会出现一个字符c:
  27. -
  28. 结果会是:
  29. -
  30. 再比如:
  31. +=4
  32. 结果会是:
  33. +====
  34. '''

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

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

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

  53. print(f"解压后的字符串:{result}") #照常输出解压结果
复制代码

自己造出来了解压规则,求给最佳

最佳答案

查看完整内容

自己造出来了解压规则,求给最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-2 11:11:25 | 显示全部楼层    本楼为最佳答案   
  1. '''
  2. 解压规则:
  3. 如果一个数字后面跟一个字符,这里假设这个数字 n, 这个字符为 c
  4. 那么c就出现了n次
  5. 比如:
  6. 按照该解压规则解压字符串:
  7. -6
  8. 最终的结果会是:
  9. ------
  10. 可以重复出现多次该结构:
  11. -8/4[3
  12. 结果会是:
  13. --------////[[[
  14. 但是如果只出现了一个数字 n,那么只会出现 n - 1 次的 n 的第一位数,比如:
  15. 5
  16. 结果会是:
  17. 5555
  18. 再比如:
  19. 6-3
  20. 结果会是
  21. 66666---
  22. 或者:
  23. 13-1
  24. 结果会是:
  25. 111111111111-

  26. 只出现了一个字符c那么就只会出现一个字符c:
  27. -
  28. 结果会是:
  29. -
  30. 再比如:
  31. +=4
  32. 结果会是:
  33. +====
  34. '''

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

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

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

  53. print(f"解压后的字符串:{result}") #照常输出解压结果
复制代码

自己造出来了解压规则,求给最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-4 16:38:48 | 显示全部楼层
  1. s = input("请输入待解压字符串:") #输入

  2. s += ' '    # 小技巧:末尾添加一个空格
  3. ch = s[0]
  4. result = ''
  5. repeat = ''

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

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

  22. print(f"解压后的字符串:{result}") # 打印
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-11-5 09:04:41 | 显示全部楼层
全部注释
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-5 12:08:15 | 显示全部楼层
请说明一下解压的规则!
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-5 16:46:48 | 显示全部楼层
zhangjinxuan 发表于 2022-11-5 12:32
自己造出来了解压规则,求给最佳

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

你总结的单独的一个数会出现 n-1 次的 n 的第一位数这一条好像是 bug
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-5 16:53:28 | 显示全部楼层
tommyyu 发表于 2022-11-5 16:46
这个是小甲鱼课后作业里面的一道题,规则在作业里面

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

beep
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-6 18:35:07 | 显示全部楼层
楼主在吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-11-11 14:49:49 | 显示全部楼层
楼主在吗,都过去六天了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-25 19:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表