Files
1ereNSI/representation_construits/evaluation/TP02_Minecraft_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

3.4 KiB

Aide - TP02 Minecraft

Rappels utiles

Verifier si une cle existe dans un dictionnaire

inventaire = {"bois": 64, "pierre": 32}

if "fer" in inventaire:
    print("Vous avez du fer")
else:
    print("Pas de fer")

# Ou avec get (renvoie 0 si absent)
quantite = inventaire.get("fer", 0)

Modifier un dictionnaire

# Ajouter ou modifier
inventaire["fer"] = 10

# Supprimer
del inventaire["fer"]

# Ajouter a une valeur existante
inventaire["bois"] = inventaire.get("bois", 0) + 5

Trier un dictionnaire par valeur

# Trier par valeur decroissante
items_tries = sorted(inventaire.items(), key=lambda x: x[1], reverse=True)
# Resultat : [("bois", 64), ("pierre", 32)]

Exercice 1

1.1 - Affichage inventaire

  • sorted(inv.items(), key=lambda x: x[1], reverse=True) pour trier par quantite
  • Utilisez print() avec des virgules pour afficher
for item, quantite in inventaire.items():
    print(item, ":", quantite)

1.2 - Operations

  • Pour ajouter : inv[item] = inv.get(item, 0) + quantite
  • Pour retirer, verifiez d'abord que la quantite est suffisante
  • Ne modifiez l'inventaire que si l'operation est possible

1.3 - Valeur

total = 0
for item, qte in inv.items():
    if item in valeurs:
        total = total + qte * valeurs[item]

Exercice 2

2.1 - Verifier craft possible

def peut_crafter(inv, recette):
    for ingredient, qte_necessaire in recette.items():
        if inv.get(ingredient, 0) < qte_necessaire:
            return False
    return True

2.2 - Effectuer un craft

  1. Verifiez d'abord avec peut_crafter
  2. Si possible, retirez les ingredients
  3. Ajoutez le resultat (attention a quantites_produites)
qte_produite = quantites.get(nom_item, 1)  # Par defaut 1

2.3 - Crafts disponibles

  • Pour chaque recette, calculez combien de fois on peut la faire
  • Le nombre max = minimum des ratios inv[ingredient] // qte_necessaire
def nb_max_craft(inv, recette):
    ratios = []
    for ing, qte in recette.items():
        if inv.get(ing, 0) < qte:
            return 0
        ratios.append(inv[ing] // qte)
    return min(ratios)

Exercice 3 (Bonus)

3.1 - Chaine de craft (recursivite)

def ingredients_totaux(nom_item, recettes, quantite):
    if nom_item not in recettes:
        # C'est une matiere premiere
        return {nom_item: quantite}

    resultat = {}
    for ingredient, qte in recettes[nom_item].items():
        sous_ingredients = ingredients_totaux(ingredient, recettes, qte * quantite)
        for ing, q in sous_ingredients.items():
            resultat[ing] = resultat.get(ing, 0) + q
    return resultat

3.2 - Meilleur equipement

  • Definissez les tiers : tiers = {"diamant": 4, "fer": 3, "pierre": 2, "bois": 1}
  • Pour chaque type (pioche, epee, armure), testez du meilleur au moins bon
  • Utilisez peut_crafter pour verifier

3.3 - Liste de courses

  1. Calculez les ingredients totaux pour chaque objectif
  2. Soustrayez ce qui est deja dans l'inventaire
  3. Ne gardez que les quantites positives (ce qui manque)

Pieges a eviter

  1. Quantites produites : un craft de planches donne 4 planches, pas 1 !
  2. Modification de dictionnaire : creez une copie si necessaire avec inv.copy()
  3. Division entiere : utilisez // pour obtenir un entier
  4. Recette inexistante : verifiez que nom_item in recettes