python - 如何编写压缩的字母数字程序
问题描述
我需要编写一个将字母数字字符串作为输入的程序。该字符串将仅包含小写字符和从 0 到 9 的数字。
我必须将字母压缩为字母乘以连续重复的次数,例如:
aaa
至a3
bbbb
至b4
c
至c1
如果输入字符串中有任何整数,那么我必须添加整数。
返回压缩字符串乘以相加整数。
def std(string):
res =" "
con =1
res += string[0]
for i in range((len(string)-1)):
if (string[i] == string[i+1]):
con+=1
else:
if (con>1):
res += str(con)
res+=string[i+1]
con =1
if (con>1):
res+= str(con)
return res
print(std('aabbb3cccc2d'))
我写了这个程序并得到了输出a2b
。
预期输出为a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d1a2b3c4d1
。谁能告诉我我哪里出错了?
解决方案
我相信您在该功能中存在多个问题:
您返回循环内部并离开函数而不遍历整个字符串
你只检查下一个字母是否相等,不要继续寻找
如果你循环
len(string) - 1
你永远不会检查最后一个字符您不检查您所在的字符是否为数字,因此您无法跟踪您的字符串最终将被相乘多少次
由于无法纠正您的问题,因此我遇到了此解决方案,希望对您有所帮助。
def std(string):
multiplier = 0
final_string = ""
jumper = 0
for i in range(len(string)):
if jumper:
jumper -= 1
continue
if string[i].isdigit():
multiplier += int(string[i])
continue
charMultiplier = 0
for j in range(i + 1, len(string)):
if(string[i] == string[j]):
charMultiplier += 1
else:
break
final_string += string[i]
final_string += str(charMultiplier + 1)
jumper += charMultiplier
final_string = final_string * multiplier
return final_string
推荐阅读
- c++ - 是否可以在文本文件中找到最长单词的长度,并在同一个文本文件中读取,只需 1 个 while 循环?
- flutter - VideoPlayerPlugin.java 使用或覆盖已弃用的 API
- python - 如何基于月份python保存数据
- sitecore - 搜索框输入中的 X 不清除文本
- ubuntu - Kubernetes 上的 Consul:Consul pod 正在运行但尚未准备好
- android - Google 不将数字资产链接识别为有效的域验证方法
- apache-nifi - NiFi:将文件内容存储在内存或全局变量中
- java - 将 C# 中由泛型类扩展的非泛型类转换为 Java
- c# - 构建并发布到 IIS 后,在发布命令中使用调试时,我总是看到生产构建
- vue.js - Vuex / Vue-Router - 将 auth:user id 从 vuex 存储传递到 vue-router 路由器链接参数