TD 4 - Les listes (sans math)

Échauffement avec les listes

  1. Créer une liste mois avec le nom des mois.
mois = ["Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Aout", "Septembre", "Octobre", "Novembre", "Décembre"]
  1. Créer une fonction nom_mois(n) prend en paramètre un entier n compris entre 1 et 12 et qui retourne le mois correspondant.
>>> nom_mois(5)
"Mai"
def nom_mois(n):
    return mois[n-1]
  1. Créer une fonction mois_existe(nom) qui teste si le nom passé en paramètre est un mois existant.
>>> mois_existe("Mai")
True
def mois_existe(nom):
    return nom in mois
  1. Créer une fonction numero_mois(nom) qui retourne le numéro du mois correspondant s’il existe.
>>> numero_mois("Mai")
5
def numero_mois(nom):
    if mois_existe(nom):
        for i in range(len(mois)):
            if mois[i] == nom:
                return i + 1
    else:
        printf("Le mois n'existe pas")

Manipulation de liste

  1. Réalisez une fonction nombreOccurences qui prend en paramètre une liste et un élément (peu importe son type) et qui renvoie le nombre occurrences dans la liste du second paramètre.
>>> l = [1,3,4,1,6,7]
>>> nombreOccurences(l, 1)
2
def nombreOccurences(liste, val):
    cpt = 0
    for i in liste:
        if i == val:
            cpt = cpt + 1
    return cpt
  1. Réalisez une fonction indice qui prend en paramètre une liste et un élément (peu importe son type) et qui renvoie l’indice de la première occurrence du second paramètre. Si l’élément n’est pas présent, il renvoie alors -1.
>>> l = [1,3,4,1,6,7]
>>> indice(l, 1)
0
>>> indice(l, 4)
2
>>> indice(l, 5)
-1
def indice(liste, val):
    for i in range(len(liste)):
        if liste[i] == val:
            return i
    return -1

Un jeu de combat

  1. Écrivez une fonction menu qui prend en paramètre une liste de choix, et qui demande à l’utilisateur de choisir un élément parmi la liste et retourne l’élément choisi. Le programme doit demander de refaire un choix tant que l’utilisateur ne choisit par un élément de la liste.
 >>> menu(["Attaque", "Soin", "Fuir"])
     Choisissez 1 action [Attaque, Soin, Fuir]: **Vol**
     Choisissez 1 action [Attaque, Soin, Fuir]: **Attaque**
 "Attaque"
def menu(liste):
    choix = ""
    while choix not in liste:
        choix = input("Choisissez 1 action" + str(liste) + " : ")
    return choix
  1. Vous disposez de deux variables joueur et monstre initialisées toutes les deux à 50. Vous devez combattre le monstre. Pour cela vous avez plusieurs actions possibles:
  • Attaque : Inflige entre 1 et 10 points de dégâts au monstre
  • Soin: Vous soigne entre 1 et 10 points de vie
  • Fuir: Mets fin au combat, vous avez une chance sur deux de pouvoir fuir.

Après chaque action, le monstre vous inflige entre 1 et 10 points de dégâts. Et vous repropose une nouvelle action jusqu’à tant qu’une des trois fins arrive :

  • Le joueur à 0 ou moins de points de vie: Vous avez perdu !
  • Le monstre à 0 ou moins de points de vie: Vous avez gagné !
  • Vous avez réussi à vous enfuir: Vous avez fui comme un lâche !

Réalisez le programme permettant de simuler cette situation. Pour cela, découpez votre programme en plusieurs fonctions, et n’hésitez pas à utiliser le menu de la question précédente.

from random import randint
joueur = 50
monstre = 50
actions = ["Attaque", "Soin", "Fuir"]
fuite = False
while joueur > 0 and monstre > 0 and not fuite:
    # Tour joueur
    choix = menu(actions)
    if choix == "Attaque":
        monstre = monstre - randint(1,10)
    elif choix == "Soin":
        joueur = joueur + randint(1,10)
    elif randint(1,2) == 1:
        fuite = True
    # Tour monstre
    if monstre > 0:
        joueur = joueur - randint(1, 10)
if joueur <= 0:
    print("Vous avez perdu !")
elif monstre <= 0:
    print("Vous avez gagné !")
else:
    print("Vous avez fui comme un lâche !")