- 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>
3.4 KiB
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
- Verifiez d'abord avec
peut_crafter - Si possible, retirez les ingredients
- 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_crafterpour verifier
3.3 - Liste de courses
- Calculez les ingredients totaux pour chaque objectif
- Soustrayez ce qui est deja dans l'inventaire
- Ne gardez que les quantites positives (ce qui manque)
Pieges a eviter
- Quantites produites : un craft de planches donne 4 planches, pas 1 !
- Modification de dictionnaire : creez une copie si necessaire avec
inv.copy() - Division entiere : utilisez
//pour obtenir un entier - Recette inexistante : verifiez que
nom_item in recettes