Creer pros python leet speak sans replace et dictio

Bonjour a tous je n'ai pas bien compris cette exercice, voici l'intitulé

Le principe est d’utiliser des caractères graphiquement voisins des caractères usuels. On écrit « 5 » au lieu de « S », « 7
» au lieu de « T », « 4 » au lieu de « A », « 3 » au lieu de « E », « 1 » au lieu de « L » et « 0 » au lieu de « O ».
Ainsi le mot "nuage", s’écrira "nu4g3". Les mots "cette lettre" s’écriront "c3773 1377r3"
Ce système d’écriture se retrouve chez certains passionnés d’informatique, utilisateurs de jeux en réseau. Il est présent en
particulier sur les forums de discussion en ligne.
Vous devez créer un programme qui permet de traduire une phrase quelconque du français vers le langage Leet.
Attention, il existe plusieurs versions du langage leet, je vous demande d’utiliser la version simple que je vous présente
ici, dans laquelle on ne modifie que les caractères S, T, A, E, L et O.
L’utilisation de la méthode replace est interdite ici. L’utilisation des listes ou des dictionnaires est aussi interdite. Je vous
demande de créer une nouvelle chaine de caractère, vide au départ, dans laquelle vous ajouterez les caractères au fur et à
mesure de la traduction.


Windows / Chrome 107.0.0.0

