Faire une boucle sur python qui relance le programme

Résolu/Fermé
mery-mery Messages postés 11 Date d'inscription samedi 2 avril 2022 Statut Membre Dernière intervention 8 mai 2022 - 3 avril 2022 à 02:52
mery-mery Messages postés 11 Date d'inscription samedi 2 avril 2022 Statut Membre Dernière intervention 8 mai 2022 - 4 avril 2022 à 02:41
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

Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 931
3 avril 2022 à 08:47
1
mery-mery Messages postés 11 Date d'inscription samedi 2 avril 2022 Statut Membre Dernière intervention 8 mai 2022
3 avril 2022 à 13:57
merci
0
yg_be Messages postés 22727 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 26 avril 2024 1 476
3 avril 2022 à 19:12
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
mery-mery Messages postés 11 Date d'inscription samedi 2 avril 2022 Statut Membre Dernière intervention 8 mai 2022
4 avril 2022 à 02:41
merci ça a marcher ,le problème est résolue .
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 3 avril 2022 à 10:47
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
mery-mery Messages postés 11 Date d'inscription samedi 2 avril 2022 Statut Membre Dernière intervention 8 mai 2022
3 avril 2022 à 13:17
#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
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 3 avril 2022 à 13:43
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
mery-mery Messages postés 11 Date d'inscription samedi 2 avril 2022 Statut Membre Dernière intervention 8 mai 2022
3 avril 2022 à 13:47
est-ce possible d’expliquer plus en détail , car la j’arrive pas bien a comprendre .
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 3 avril 2022 à 14:08
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
mery-mery Messages postés 11 Date d'inscription samedi 2 avril 2022 Statut Membre Dernière intervention 8 mai 2022
Modifié le 3 avril 2022 à 14:55
non moi j’aimerai bien garder le script comme il est, je veux juste ajouter une boucles c’est tous.
0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
3 avril 2022 à 18:57
Comme tu veux ... :-)
0