<p>虽然Rob的答案可能是一个更好的方法,但你使用的算法基本上是正确的。另外,如果你不熟悉正则表达式,一开始它们可能有点让人不知所措。话虽如此,它们绝对值得学习,特别是如果你要做很多这样的任务。你知道吗</p>
<p>不过,既然你显然花了一点功夫来编写上面的算法,我觉得它值得结束-tbh它只是需要一点点调整。下面是您的代码的“固定”版本。你知道吗</p>
<p>如果您输入<code>(BA)4B5A3</code>之类的内容,它运行良好,但是您会遇到<code>(BA)4B5A</code>之类的问题。原因是,当你到达最后一个A时,你原来的算法试图检查下一个字符是否是数字。但是没有下一个字符,所以出现了一个错误,所以我添加了一个附加的if语句来检查这种可能性(如下面的注释所示)。你知道吗</p>
<p>另外,如果你在评估某件事是真是假,你应该说<code>if condition is True:</code>,甚至只是<code>if condition:</code>,而不是<code>if condition == True:</code>。所以我删除了所有的<code>== True</code></p>
<pre><code>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():
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 it<len(seq): #To check seq[i] isn't the final character
if seq[it].isdigit(): #This is the line that was causing the error!!
num = ""
while it < len(seq) and isdigit(seq[it]):
num += seq[it]
it += 1
x = 0
while x < int(num):
new_seq += char
x += 1
i = it
else:
new_seq += char
i += 1
else: #incase seq[i] was the final character
new_seq += char
i += 1
return new_seq
print(extensao("(BA)4B5A"))
</code></pre>