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>
This commit is contained in:
133
representation_construits/evaluation/TP02_Minecraft_aide.md
Normal file
133
representation_construits/evaluation/TP02_Minecraft_aide.md
Normal file
@@ -0,0 +1,133 @@
|
||||
# Aide - TP02 Minecraft
|
||||
|
||||
## Rappels utiles
|
||||
|
||||
### Verifier si une cle existe dans un dictionnaire
|
||||
```python
|
||||
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
|
||||
```python
|
||||
# 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
|
||||
```python
|
||||
# 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
|
||||
|
||||
```python
|
||||
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
|
||||
```python
|
||||
total = 0
|
||||
for item, qte in inv.items():
|
||||
if item in valeurs:
|
||||
total = total + qte * valeurs[item]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Exercice 2
|
||||
|
||||
### 2.1 - Verifier craft possible
|
||||
```python
|
||||
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`)
|
||||
```python
|
||||
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`
|
||||
```python
|
||||
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)
|
||||
```python
|
||||
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`
|
||||
Reference in New Issue
Block a user