11 réponses

  1. Modérateur

    Bonjour,

    Pas de liste, de dictionnaire et de replace. Donc on va utiliser des chaines de caractères, différentes boucles et la position des caractères dans la chaine.

    def leet(chaine):
       orig="STAELO"
       code="574310"
       chcod=""
       for i in range
          for j in range
    
           ...
    
       return chcod
    
    print(leet("nuage"))
    print(leet("cette lettre"))
                 
    

    1. re bonjour merci de ta pris de temps mais j'ai une question, quand je lance le programme cela me met

      File "C:\Users\Cooler Master\Desktop\tp nsi\Test leetspeak.py", line 5

      for i in range

      ^

      SyntaxError: invalid syntax

      et je voudrais savoir comment régler.

    2. Modérateur
      @samoskvamos

      c'était un début de code, il faut que tu complètes

    3. Modérateur
      @jee pee

      une boucle sur la longueur de chaine, on traite le caractère chaine[i] une boucle sur la longueur orig on compare chaine[i] à orig[j]

  2. Je suppose qu'on n'a pas droit aux tuple ni à index pour mal faire ...
    Indice: la boucle intérieure sert à trouver la position du caractère à enccoder.
    Sais-tu comment trouver rapidement si un caractère est dans une chaîne?

    1. Bonsoir Pierrot, j'ai lis ta réponse et nan je sais pas comment faire.

      j'ai donc essayer un autre code que j'ai fait; peut tu me dire ou est-ce que j'ai fait des erreur, sur le code on me met cela

      File "C:\Users\Cooler Master\Desktop\tp nsi\test leetspeak2.py", line 28

      return Trad

      ^

      IndentationError: unindent does not match any outer indentation level

      le code est en bas

      trad=''
      
      A=input('Taper Votre Phrase Pour La Traduire En Language Leet ')
      
      
      for k in A :
          if k=='S' or k=='s':
              Trad+='S'
      
          elif k=='T' or k=='t':
              Trad+='7'
      
          elif k=='A' or k=='a':
              Trad+='4'
      
          elif k=='E' or k=='e':
              Trad+='3'
      
          elif k=='L' or k=="l":
              Trad+='1'
      
          elif k=='O' or k=='o':
              Trad+='0'
      
          else:
              Trad+=k
      
         return Trad
      
    2. Modérateur
      @samoskvamos

      oui c'est aussi une possibilité. Mais on attend d'un programmeur une solution un peu plus sophistiquée ;-)

      Formellement ta solution comporte des erreurs :

      • trad='', non Trad=''
      • Trad+='S' non Trad+='5'
      •  return s'utilise quand on a une fonction, initialisée par def fonction().

      Enfin on peut simplifier les tests :

      if k.upper()=='S':
  3. Dans ton second code, je ne vois pas la ligne def ...
    Où est la fonction?
    Si tu n'as pas de fonction, tu n'as pas besoin de return.
    Sinon, l'erreur veut dire que le return ne commence pas dans la bonne colonne.

    Pour le "S", tu ne convertis pas en "5"

    Tu as utilisé print au début ...

    1. du coup re bonsoir il manque un dernière chose, quand je le lance cela me met 'Taper Votre Phrase Pour La Traduire En Language Leet'

      trad=''
      
      A=input('Taper Votre Phrase Pour La Traduire En Language Leet')
      
      
      for k in A :
          if k=='S' or k=='s':
              trad+='5'
      
          elif k=='T' or k=='t':
              trad+='7'
      
          elif k=='A' or k=='a':
              trad+='4'
      
          elif k=='E' or k=='e':
              trad+='3'
      
          elif k=='L' or k=='l':
              trad+='1'
      
          elif k=='O' or k=='o':
              trad+='0'
      
          else:
              trad+=k
      
      print('A')
      1. Modérateur

        print('A') ??? print(trad)


        1. bon la je suis dans une incompréhension totale 

          Traceback (most recent call last):

          File "<console>", line 1, in <module>

          NameError: name 'iooi' is not defined

          trad=''
          
          A=input('Taper Votre Phrase Pour La Traduire En Language Leet')
          
          
          for k in A :
              if k=='S' or k=='s':
                  trad+='5'
          
              elif k=='T' or k=='t':
                  trad+='7'
          
              elif k=='A' or k=='a':
                  trad+='4'
          
              elif k=='E' or k=='e':
                  trad+='3'
          
              elif k=='L' or k=='l':
                  trad+='1'
          
              elif k=='O' or k=='o':
                  trad+='0'
          
              else:
                  trad+=k
          
          print('trad')
        2. Modérateur
          @samoskvamos

          print(trad) qui est une variable, pas print('trad')

        3. @jee pee

          du coup j'ai ressayer avec print(trad) 

          Python 3.8.13 (default, Mar 28 2022, 06:59:08) on Windows (64 bits).

          This is the Pyzo interpreter with integrated event loop for ASYNCIO.

          Type 'help' for help, type '?' for a list of *magic* commands.

          Running script: "C:\Users\Cooler Master\Desktop\tp nsi\test leetspeak2.py"

          Taper Votre Phrase Pour La Traduire En Language Leet

          >>> nuage

          Traceback (most recent call last):

          File "<console>", line 1, in <module>

          NameError: name 'nuage' is not defined

          >>>

        4. Modérateur
          @samoskvamos

          je ne sais pas j'utilise python avec l'environnement IDLE et le code fonctionne

          on dirait que c'est comme si tu tapais nuage dans la console

        5. @jee pee

          oui j'ai belle et bien tapais nuage, j'ai essayer avec notpad+ et visualstudio mais visiblement ca ne marche pas

      2. Es-tu certain que c'est le code que tu as exécuté que tu nous montres ici?
        Il y a une difféerence entre:
        print('trad')
        et
        print(trad)
        Afficher une chaîne, ce n'est pas comme afficher une variable.

        1. Modérateur

          Utilise une fonction

          def leet(A):
              trad=''
              for k in A :
                  if k=='S' or k=='s':
                      trad+='5'
                  elif k=='T' or k=='t':
                      trad+='7'
                  elif k=='A' or k=='a':
                      trad+='4'
                  elif k=='E' or k=='e':
                      trad+='3'
                  elif k=='L' or k=='l':
                      trad+='1'
                  elif k=='O' or k=='o':
                      trad+='0'
                  else:
                      trad+=k
              return trad
          print("nuage =",leet("nuage"))
          print("cette lettre =",leet("cette lettre"))

          1. Bonjour,

            As-tu le droit d'utiliser les listes ?

            Ça pourrait donner ceci:

            substitutions = [['a','4'],['e','3'],['l','1'],['o','0'],['t','7']]
            for s in substitutions:
                c1,c2 = s[0], s[1]
                trad = trad.replace(c1,c2)
            1. Modérateur

              Tu as tout faux ;-)

              L’utilisation de la méthode replace est interdite ici. L’utilisation des listes ou des dictionnaires est aussi interdite.

          2. Salut jee_pee,

            Ah, exact !

            je me disais aussi ...

            ça aurait été trop simple :-)

            1. Du coup bonjour à tous j'essayer de coder le programme et je crois avoir réussi et il est un peu simplet mais marche 

              def leet():
                  Trad=''
                  A=input('Taper votre pharase pour la mettre en leet speak')
                  for k in A :
                      if k =='S':
                          Trad+='5'
                      elif k =='T':
                          Trad+='7'
                      elif k =='A':
                          Trad+='4'
                      elif k =='E':
                          Trad+='3'
                      elif k =='L':
                          Trad+='1'
                      elif k =='O':
                          Trad+='0'
                      else:
                          Trad+=k
                  return Trad
              print(leet())
              
              1. Modérateur

                mais ne fonctionne pas si tu saisis le texte en minuscule

            2. Voici un code simple (non coloré, désolé)
              Je n'ai même pas utilisé les méthodes lower ou upper
              -
              def leet():
                  text = input("Entrez le texte à modifier ")
                  lettres = "SsTtAaLlOo"
                  codes = "5577441100"
                  trad = ""
                  for c in text:
                      for i in range(len(codes)):
                          if c == lettres[i]:
                              c = codes[i]
                      trad += c
                  return trad
              print(leet())