Correction python

Résolu/Fermé
Arcadi - Modifié le 14 sept. 2021 à 13:43
mamiemando Messages postés 33073 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 avril 2024 - 28 sept. 2023 à 16:43
Bonjour,

Je bloque sur un exercice pix. je dois corriger le code suivant pour qu'il fonctionne :

La seule problématique que j'ai identifié avec mon mini niveau c'est qu'il manque la commande print à la fin.

indice = "vbpewfdwaz"
lettres = "}_v^yk[~jo"
i = 0
tutu = ''
while i < len(indice):
    if ord(indice[i]) < 109:
       tutu=tutu+chr(ord(lettres[i])+10)
    else:
        tutu=tutu+chr(ord(lettres[i])-10)


Si quelqu'un pouvait m'aider ce serait sympa pour que je puisse comprendre.

Arcadi
A voir également:

2 réponses

mamiemando Messages postés 33073 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 avril 2024 7 748
Modifié le 14 sept. 2021 à 16:19
Bonjour,

Vu que
i
n'est pas incrémenté, la boucle
while
va se répéter à l'infini.

Ensuite, je te recommande d'écrire au pluriel tes itérables et au singulier tes itérateurs, e.g.

for element in elements:
  ...


Par ailleurs, utiliser des indices dans le cas présent n'est pas très python dans l'esprit. Contrairement au langage C, tu peux directement itérer sur les caractères d'une chaîne. Cela t'évitera, par la même occasion, d'oublier d'incrémenter
i
:-)

Si tu as besoin d'itérer sur deux itérables simultanément (c'est le cas ici, puisque tu veux avancer sur
indices
et
lettres
simultanément), tu peux utiliser les primitives fournies par
itertools
ou natives au python : en l'occurrence, celle qui est adaptée dans ton cas est
zip
.

Dans ton cas tu aurais pu écrire quelque chose du genre :

indices = "vbpewfdwaz"
lettres = "}_v^yk[~jo"

tutu = ""
for (indice, lettre) in zip(indices, lettres):
    if ord(indice) < 109:
        tutu = tutu + chr(ord(lettre) + 10)
    else:
        tutu = tutu + chr(ord(lettre) - 10)  


Le programme peut être écrit de manière encore plus concise en utilisant la fonction
str.join
:

indices = "vbpewfdwaz"
lettres = "}_v^yk[~jo"
tutu = "".join(
  chr(ord(lettre) + 10) if ord(indice) < 109 else
  chr(ord(lettre) - 10)
  for (indice, lettre) in zip(indices, lettres)
)


Bonne chance
1

Bonjour, j'ai exactement le même problème, j'ai donc copié la réponse mais elle ne fonctionne pas. j'ai essayé également print "tutu" , enlever les "S" à "lettres" etc etc mais absolument rien ne fonctionne ,sur 

repl.it quand je lis ma programmation j'obtiens python3 main.py

HELP !!

0
mamiemando Messages postés 33073 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 16 avril 2024 7 748 > Belinda
28 sept. 2023 à 16:43

Bonjour Belinda,

  • Le code ci-dessus marche, je viens de vérifier. Tu peux faire print(tutu) et voir que tut contient bien la chaîne de caractère "silhouette".
  • Si le problème persiste, merci d'ouvrir un nouveau fil de discussion, en reportant le code que tu as exécuté et en copiant collant le message d'erreur exact.
  • De manière générale, évite d'écrire dans un fil de discussion résolu. Au besoin, donne le lien vers la discussion à laquelle tu fais référence.

Bonne chance

2