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
nbCaracteresIdentiques('bb555455', 2)
nbCaracteresIdentiques('b2342',0)
nbCaracteresIdentiques('',0)
nbCaracteresIdentiques('aabb',4)
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
ligneSuivanteConway('1')
ligneSuivanteConway('11')
ligneSuivanteConway('21')
ligneSuivanteConway('1211')
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
print(conway(10))