鱼C论坛

 找回密码
 立即注册
查看: 1781|回复: 4

计算字符串

[复制链接]
发表于 2021-9-15 20:04:40 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 JoeJoy 于 2021-9-15 20:05 编辑

问题: 输入一段字符串,形式为 数字*[encoded_string]。例如:2*[a3*[c]], 得出结果acccaccc.
注:测试用例很多,格式几乎都是 数字*[encoded_string].
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-9-15 22:11:00 | 显示全部楼层
原题发出来,你贴的题目格式乱。
另外你的代码发出来。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-16 17:59:35 | 显示全部楼层
suchocolate 发表于 2021-9-15 22:11
原题发出来,你贴的题目格式乱。
另外你的代码发出来。

原题已经过去了ㅠㅠ,我这算是记忆下来了,这道题我理解的就是2*[a3*[c]], 经过计算得到acccaccc。 这个例子就是原题的例子,整个字符串都一样。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-17 09:08:04 | 显示全部楼层
本帖最后由 qq1151985918 于 2021-9-17 09:16 编辑

参考代码:
  1. import re


  2. def get_str(s):
  3.     # 以下非案例 "2*[a3*[c]]" 必须条件
  4.     # 因题目不清,是为防其他条件因素自己想象添加
  5.     # --------------------------------------
  6.     s = s.replace(" ", "").replace("]", "]+")
  7.     while "++" in s or "]+]" in s or "+" == s[-1]:
  8.         s = s.replace("++", "+").replace("]+]", "]]")
  9.         s = s[:-1] if "+" == s[-1] else s
  10.     # --------------------------------------
  11.    
  12.     r1 = re.findall(r"[a-zA-Z]+\d+\*{1}", s)
  13.     r2 = re.findall(r"([a-zA-Z]+)\d+\*{1}", s)
  14.    
  15.     r3 = re.findall(r"\[[a-zA-Z]+\]", s)
  16.     r4 = re.findall(r"\[([a-zA-Z]+)\]", s)
  17.    
  18.     for x, y in zip(r1, r2):
  19.         z = x.replace(y, "'" + y + "'+")
  20.         s = s.replace(x, z)
  21.         
  22.     for x, y in zip(r3, r4):
  23.         z = x.replace(y, "'" + y + "'")
  24.         s = s.replace(x, z)
  25.         
  26.     s = s.replace("[","(").replace("]",")")
  27.     return eval(s)


  28. if __name__ == "__main__":
  29.     string = "2*[a3*[c]]"
  30.     print(get_str(string))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-18 11:24:07 | 显示全部楼层
  1. import re
  2. s = '2*[a3*[c]]'
  3. while '[' in s:
  4.     d =re.findall('\d+\*\[[a-z]+\]', s)
  5.     for each in d:
  6.        n1 = re.findall('\d+', each)[0]
  7.        s1 = re.findall('[a-z]+', each)[0]
  8.        s = s.replace(each, int(n1)*s1)
  9. print(s)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 11:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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