Correction python

Résolu
Arcadi -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
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

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    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
    1. Belinda
       

      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
      1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944 > Belinda
         

        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
  2. Arcadi
     
    Bonjour Mamiemando,

    Merci beaucoup pour votre réponse. Je vais tout étudier non pas pour seulement faire mais surtout comprendre. Votre réponse complète m'aide beaucoup.

    concernant le règles étique de rédaction, cette partie est vraiment celle qui m'a été fournie.

    Bien à vous,

    Arcadi
    0
    1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       
      Merci pour ton retour. Par rapport aux conseils de programmation, tu verras avec le temps :-) Tu peux aussi regarder la norme PEP-8 si tu veux te perfectionner.

      Bonne continuation
      0