Exercice en Python : Course de chevaux - Le pari doublé

Vous pouvez copier-coller la solution proposée directement dans votre éditeur de programmes Python. Veillez toutefois à retaper vous-même certains programmes afin de vous exercer pour quand vous devrez taper vos programmes personnels.

Le programme simule un pari sur l’arrivée de 2 chevaux dans l’ordre (un pari doublé). Le programme simule ensuite la course de 4 chevaux en n’affichant l’arrivée que des 2 premiers pour simplifier les choses. Le programme signale enfin si l’utilisateur a gagné son pari dans l’ordre, dans le désordre ou pas du tout.

Vous pouvez varier cet énoncé comme il vous plaît en modifiant le nombre de chevaux sur lesquels on parie et le nombre de chevaux en course.

Selon l'analyse descendante et structurée, le programme va se découper en plusieurs modules successifs :

  1. La réalisation du pari par l'utilisateur;
  2. La simulation de la course de chevaux et l'affichage de l'ordre d'arrivée des deux premiers chevaux;
  3. La vérification du pari par rapport aux arrivée et la communication à l'utilisateur.

Il faut maintenant analyser ce qui doit se passer dans les différents modules et choisir les variables nécessaires. Comment concevez-vous les choses ?

Voir une analyse

Au niveau du pari

Il faut en tout cas que l'utilisateur parie deux chevaux différents et qu'ils soient parmi les 4 chevaux qui soient au départ. Nous allons, bien entendu, utiliser une liste que nous nommerons depart et qui contiendra les numéros des 4 chevaux au départ.

  1. On déclare une liste vide pari;
  2. Pour le premier cheval, on boucle jusqu'à ce que le numéro choisi soit dans la liste depart;
  3. On enlève le numéro choisi comme cheval arrivant un première position de cette liste depart;
  4. On place le numéro choisi dans la liste pari;
  5. On recommence une boucle pour parier le cheval qui arrivera en seconde position jusqu'à ce qu'il soit dans la liste depart;
  6. On place le second cheval dans la liste pari;
  7. Enlever ce second cheval de la liste depart n'a aucun intérêt.

Au niveau de la simulation de la course

Le même cheval ne peut arriver deux fois, même s'il est très rapide au point d'avoir faire un tour en plus en dépassant tous les autres pour arriver second !O)))

  1. On déclare une liste vide arrivee;
  2. On tire au hasard sans boucle le numéro du cheval qui arrive en première position (on suppose que les chevaux sont numérotés de 1 à 4 mais il serait possible d'avoir des numéros non successifs... Comment ?);
  3. On place ce numéro dans la liste arrivee;
  4. On fait une boucle tirant au hasard le cheval qui arrivera en second jusqu'à ce que ce numéro ne figure pas dans arrivee;
  5. On ajoute ce second numéro à la liste arrivee.

Au niveau de la vérification du pari

Il faut maintenant comparer les listes ordonnées pari et arrivee pour déterminer si le pari a été gagné dans l'ordre, le désordre ou pas du tout. On "sent" tout de suite que cela se fera grâce à une cascade de SI.

  1. On vérifie si les deux listes sont égales simplement avec le signe ==. Si c'est le cas, le pari est gagné dans l'ordre;
  2. Si ce n'est pas le cas, on va comparer les deux listes classées par ordre croissant. Si ces deux listes sont égales, le pari est classé dans le désordre;
  3. Si ces deux tests sont négatifs et qu'on arrive à la fin de la cascade de SI, c'est que le pari est perdu.

Cacher cette analyse

Il vous reste maintenant à réaliser votre programme en Python... et puis à le vérifier de nombreuses fois afin de voir si les résultats obtenus correspondent bien aux statistiques de réussite.

À propos, quelle sont les chances de gagner dans l'ordre ? De gagner dans le désordre ?

Voir une solution

# Importation de la bibliothèque pour l’utilisation de randint
from random import randint
# Déclaration de la liste des 4 chevaux de la course et des listes vides
depart = [1,2,3,4]
arrivee = [ ]
pari = [ ]
# Ici commence le pari
numero = 0 # On initialise avec un numéro inexistant pour forcer l’entrée dans le while
while numero not in depart:
     numero = int(input("Quel cheval arrivera en premier (entre 1 et 4 compris) ? "))
pari.append(numero)
depart.remove(numero)
while numero not in depart:
     numero = int(input("Quel cheval arrivera en second (entre 1 et 4 compris) ? "))
pari.append(numero)
depart.remove(numero) # Pas vraiment utile car on n’utilise plus depart par la suite
# Ici commence la simulation de la course
arrivee.append(randint(1,4)) # Arrivée du premier cheval
numero = arrivee [0] # Pour forcer l’entrée dans le while qui suit
while numero in arrivee: # Pour ne pas avoir 2 fois le même cheval à l’arrivée
     numero = randint(1,4)
arrivee.append(numero) # Arrivée du second cheval
# Ici commence la vérification du pari doublé
print ("Votre pari était dans l’ordre :", pari[0], "et", pari[1])
print ("Les chevaux arrivés dans l’ordre sont", arrivee[0], "et", arrivee[1])
if pari == arrivee:
     print("Excellent, vous avez gagné votre pari dans l’ordre.")
elif sorted (pari) == sorted (arrivee): # Comparaison après classement par ordre croissant
     print("Bravo, vous avez gagné votre pari dans le désordre.")
else:
     print("Dommage, vous avez perdu votre pari.")
input() # A ajouter si vous voulez exécuter votre programme directement en Python.

Cacher cette solution

Vous êtes maintenant prêt·e à "voler de vos propres ailes". Merci de nous avoir accompagné jusqu'ici. Nous vous souhaitons beaucoup de plaisir et de réussite dans votre nouvelle vie de codeuse ou codeur :O)

Retour