👤

Explorez une multitude de sujets et trouvez des réponses fiables sur FRstudy.me. Bénéficiez de conseils étape par étape pour toutes vos questions techniques, grâce aux membres bien informés de notre communauté.

Un jeu de mémoire
Le but de ce TP est de programmer un jeu de mémoire, dont voici le principe.
✒ L’ordinateur affiche un nombre pendant trois secondes, puis efface ce nombre et demande à l’utilisateur
de le saisir.
✒ Si l’utilisateur répond correctement, l’ordinateur recommence avec deux nombres, puis avec trois . . .
✒ Cela continue ainsi de suite, jusqu’à ce que l’utilisateur se trompe dans la saisie.
1) Écrire en Python une fonction genere_liste_aleatoire qui :
• prend en paramètre un entier n,
• crée une liste de longueur n dont les éléments sont des entiers aléatoires entre 10 et 99 (rappel : on
pourra utiliser la fonction randint du module random),
• renvoie cette liste.
Ajouter une assertion en début de fonction afin de s’assurer que n est un entier positif.
2) Écrire en Python une fonction saisie_liste qui :
• prend en paramètre un entier n,
• crée une liste de longueur n dont les éléments sont des entiers saisis l’un après l’autre par l’utilisateur
(un message devra afficher l’indice de l’élément à saisir),
• renvoie cette liste.
Ajouter une assertion en début de fonction afin de s’assurer que n est un entier positif.
3) On considère la fonction ci-dessous écrite en pseudo-code :
1. FONCTION mystere(liste)
2. DÉBUT FONCTION
3. """spécification inconnue"""
4. compteur ← 0
5. DÉBUT POUR
6. POUR elt DANS liste
7. DÉBUT SI
8. SI elt = 8, alors
9. compteur ← compteur + 1
10. FIN SI
11. FIN POUR
12. RENVOYER compteur
13. FIN FONCTION
a) Que fait cette fonction ? La transcrire en langage Python et la tester.
b) Écrire en Python une fonction compare_liste qui :
• prend en paramètres deux listes de même longueur,
• renvoie le nombre de différences entre les deux listes.
Ajouter une assertion en début de fonction afin de s’assurer que les listes passées en argument ont la
même longueur.
4) Écrire en Python (en utilisant les fonctions précédentes) un script qui :
• initialise les variables niveau et nb_erreurs à 0,
• demande d’appuyer sur entrer pour continuer (via un input qui permet uniquement de mettre le
programme en pause le temps que le joueur soit prêt),
• répète tant qu’aucune erreur de saisie n’est commise :
☞ incrémente la variable niveau,
☞ génère une liste, nommée cible de longueur niveau, d’entiers aléatoires compris entre 10 et 99,
☞ affiche cette liste avec l’instruction print(cible),
☞ attend niveau + 1 secondes : on utilisera la fonction sleep du module time,
☞ afficher 40 lignes vides pour faire disparaître la liste de la console, grâce à l’instruction print("\n" * 40),
☞ demande de saisir les éléments d’une liste reponse,
☞ affiche "Bravo !" si aucune erreur n’est commise dans la saisie (les listes cible et reponse sont
identiques), et "Perdu !" sinon (en cas d’échec, on affiche le nombre d’erreurs, la liste saisie et la
cible),
☞ demande d’appuyer sur entrer pour continuer (avec un input),
• affiche le niveau auquel le joueur a échoué


Sagot :

import random
from time import sleep

def genere_liste_aleatoire(n):
assert isinstance(n, int) and n > 0, "n doit être un entier positif"
return [random.randint(10, 99) for _ in range(n)]

def saisie_liste(n):
assert isinstance(n, int) and n > 0, "n doit être un entier positif"
return [int(input(f"Saisissez l'élément {i + 1}: ")) for i in range(n)]

def mystere(liste):
"""Fonction mystère."""
compteur = 0
for elt in liste:
if elt == 8:
compteur += 1
return compteur

def compare_liste(liste1, liste2):
assert len(liste1) == len(liste2), "Les listes doivent avoir la même longueur"
return sum(elt1 != elt2 for elt1, elt2 in zip(liste1, liste2))

def jeu_de_memoire():
niveau = 0
nb_erreurs = 0

input("Appuyez sur Entrer pour commencer...")

while True:
niveau += 1
cible = genere_liste_aleatoire(niveau)
print(cible)
sleep(niveau + 1)
print("\n" * 40)

reponse = saisie_liste(niveau)

if compare_liste(cible, reponse) == 0:
print("Bravo !")
else:
nb_erreurs = compare_liste(cible, reponse)
print(f"Perdu ! Nombre d'erreurs : {nb_erreurs}, Liste saisie : {reponse}, Liste cible : {cible}")

input("Appuyez sur Entrer pour continuer...")

if nb_erreurs > 0:
print(f"Vous avez échoué au niveau {niveau}")
break

# Exécution du jeu de mémoire
jeu_de_memoire()