当输入为'baab'时,为什么在这里有一个无限循环? (Python)

问题描述 投票:0回答:2

此算法的想法是消除两个相同的连续字母,因此我决定以递归的方式进行操作:如果单词(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
python boolean infinite-loop
2个回答
0
投票
您不需要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


0
投票
数字1:冒号和语句结尾之间不应有空格。

数字2:再次调用musique时,所有参数都在同一范围内,因此您可以有效地重置程序。 L将被重置,因此将进行链接和双击,您的程序将永远做同样的事情。

© www.soinside.com 2019 - 2024. All rights reserved.