Résolue

Sortie de la boucle while True

# Boucles # Structures conditionnelles

Gabriel Trouvé

Mentor

Du coup après chaque choix effectué tu restes dans ta boucle True qui te fait recommencer.

Mais à la fin le choix 5 avec le sys exit, ça te fait sortir de la deuxième boucle while user_choice... mais aussi de la boucle while True.

J'ai essayé avec break ça fonctionne aussi. Mais je ne comprends pas comment le break ou sys exit peut faire sortir

des deux boucles d'un coup. Je ne sais pas si je suis clair.


merci

while True:
    user_choice = ""
    while user_choice not in MENU_CHOICES:
        user_choice = input(MENU)
        if user_choice not in MENU_CHOICES:
            print("Veuillez choisir une option valide...")
    
    if user_choice == "1":#ajouter un élément
        item = input("Entrez le nom d'un élément à ajouter à lal iste de course : ")
        LISTE.append(item)
        print(f"Lélément {item} a bien été ajouté à la liste.")
    elif user_choice == "2": #retirer un élément
        item = input("Entrez le nom d'un élément à retirer de la liste de courses : ")
        if item in LISTE:
            LISTE.remove(item)
            print(f"L'élément {item} a été supprimer de la liste.")
        else:
            print(f"L'élement {item} n'est pas dans la liste.")
    elif user_choice == "3":#afficher la liste
        if LISTE:#Si vide évaluée comme False donc ne s'exécute pas
            print("Voici le contenu de votre liste : ")
            for i, item in enumerate(LISTE, 1):
                print(f"{i}. {item}")
        else:
            print("Votre liste ne contient aucun élément.")
    elif user_choice == "4": #vider la liste
        LISTE.clear()
        print("Votre liste a été vidée.")
    elif user_choice == "5": #quitter
        print("A bientôt")
        sys.exit()
    
    print("-" * 50)

Bonjour !

Je me suis bloqué à cet exercice de jeu de rôle dans le terminal. Avant de voir le corrigé je pose mon problème.

Mon code n'a pas marché et je le savais d'avance car il manque de logique dans le déroulé de mon script.

Je le mets ici tout de même, s' il y a des suggestions à me faire, des conseils à prendre en compte pour une bonne logique, des concepts à revoir pour au moins être sur le chemin de la résolution du problème, je vois que j'ai encore à faire pour appréhender les concepts de bases.

Merci



from random import randint

# Le but de ce projet est de créer un jeu de rôle textuel dans le terminal.
choix_joueur = ""
# Le jeu comporte deux joueurs : vous et un ennemi.
"""Deux variables joueur & ennemi"""
# Vous commencez tous les deux avec 50 points de vie.
point_vie_ennemi = point_vie_joueur = 50
# Votre personnage dispose de 3 potions qui vous permettent de récupérer des points de vie.
""" joueur/ 03 potions """
nombre_potion = 0
# L'ennemi ne dispose d'aucune potion.
"""ennemi/ 0 potion"""
# Chaque potion vous permet de récupérer un nombre aléatoire de points de vie, compris entre 15 et 50.

potion = randint(15, 50)
# Votre attaque inflige à l'ennemi des dégâts aléatoires compris entre 5 et 10 points de vie.
degat_joueur = randint(5, 10)
# L'attaque de l'ennemi vous inflige des dégâts aléatoires compris entre 5 et 15 points de vie.
degat_ennemi = randint(5, 15)

while point_vie_joueur and point_vie_ennemi > 0 :
    input("Souhaitez-vous attaquer (1) ou utiliser une potion (2) ? ")
     if not choix_joueur.isdigit() and not 1 or not 2:
         print("Veuillez mettre un choix valide")
     continue

    point_vie_restant_joueur = ""
    point_vie_restant_ennemi = ""
# Lorsque vous utilisez une potion, vous passez le prochain tour.
if choix_joueur == 1 :
          point_vie_restant_joueur = point_vie_joueur - degat_ennemi
          point_vie_restant_ennemi = point_vie_ennemi - degat_joueur

          print(f"Vous avez infligé {degat_joueur} points de dégâts à l'ennemi 📍")
          print(f"L'ennemi vous a infligé {degat_ennemi} points de dégâts 📍")
          print(f"Il vous reste {point_vie_restant_joueur} points de vie 💚")
          print(f"Il reste {point_vie_restant_ennemi} de vie à l'ennemi 💚")

    elif choix_joueur == 2:

        while nombre_potion > 3: 
            print("vous ne disposez plus de potion")
            continue
while nombre_potion < 3 :
                    point_vie_restant_joueur = point_vie_joueur + potion
                    point_vie_restant_joueur = point_vie_restant_joueur + potion
                    point_vie_restant_joueur = point_vie_joueur - degat_ennemi

                  print(f"L'ennemi vous a infligé {degat_ennemi} dégâts de vie point_vie_restant_joueur =  point_vie_restant_joueur + potion📍")
                  print(f"Il vous reste {point_vie_restant_joueur} de vies 💚")
                  print(f"Il reste {point_vie_restant_ennemi} de vies 💚")

              potion += 1
if int(point_vie_restant_joueur) < 0 :
          print("Vous avez perdu la partie 💘")

      if int(point_vie_restant_ennemi) < 0 :
          print("L'enemi a perdu la partie 💘")

      print("➖" * 30)



Gabriel Trouvé

Mentor

Je suis trop fan, tu m'as tué là, j'ai compris pour le sys.exit() on pouvait pas mieux expliqué !

Et si j'utilise un break ? c'est pareil du coup ? Car si je mets le Break mon script se termine.

Bonjour Gabriel,


Je suis d'accord pour le sys.exit() qui te fait sortir de ton script

Par contre, pour le break, tu sors uniquement de la boucle en cours, et c'est le cas ici, car quand on arrive à l'option 5 on est déjà sorti de la 2ème boucle qui sert uniquement à définir user_choice.

Le break te fait donc sortir de la boucle while True


J'espère avoir été assez clair

Gabriel Trouvé

Mentor

Ah mais oui Romu dsl je suis bête, je me mélange les pinceaux j'ai très bien compris. On est déjà sorti de la deuxième boucle.

Bonjour,

voici ma solution au challenge:

liste = []
ligne = "_____________________________________\n"
while True:
    print("Choisissez parmi les 5 options suivantes : \n"
          "1: Ajouter un élément à la liste\n"
          "2: Retirer un élément de la liste\n"
          "3: Afficher la liste\n"
          "4: Vider la liste\n"
          "5: Quitter"
          )
    choix = input("--> Votre choix : ")
    if choix == "1":
        element = input("Entrez le nom d'un élément à ajouter à la liste de courses : ")
        liste.append(element)
        print(f"L'élément {element} a bien été ajouté à la liste.")
    elif choix == "2":
        element = input("Entrez le nom d'un élément à retirer de la liste de courses : ")   
        if element in liste:
            liste.remove(element)
            print(f"L'élément {element} a bien été retiré de la liste.")
        else:
            print("!!! Entrez un élément présent dans la liste de course !!!")
    elif choix == "3":
        if liste:
            print("Voici le contenu de votre liste : ")
            for element in liste:
                print(f"{liste.index(element) + 1}. {element}")
        else:
            print("Votre liste ne contient aucun élément.")
    elif choix == "4":
        liste.clear()
        print("la liste a bien été vidée.")
    elif choix == "5":
        print("A bientôt !")
        break
    else:
        print("Veuillez entrer une option valide")
    print(ligne)


J'ai la mauvaise habitude d'utiliser la bloucle while True. :/

Hello Rudy,


je ne vois rien à redire c'est parfait et fonctionnel.

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.