Faire une boucle sur python qui relance le programme

Résolu
mery-mery Messages postés 15 Statut Membre -  
mery-mery Messages postés 15 Statut Membre -
Bonjour a tous,je voulais vous demandez une petite questions en ce qui concerne un problème qui me tracasse . Je suis entrain de faire un tout mini programme, et j'aimerai bien que le programme demande a l'utilisateur si il veut quitter ou bien en continuer , donc si il veut quitter le programme s'éteint ,mais si l'utilisateur dis oui je veux en convertir un autre ben le programme doit se ré-exécuter sans devoir éteindre puis ré-allumer le programme...Je sais pas si j'ai étais très clair, enfin si quelqu'un a une idée qu'il me la fasse partager.
Merci beaucoup!

6 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    tu pourrais ajouter ceci en bas de ton module:
    continuer = True
    while continuer:
        main()
        d=input("stop (s) ou encore (c)?")
        if d != "c":
            continuer = False

    Si tu souhaites ne pas changer ton module et faire la boucle dans un autre module, c'est également possible, ainsi:
    import modulemain
    continuer = True
    while continuer:
        modulemain.main()
        d=input("stop (s) ou encore (c)?")
        if d != "c":
            continuer = False
    1
    1. mery-mery Messages postés 15 Statut Membre
       
      merci ça a marcher ,le problème est résolue .
      0
  2. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Bonjour,

    Peux-tu afficher ton code ici, que l'on voie au moins ce que tu as déjà fait

    Et l'afficher avec les balises de code:

    https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
    0
    1. mery-mery Messages postés 15 Statut Membre
       
      #code pour cryptage de cesar

          
      
      
      banner = '''
       ██████╗███████╗███████╗ █████╗ ██████╗    ██████╗ ██╗   ██╗
      ██╔════╝██╔════╝██╔════╝██╔══██╗██╔══██╗   ██╔══██╗╚██╗ ██╔╝
      ██║     █████╗  ███████╗███████║██████╔╝   ██████╔╝ ╚████╔╝ 
      ██║     ██╔══╝  ╚════██║██╔══██║██╔══██╗   ██╔═══╝   ╚██╔╝  
      ╚██████╗███████╗███████║██║  ██║██║  ██║██╗██║        ██║   
       ╚═════╝╚══════╝╚══════╝╚═╝  ╚═╝╚═╝  ╚═╝╚═╝╚═╝        ╚═╝                                 
      '''
      
      print(banner)
      
      def recebeModo():
          while True:
              option = input("veux tu cripter ou descripter? ")
              option = option.lower()
              if option == 'c' or option == 'cripter' or option == 'descripter' or option == 'd':
                  return option
              print("valeur invalide . soit ('cripter', 'c') ou bien ('descripter', 'd')")
      
      
      def recebeChave():
          while True:
              chave = int(input("valeur de decalage: "))
              if 1 <= chave <= 26:
                  break
              print("valeur invalide ")
      
          return chave
      
      def geraMsgTraduzida(modo, mensagem, chave):
          cripto = ''
      
          if modo == 'c' or modo == 'cripter':
              for i in mensagem:
                  if 'A' <= i <= 'Z':
                      if ord(i) + chave > ord('Z'):
                          cripto += chr((ord('A') + chave - (ord('Z')+1 - ord(i))))
                      else:
                          cripto += chr(ord(i) + chave)
      
      
                  elif 'a' <= i <= 'z':
                      if ord(i) + chave > ord('z'):
                          cripto += chr((ord('a') + chave - (ord('z')+1 - ord(i))))
                      else:
                          cripto += chr(ord(i) + chave)
                  else:
                      cripto += i
      
          elif modo == 'd' or modo == 'descripter':
              for i in mensagem:
                  if 'A' <= i <= 'Z':
                      if ord(i) - chave < ord('A'):
                          cripto += chr(ord('Z') - (chave - (ord(i)+1 - ord('A'))))
      
                      else:
                          cripto += chr(ord(i) - chave)
      
      
                  elif 'a' <= i <= 'z':
                      if ord(i) - chave < ord('a'):
                          cripto += chr(ord('z') - (chave - (ord(i)+1 - ord('a'))))
                      else:
                          cripto += chr(ord(i) - chave)
                  else:
                      cripto += i 
      
          return cripto
      
      def main():
          modo = recebeModo()
          chave = recebeChave()
          mensagem = input("donner le mot ou le text a traiter: ")
          print(geraMsgTraduzida(modo, mensagem, chave))
      
      main()
      <code python>
      </code>
      0
  3. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    OK,

    Moi, je mettrais le contenu de Main() dans une boucle While infinie, et en plus j'afficherai un menu du genre:

    1_ Crypter
    2_ Quitter
    Votre choix :

    après la ligne 73

    si choix == 1, je continue sur les lignes 74 à 77, et ensuite, avec la boucle, le menu s'affiche à nouveau
    si choix == 2, je sors de la boucle donc la fonction se termine et le programme s'arrête

    Ceci dit, il faut aussi que tu soignes ton orthographe :-) :-)

    veux tu cripter ou descripter,? -> veux tu crypter ou décrypter ?

    Sinon, si tu veux faire un menu qui contrôle si on a bien entré un choix valide, et qui repose la question tant que c'est incorrect, tu peux faire comme ça (et supprimer la ligne 74)
    menu = '''
    1 Crypter
    2 Décrypter
    3 Quitter
    > '''
    choix = ''
    
    while(not choix in [1,2,3]):
        print('\n' + '''Choisissez une option'''.center(50,'*'))
        choix = int(input(menu))
    
    0
    1. mery-mery Messages postés 15 Statut Membre
       
      est-ce possible d’expliquer plus en détail , car la j’arrive pas bien a comprendre .
      0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    En fait, je supprimerais la fonction recebeModo(), et je ferais la fonction Main() comme ceci:
    def main():
    
        menu = '''
        1 Crypter
        2 Décrypter
        3 Quitter
        > '''
        modo = ''
    
        while(modo != 3):
            while(not modo in [1,2,3]):
                print('\n' + '''Choisissez une option'''.center(50,'*'))
                modo = int(input(menu))
    
            if(modo == 3): break
    
            chave = recebeChave()
            mensagem = input("donner le mot ou le text a traiter: ")
            print(geraMsgTraduzida(modo, mensagem, chave))
            modo = ''


    apres, dans les autres fonctions, il faut remplacer les tests sur modo en comparant avec 1 ou 2, et non plus sur les strings
    0
    1. mery-mery Messages postés 15 Statut Membre
       
      non moi j’aimerai bien garder le script comme il est, je veux juste ajouter une boucles c’est tous.
      0
  6. Phil_1857 Messages postés 1883 Date d'inscription   Statut Membre Dernière intervention   169
     
    Comme tu veux ... :-)
    0