In [1]:
def compte_caractere(chaine, caractere) :
    """ 
    chaine -- chaîne de caractères
    caractere -- un caractère 
    
    renvoie un entier égal au nombre 
    d'occurrences du caractère caractere dans la chaîne chaine.
    >>> compte_caractere("coucou", 'c')
    2
    >>> compte_caractere("abracadabra", 'e')
    0
    """
    
    compteur = 0
    for caract in chaine:
        if caract == caractere:
            compteur += 1
    return compteur
     
In [2]:
compte_caractere("coucou", 'c')
Out[2]:
2
In [3]:
compte_caractere("abracadabra", 'e')
Out[3]:
0
In [4]:
def ligne_suivante(chaine) :
    """ 
    chaine -- chaine de caractères (constituée de chiffres)
    
    renvoie la chaîne de caractères construite suivant la logique de 
    l'exercice précédent.
    >>> ligne_suivante('0')
    '10'
    >>> ligne_suivante('43325455222')
    '35242342'
    """
    ligne_suiv = ''
    for caractere in '9876543210' :
        if caractere in chaine:
            ligne_suiv += str(compte_caractere(chaine, caractere)) + caractere
    return ligne_suiv
In [5]:
ligne_suivante('0')
Out[5]:
'10'
In [6]:
ligne_suivante('43325455222')
Out[6]:
'35242342'
In [7]:
def triangleRobinson(chaine, nombre_lignes) :
    """ 
    chaine -- chaine de caractères
    nombre_lignes -- entier > 0
    
    renvoie une chaîne de caractères, 
    constituée de nombre_lignes lignes,
    chaque ligne étant construite à partir de la précédente
    par le principe de Robinson précédent.    
    """
    triangle = ''
    ligne = chaine
    for i in range(nombre_lignes) :
        triangle += ligne + '\n'
        ligne = ligne_suivante(ligne)
    return triangle
In [8]:
print(triangleRobinson('0', 8))
0
10
1110
3110
132110
13123110
23124110
1413223110

In [9]:
def arret(chaine):
    """
    chaine -- chaine de caractères
    
    renvoie une chaîne de caractères constituée des lignes
    de la suite de Robinson partant de chaîne.
    Cette chaîne s'arrête dès que deux lignes sont identiques
    ou dès que le nombre de lignes est égal à 20.
    """
    ligne = chaine
    triangle = ligne + '\n'
    nb_lignes = 1
    while nb_lignes <= 20:
        ligne_suiv = ligne_suivante(ligne)
        triangle += ligne_suiv + '\n'
        nb_lignes += 1
        if ligne_suiv == ligne:
            break # permet d'interrompre la boucle
        else:
            ligne = ligne_suiv
    return triangle
In [10]:
print(arret('0'))
0
10
1110
3110
132110
13123110
23124110
1413223110
1423224110
2413323110
1433223110
1433223110

In [11]:
print(arret('1'))
1
11
21
1211
1231
131221
132231
232221
134211
14131231
14231241
24132231
14233221
14233221

In [12]:
print(arret('42'))
42
1412
141221
142231
14132221
14133231
14331231
14331231

In [13]:
print(arret('666'))
666
36
1613
161321
16131231
16231241
1614132231
1614232241
1624133231
1614332231
1614332231

In [ ]: