Évaluation pratique n°1 v3
Les bases de Python
20 minutes
Copier-coller l’intégralité de ce script dans votre IDE Python. Compléter le code manquant en vous aidant des commentaires.
Vous devez tester votre code avant que je ne corrige votre travail.
Votre script ne doit pas planter à la fin de l’épreuve. S’il plante, c’est zéro ! 🤓. Si vous n’arrivez pas à traiter une question, commentez-la pour la désactiver.
# ===============================================================
# ÉVALUATION NSI (Rattrapage D) : Les fondamentaux de Python
# Complétez le code aux endroits marqués par 🛑
# Pensez à tester régulièrement votre code !
# ===============================================================
import random
liste_vaisseaux = ["Faucon", "X-Wing", "Navette", "Croiseur", "Chasseur", "Cargo"]
# –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
# Question 1 : Saisie, calcul et affichage
# –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
print("––– Question 1 –––")
# Demandez à l'utilisateur un nombre de potions de soin (entier).
# Chaque potion coûte 3 pièces d'or.
# Stockez la saisie dans 'nb_potions', calculez le prix total,
# puis affichez exactement :
# "Pour ... potions, vous devez payer ... pièces d'or."
# (Utilisez une f-string)
# 🛑 À compléter
# –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
# Question 2 : Parcours de chaîne et indicateur booléen
# –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
print("\n––– Question 2 –––")
# Un vaisseau est tiré au sort dans la liste.
# Complétez la boucle for pour que 'contient_a' devienne True
# si le nom du vaisseau contient la lettre 'a' (minuscule).
# Sinon, la variable doit rester False.
vaisseau = random.choice(liste_vaisseaux)
contient_a = False
for car in vaisseau:
pass # 🛑 Remplacer par le code nécessaire
print(f"'{vaisseau}' contient la lettre 'a' : {contient_a}")
# –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
# Question 3 : Boucle while (simulation de recharge)
# –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
print("\n––– Question 3 –––")
# Une batterie est vide (charge = 0 %).
# À chaque cycle de recharge, elle gagne entre 5 et 12 % : random.randint(5, 12).
# Écrivez une boucle while qui recharge la batterie TANT QUE charge < 40.
# Comptez et affichez le nombre de cycles nécessaires pour atteindre au moins 40 %.
charge = 0
nb_cycles = 0
# 🛑 À compléter
print(f"Batterie chargée à {charge} % en {nb_cycles} cycle(s).")
# –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
# Question 4 : Fonction avec boucle d'accumulation
# –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
print("\n––– Question 4 –––")
# Définissez une fonction compter_lettre(texte, cible) qui :
# - prend en paramètres une chaîne 'texte' et un caractère 'cible'
# - RENVOIE (avec return, pas de print !) le nombre de fois où 'cible' apparaît dans 'texte'.
def compter_lettre(texte, cible):
pass # 🛑 À remplacer
# --- Tests automatiques (ne rien modifier) ---
print(f"compter_lettre('programmation', 'm') = {compter_lettre('programmation', 'm')} (attendu : 2)")
print(f"compter_lettre('ordinateur', 'z') = {compter_lettre('ordinateur', 'z')} (attendu : 0)")
print(f"compter_lettre('ananas', 'a') = {compter_lettre('ananas', 'a')} (attendu : 3)")
# –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
# Question 5 : Fonction de classification (if / elif / else)
# –––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
print("\n––– Question 5 –––")
# Définissez une fonction niveau_alerte(temperature) qui :
# - RENVOIE "Danger" si temperature > 40
# - RENVOIE "Avertissement" si 25 <= temperature <= 40
# - RENVOIE "Normal" sinon (temperature < 25)
# (Attention : utilisez return, aucun print dans la fonction !)
def niveau_alerte(temperature):
pass # 🛑 À remplacer
# --- Tests automatiques (ne rien modifier) ---
print(f"niveau_alerte(45) = '{niveau_alerte(45)}' (attendu : 'Danger')")
print(f"niveau_alerte(30) = '{niveau_alerte(30)}' (attendu : 'Avertissement')")
print(f"niveau_alerte(18) = '{niveau_alerte(18)}' (attendu : 'Normal')")