Les boucles

Notre programme est bien avancé, il gère désormais les règles de base et le score. Cependant, le programme ne permet de gérer le fait qu'un joueur retire le dé plusieurs fois.

Lorsque l'on veut répéter des instructions identique, on emploie des boucles.

Testez le code suivant dans REPL :

import random

print("Boucle For")
for i in range(10):
  print(i)

print("")

print("Boucle while")
i = 0
while i < 100:
  print(i)
  i = i + random.randint(1,10)

On obtient ce résultat :

C'est quand même plus pratique que d'écrire X fois la même ligne. On distingue généralement de types de boucles :

  • les boucle for qui s'arrêtent lorsqu'un nombre prédéterminé de répétition est atteint. Elles sont utilisées lorsque l'on sait à l'avance combien de fois on doit répéter une boucle,

  • les boucles while, qui s'arrêtent lorsqu'une condition est satisfaite. On les utilise lorsque l'on ne sait pas à l'avance combien de répétitions vont être réalisées.

Pourquoi parler de boucle pour notre jeu ? Une idée ... ?

On aimerait intégrer la règle : "tant que le joueur souhaite retirer le dé, le dé est lancé". Cela signifie que tant que la valeur du dé est différente de 1, le joueur peut relancer le dé.

Voici le code complet :

import random

def jeterLeDe():
  resultat = random.randint(1,6)
  print("Résultat du lancé : ")
  print(resultat)
  return resultat

def afficherLeScore(valeur1, valeur2):
  print("_________________________________")
  print("SCORES")
  print("Joueur 1 : {}       Joueur 2 : {}".format(valeur1, valeur2))
  print("_________________________________")

print("Bonjour, bienvenue dans le jeu du cochon !")

scoreJoueur1 = 0
scoreJoueur2 = 0
tourJoueur1 = True
rejouer = "o"

resultat = jeterLeDe()

while(rejouer == "o" and resultat != 1):
  if (resultat == 1):
    print("Le dé est tombé sur 1, vous passez votre tour")
    tourJoueur1 = False
  else : 
    print("Le dé n'est pas tombé sur 1")
    rejouer = input("Voulez vous rejouer ? (si oui, taper 'o')  : ")
    if(rejouer == "o"):
      resultat = jeterLeDe()
    else :
      scoreJoueur1 = scoreJoueur1 + resultat
      afficherLeScore(scoreJoueur1, scoreJoueur2)

Voici les résultats d'un test

Dernière mise à jour