此算法的想法是消除两个相同的连续字母,因此我决定以递归的方式进行操作:如果单词(chaine)具有两个连续字母,则我称为doublee的布尔变量必须为False,如果是这种情况,我们将使用新单词(原始单词,但没有连续的字母对)重做算法。如果doublee为True,则算法应停止并返回已编辑的单词。问题是当参数为('baab')时我有一个无限循环。实际上,在第一次尝试中,“ aa”被删除了,所以我们现在有了“ bb”,但是idk为什么它不只是重做我们以前的工作。这是代码:
def musique(chaine) :
L = list(chaine)
for i in range(len(chaine)-1) :
if L[i] == L[i+1] :
L[i], L[i+1] = 0, 0
chaine = ''
for i in L :
if i != 0 :
chaine += i
doublee = True
for i in range(len(chaine)-1) :
if chaine[i] == chaine[i+1] :
doublee = False
while doublee == False :
musique(chaine)
return chaine
while
循环。只需让每个递归级别检查是否有双打即可。如果存在,它将递归调用自身以将其删除,否则它将返回。def musique(chaine) :
L = list(chaine)
for i in range(len(chaine)-1) :
if L[i] == L[i+1] :
L[i], L[i+1] = 0, 0
chaine = ''
for i in L :
if i != 0 :
chaine += i
for i in range(len(chaine)-1) :
if chaine[i] == chaine[i+1] :
return musique(chain)
return chaine
数字2:再次调用musique时,所有参数都在同一范围内,因此您可以有效地重置程序。 L将被重置,因此将进行链接和双击,您的程序将永远做同样的事情。