In [1]:
def nbCaracteresIdentiques(chaine, indice):
    """
    chaine -- chaine de caractères, non vide
    indice -- indice d'un élément de la chaîne
    
    renvoie le nombre de caractères successifs égaux à chaine[indice] en partant de chaine[indice].
    >>> nbCaracteresIdentiques('b322', 0)
    1
    >>> nbCaracteresIdentiques('bb22', 0)
    2
    >>> nbCaracteresIdentiques('bb555', 2)
    3
    >>> nbCaracteresIdentiques('bb555455', 2)
    3
    """
    assert len(chaine) > 0, "Attention, la chaîne doit être non vide."
    assert 0 <= indice < len(chaine), "Attention, indice doit être compris entre 0 et longueur(chaine)-1."
    caractereInitial = chaine[indice]
    compteur = 1
    i = indice + 1
    while i < len(chaine) and chaine[i] == caractereInitial:
        compteur += 1 
        i += 1
    return compteur
    
In [2]:
nbCaracteresIdentiques('bb555455', 2)
Out[2]:
3
In [3]:
nbCaracteresIdentiques('b2342',0)
Out[3]:
1
In [4]:
nbCaracteresIdentiques('',0)
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-4-feab905db3c0> in <module>
----> 1 nbCaracteresIdentiques('',0)

<ipython-input-1-ac165c15dd82> in nbCaracteresIdentiques(chaine, indice)
     14     3
     15     """
---> 16     assert len(chaine) > 0, "Attention, la chaîne doit être non vide."
     17     assert 0 <= indice < len(chaine), "Attention, indice doit être compris entre 0 et longueur(chaine)-1."
     18     caractereInitial = chaine[indice]

AssertionError: Attention, la chaîne doit être non vide.
In [5]:
nbCaracteresIdentiques('aabb',4)
---------------------------------------------------------------------------
AssertionError                            Traceback (most recent call last)
<ipython-input-5-951f7629b55b> in <module>
----> 1 nbCaracteresIdentiques('aabb',4)

<ipython-input-1-ac165c15dd82> in nbCaracteresIdentiques(chaine, indice)
     15     """
     16     assert len(chaine) > 0, "Attention, la chaîne doit être non vide."
---> 17     assert 0 <= indice < len(chaine), "Attention, indice doit être compris entre 0 et longueur(chaine)-1."
     18     caractereInitial = chaine[indice]
     19     compteur = 1

AssertionError: Attention, indice doit être compris entre 0 et longueur(chaine)-1.
In [6]:
def ligneSuivanteConway(chaine):
    """
    chaine -- chaine de caractères-chiffres, non vide
    
    renvoie la chaîne descriptive de chaine (suivant le principe exposé ci-dessus).
    >>> ligneSuivanteConway('1')
    '11'
    >>> ligneSuivanteConway('11')
    '21'
    >>> ligneSuivanteConway('21')
    '1211'
    >>> ligneSuivanteConway('1211')
    '111221'
    """
    ligneSuivante = ''
    caractere = chaine[0]
    indice = 0
    repetition = nbCaracteresIdentiques(chaine, indice)
    
    while indice < len(chaine):
        # ligneSuivante = f"{ligneSuivante}{repetition}{caractere}" 
        # ou
        ligneSuivante = ligneSuivante + str(repetition) + caractere
        # ou
        # ligneSuivante = "{}{}{}".format(ligneSuivante, repetition, caractere)
        indice = indice + repetition
        if indice < len(chaine): 
            caractere = chaine[indice]
            repetition = nbCaracteresIdentiques(chaine, indice)
    
    return ligneSuivante
In [7]:
ligneSuivanteConway('1')
Out[7]:
'11'
In [8]:
ligneSuivanteConway('11')
Out[8]:
'21'
In [9]:
ligneSuivanteConway('21')
Out[9]:
'1211'
In [10]:
ligneSuivanteConway('1211')
Out[10]:
'111221'
In [15]:
def conway(n):
    """
    n -- entier naturel > 0
    
    renvoie la chaîne des n premières lignes de la suite de Conway
    """
    chaine = '1\n'
    ligne = '1'
    for i in range(2, n+1):
        ligne = ligneSuivanteConway(ligne)
        chaine = chaine + ligne + '\n'
    return chaine
In [16]:
print(conway(10))
1
11
21
1211
111221
312211
13112221
1113213211
31131211131221
13211311123113112211

In [ ]:
 
In [ ]:
 
In [ ]: