Faire une boucle sur python qui relance le programme

Résolu
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. Contributeur
    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. merci ça a marcher ,le problème est résolue .
      0
  2. 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. #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. 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. est-ce possible d’expliquer plus en détail , car la j’arrive pas bien a comprendre .
      0
  4. 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. non moi j’aimerai bien garder le script comme il est, je veux juste ajouter une boucles c’est tous.
      0