Review cours Terminale NSI — POO, SQL, Sécurité, Soc, Calculabilité, Réseau

This commit is contained in:
2026-06-15 11:28:37 +02:00
parent fcb20e45f9
commit 9ad5b99920
9 changed files with 1305 additions and 827 deletions

View File

@@ -398,14 +398,107 @@ Modifiez la classe `Pokemon` pour qu'un Pokémon possède une liste de capacité
---
## Partie 5 : Héritage — Spécialiser les Pokémon
> **Prérequis** : avoir vu le cours sur l'héritage.
Jusqu'ici, tous les Pokémon utilisent la même méthode `attaquer`. Mais en vrai, un Pokémon Feu n'attaque pas comme un Pokémon Eau. Plutôt que de gérer ça avec un dictionnaire de faiblesses dans `attaquer`, on peut utiliser l'**héritage** pour créer des sous-classes spécialisées.
---
### Exercice 8 : Sous-classes par type
Créez trois sous-classes qui héritent de `Pokemon` :
- `PokemonFeu` : inflige ×2 dégâts aux Pokémon Plante
- `PokemonEau` : inflige ×2 dégâts aux Pokémon Feu
- `PokemonPlante` : inflige ×2 dégâts aux Pokémon Eau
Chaque sous-classe doit :
1. Hériter de `Pokemon` via `class PokemonFeu(Pokemon):`
2. Appeler `super().__init__(...)` dans son constructeur en fixant `type_pokemon` automatiquement
3. Surcharger la méthode `attaquer` pour appliquer le bonus de dégâts
```python
class PokemonFeu(Pokemon):
def __init__(self, nom, niveau=1, pv_max=100, attaque=10):
super().__init__(nom, "Feu", niveau, pv_max, attaque)
def attaquer(self, cible):
"""
Attaque avec ×2 dégâts si la cible est de type Plante.
"""
# À compléter
pass
class PokemonEau(Pokemon):
def __init__(self, nom, niveau=1, pv_max=100, attaque=10):
super().__init__(nom, "Eau", niveau, pv_max, attaque)
def attaquer(self, cible):
"""
Attaque avec ×2 dégâts si la cible est de type Feu.
"""
# À compléter
pass
class PokemonPlante(Pokemon):
def __init__(self, nom, niveau=1, pv_max=100, attaque=10):
super().__init__(nom, "Plante", niveau, pv_max, attaque)
def attaquer(self, cible):
"""
Attaque avec ×2 dégâts si la cible est de type Eau.
"""
# À compléter
pass
```
**Tests :**
```python
>>> salameche = PokemonFeu("Salamèche", niveau=15, pv_max=70, attaque=12)
>>> bulbizarre = PokemonPlante("Bulbizarre", niveau=15, pv_max=75, attaque=10)
>>> salameche.attaquer(bulbizarre)
C'est super efficace !
Salamèche attaque Bulbizarre et inflige 24 dégâts !
>>> bulbizarre.attaquer(salameche)
Bulbizarre attaque Salamèche et inflige 10 dégâts !
```
---
### Exercice 9 : isinstance() en pratique
1. Vérifiez que `salameche` est à la fois une instance de `PokemonFeu` **et** de `Pokemon`. Expliquez pourquoi.
2. Écrivez une fonction `compter_par_type(equipe)` qui prend une liste de Pokémon et renvoie un dictionnaire `{type: nombre}`.
```python
>>> equipe = [PokemonFeu("Dracaufeu"), PokemonEau("Tortank"), PokemonFeu("Sulfura"), PokemonPlante("Florizarre")]
>>> compter_par_type(equipe)
{'Feu': 2, 'Eau': 1, 'Plante': 1}
```
---
### Exercice 10 : Refactoring
Relisez le dictionnaire `FAIBLESSES` de l'exercice 3. Maintenant que vous avez des sous-classes, ce dictionnaire est-il encore utile ? Quelle approche est plus lisible selon vous ? Discutez.
---
## Résumé des classes
| Classe | Attributs | Méthodes principales |
|--------|-----------|----------------------|
| `Pokemon` | nom, type, niveau, pv, attaque | attaquer(), subir_degats(), est_ko() |
| `Dresseur` | nom, equipe | ajouter_pokemon(), tous_ko() |
| `Combat` | dresseur1, dresseur2, tour | lancer_combat() |
| `CentrePokemon` | ville | soigner_equipe() |
| Classe | Hérite de | Attributs supplémentaires | Méthodes modifiées |
|--------|-----------|---------------------------|--------------------|
| `Pokemon` | — | nom, type, niveau, pv, attaque | attaquer(), subir_degats(), est_ko() |
| `PokemonFeu` | `Pokemon` | — | attaquer() |
| `PokemonEau` | `Pokemon` | — | attaquer() |
| `PokemonPlante` | `Pokemon` | — | attaquer() |
| `Dresseur` | — | nom, equipe | ajouter_pokemon(), tous_ko() |
| `Combat` | — | dresseur1, dresseur2, tour | lancer_combat() |
| `CentrePokemon` | — | ville | soigner_equipe() |
---