我有一个像这样的字符串a和B:“(BA)4B5A”,我希望输出是babba。但是我的代码只有在A后面有数字1时才有效,比如“(BA)4B5A1”。对于后面没有数字的字母,我只想重复一次。我想让它适用于A和B的任何字符串
def extensao(seq):
new_seq = ""
i = 0;
while i < len(seq):
if seq[i] == '(':
it = i + 1
exp = ""
while seq[it]!= ')':
exp += seq[it]
it+=1
it+=1
num=""
while it < len(seq) and seq[it].isdigit() == True:
num += seq[it]
it+=1
x = 0
while x < int(num):
new_seq += exp
x+=1
i = it
else:
char = seq[i]
it=i+1
if(seq[it].isdigit()==True):
num=""
while it < len(seq) and seq[it].isdigit() == True:
num += seq[it]
it+=1
x = 0
while x < int(num):
new_seq += char
x+=1
i = it
else:
new_seq+=char
i+=1
return new_seq
def main():
seq = input("Escreva uma sequencia:")
final_seq = extensao(seq)
print(final_seq)
main()
虽然Rob的答案可能是一个更好的方法,但你使用的算法基本上是正确的。另外,如果你不熟悉正则表达式,一开始它们可能有点让人不知所措。话虽如此,它们绝对值得学习,特别是如果你要做很多这样的任务。你知道吗
不过,既然你显然花了一点功夫来编写上面的算法,我觉得它值得结束-tbh它只是需要一点点调整。下面是您的代码的“固定”版本。你知道吗
如果您输入
(BA)4B5A3
之类的内容,它运行良好,但是您会遇到(BA)4B5A
之类的问题。原因是,当你到达最后一个A时,你原来的算法试图检查下一个字符是否是数字。但是没有下一个字符,所以出现了一个错误,所以我添加了一个附加的if语句来检查这种可能性(如下面的注释所示)。你知道吗另外,如果你在评估某件事是真是假,你应该说
if condition is True:
,甚至只是if condition:
,而不是if condition == True:
。所以我删除了所有的== True
^{} third-party library 有一个解决run length encoding/compression问题的工具。参见the docs中的示例:
这个工具使用起来很简单。理想情况下,您应该传入一个元组列表的输入,每个元组包含一个字符串和一个乘法整数。你知道吗
代码
在这里,我们将实现一个
parse
helper函数,将您的输入转换为适当的格式。你知道吗演示
细节
parse
函数从输入iterable中删除括号。然后用itertools.groupby
构建两个生成器:一个用于字符串组,另一个用于乘法器组。这些组被压缩在一起。itertools.zip_longest
接受fillvalue
参数,因此如果输入iterable以字符串结尾(如在示例输入中),则默认乘数为1
。你知道吗run_length.decode
方法在这里实现:注意:在命令行提示符中使用
> pip install more_itertools
来安装这个库。你知道吗其他参考资料
itertools.groupby
工作原理的post您可以使用
re.sub()
函数,传递一个callable作为第二个参数:或者,同等地,也许更容易理解
相关问题 更多 >
编程相关推荐