Files
1ereNSI/representation_construits/evaluation/TP06_Pokemon_aide.md
Florian Mathieu 1290ccf453 ajout exercices, corrections diverses, glossaire
- Ajout des 10 TPs d'évaluation (sans PDF)
- Création GLOSSAIRE.md et AMELIORATIONS.md
- Corrections f-strings, eval(), sommaires

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 23:37:26 +01:00

5.1 KiB

Aide - TP06 Pokemon

Rappels utiles

Structure des tuples Pokemon

# Pokemon = (nom, types, pv, attaque, defense, vitesse, evolution)
pokemon = pokedex[0]
nom = pokemon[0]         # "Bulbizarre"
types = pokemon[1]       # ("Plante", "Poison")
pv = pokemon[2]          # 45
attaque = pokemon[3]     # 49
defense = pokemon[4]     # 49
vitesse = pokemon[5]     # 45
evolution = pokemon[6]   # "Herbizarre"

Types multiples

pokemon = pokedex[5]  # Dracaufeu
# types est un tuple : ("Feu", "Vol")
print(pokemon[1][0])  # "Feu" (type principal)

if "Feu" in pokemon[1]:
    print("C'est un type Feu")

Exercice 1

1.1 - Affichage Pokemon

def afficher_pokemon(pokemon):
    nom = pokemon[0]
    types = pokemon[1]
    pv = pokemon[2]
    attaque = pokemon[3]
    defense = pokemon[4]
    vitesse = pokemon[5]
    evolution = pokemon[6]

    # Afficher les types
    if len(types) == 2:
        types_str = types[0] + "/" + types[1]
    else:
        types_str = types[0]

    print(nom, "(", types_str, ")")
    print("PV:", pv, "| ATK:", attaque, "| DEF:", defense, "| VIT:", vitesse)

    if evolution == None:
        print("Evolution: Forme finale")
    else:
        print("Evolution:", evolution)

1.2 - Recherche par type

def pokemon_par_type(dex, type_recherche):
    resultat = []
    for p in dex:
        if type_recherche in p[1]:  # p[1] = types
            resultat.append(p)
    # Trier par PV (indice 2) decroissants
    resultat = sorted(resultat, key=lambda p: p[2], reverse=True)
    return resultat

1.3 - Compter les types

def compter_types(dex):
    compteur = {}
    for pokemon in dex:
        types = pokemon[1]
        for t in types:
            if t not in compteur:
                compteur[t] = 0
            compteur[t] = compteur[t] + 1
    return compteur

Exercice 2

2.1 - Charger equipe

def charger_equipe(noms, dex):
    equipe = []
    for nom_recherche in noms:
        # Chercher le pokemon dans le pokedex
        for pokemon in dex:
            if pokemon[0] == nom_recherche:
                equipe.append(pokemon)
                break
    return equipe

2.2 - Force de l'equipe

def force_equipe(equipe):
    force_totale = 0
    for pokemon in equipe:
        pv = pokemon[2]
        attaque = pokemon[3]
        defense = pokemon[4]
        vitesse = pokemon[5]
        force_pokemon = pv + attaque + defense + vitesse
        force_totale = force_totale + force_pokemon
    return force_totale

2.3 - Pokemon le plus fort

def plus_fort(equipe):
    if len(equipe) == 0:
        return None

    meilleur = equipe[0]
    meilleure_attaque = equipe[0][3]  # indice 3 = attaque

    for pokemon in equipe:
        if pokemon[3] > meilleure_attaque:
            meilleur = pokemon
            meilleure_attaque = pokemon[3]

    return meilleur

2.4 - Types couverts

def types_couverts(equipe):
    types_liste = []
    for pokemon in equipe:
        types = pokemon[1]
        for t in types:
            if t not in types_liste:
                types_liste.append(t)
    return types_liste

Exercice 3 (Bonus)

3.1 - Chaine d'evolution

def chaine_evolution(nom, dex):
    chaine = [nom]

    # Chercher le pokemon actuel
    pokemon_actuel = None
    for p in dex:
        if p[0] == nom:
            pokemon_actuel = p
            break

    if pokemon_actuel == None:
        return chaine

    # Suivre les evolutions
    evolution = pokemon_actuel[6]
    while evolution != None and evolution != "Multiple":
        chaine.append(evolution)
        # Chercher le pokemon suivant
        for p in dex:
            if p[0] == evolution:
                evolution = p[6]
                break

    return chaine

3.2 - Verifier efficacite

def est_efficace(attaquant, defenseur, faiblesses):
    types_attaquant = attaquant[1]
    types_defenseur = defenseur[1]

    # Pour chaque type de l'attaquant
    for type_att in types_attaquant:
        # Verifier si ce type est efficace
        if type_att in faiblesses:
            types_faibles = faiblesses[type_att]
            # Verifier si le defenseur a un type faible
            for type_def in types_defenseur:
                if type_def in types_faibles:
                    return True

    return False

3.3 - Meilleur contre un adversaire

def meilleur_contre(adversaire, equipe, faiblesses):
    # D'abord chercher un pokemon efficace
    for pokemon in equipe:
        if est_efficace(pokemon, adversaire, faiblesses):
            return pokemon

    # Sinon renvoyer le plus fort en attaque
    return plus_fort(equipe)

Pieges a eviter

  1. Types en tuple : meme un seul type est un tuple ("Feu",) - notez la virgule !
  2. Tuples immutables : vous ne pouvez pas modifier pokemon[2] = 50
  3. Faiblesses unidirectionnelles : Feu bat Plante, mais Plante ne bat pas Feu
  4. PV negatifs : verifiez pv > 0 et non pv >= 0
  5. Acces par indice : pokemon[0]=nom, pokemon[1]=types, pokemon[2]=pv, pokemon[3]=attaque, pokemon[4]=defense, pokemon[5]=vitesse, pokemon[6]=evolution