当输入为“ baab”时,为什么在这里有无限循环? (蟒蛇)

时间:2020-02-21 01:10:02

标签: python boolean infinite-loop

此算法的想法是消除两个相同的连续字母,因此我决定以递归的方式进行:如果单词(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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

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