Voici un exercice ou on demande de compléter le programme. J''ai commencé mais je suis bloqué. Quelqu'un(e) peut il m'aider svp?
On va programmer le jeu Sudoku (https://fr.wikipedia.org/wiki/Sudoku). Vous devez donc compléter le programme pour ce jeu. Une partie de programme vous est donnée dans deux fichiers: D4Q3.py et jeuSudoku.py (que vous devez compléter). Ne modifier pas les prototypes des fonctions. Vous devez implémenter les fonctions pour ce jeu. Un exemple d’exécution du jeu est donnéé à la fin de ce document.
Le programme principal contrôle le jeu (il est déjà donné). Au début un menu de 3 choix est affiché à l’utilisateur. Ensuite, il demande à l’utilisateur d’entrée son choix. On suppose que l’utilisateur va entrer exactement le bon choix (un choix entre 1 et 3) donc la validité du choix n’est pas vérifiée. Le choix 1 : il réinitialise la grille de Sudoku par la matrice donné dans le programme principal . Par la suite, le jeu commence en suivant les mêmes étapes que le choix 2. Le choix 2 : le jeu commence. Il affiche la grille à l’écran et puis demander à l’utilisateur d’entrer la case à jouer (il doit entrer le numéro de la ligne, de la colonne et le nombre qu’il veut ajouter). Si la case à jouer est correcte (une case valide), alors il faut afficher le message Bravo !!. Sinon, le message Echec sera affiché. Si la case est déjà remplie ou si la grille de Sudoku est pleine, il affiche le message approprié à l’utilisateur. Le choix 3 : Le jeu s’arrête. Le message Au revoir ! est affiché.
Afin de bien contrôler le jeu, il faut implémenter les fonctions suivantes : AfficherGrille() : permet d’afficher une grille Sudoku sous format d’une matrice 9x9. VerifierLigne() : permet de vérifier si le nombre à ajouter existe déjà sur la ligne. VerifierCol() : permet de vérifier si le nombre à ajouter existe déjà sur la colonne. VerifierSousGrille() : permet de vérifier si le nombre à ajouter existe déjà sur la sous grille où l’ajout sera fait. VerifierCase() : vérifier si une case est valide c.-à-d. le nombre à ajouter n’existe pas ni sur la ligne, ni sur la colonne, ni sur la sous-grille. VerifierGagner() : vérifier si la grille est complète c.-à-d. il n’y a aucun case nul. Dans ce cas, la fonction retourne True. Jouer() : ajouter une case dans la grille de Sudoku seulement si la case est valide. Notez que: 1) Après chaque choix de menu, on réaffiche la grille après modification (s’il en y a) et le menu avec les options et redemande à l’utilisateur d’entrer de nouveau un entre choix jusqu’à que l’utilisateur choisi l’option 3 ou la grille est complétée. 2) La case à ajouter est demandé à l’utilisateur avec input(). On ne vérifie pas la validité de ces entrés (on suppose que l’utilisateur il va entrer toujours un nombre entre 1 et 9 et un numéro de ligne et numéro de colonne entre 0 et 8). 3) Les fonctions verifierLigne(), verifierCol(), verifierSousGrille() retournent True si le nombre n’existe pas sur la ligne ou la colonne ou la sous-grille.
Annexe – exemple jeu
Menu: 1- Commencer un nouveau jeu. 2- Continuer le jeu. 3- Quitter le jeu.
from jeuSudoku import *
def afficherGrille(grille):
'''
(list) -> None
Affiche le grille de jeu Sudoku
Preconditions: grille est une reference a une matrice 9x9 qui contient déja des nombres de 1 à 9
'''
print(" ", end="")
col = 0
while col < len(grille):
print(col, end=" ")
col += 1
print()
row = 0
while row < len(grille):
print(row, end="")
col = 0
while col < len(grille[row]):
print(" ", grille[row][col], end="")
col += 1
print()
row += 1
def jouer(grille, row, col, num):
'''
(list, int, int, int) -> Bool
Jouer une étape de jeu Sudoku
Preconditions: grille est une réference sur une liste de 9x9 contient seulement des nombres
grille est modifié (un element est ajouté dans la grille) si la case est valide est correcte.
'''
# A COMPLETER
# Créer le tableau de jeu (9 x 9)
grille = [[5, 3, 8, 6, 9, 1, 0, 4, 7],
[7, 4, 6, 0, 3, 2, 8, 1, 9],
[1, 9, 2, 0, 8, 4, 3, 5, 6],
[8, 7, 1, 2, 6, 3, 4, 9, 5],
[3, 2, 9, 4, 5, 7, 1, 6, 8],
[4, 6, 5, 9, 1, 8, 7, 2, 3],
[0, 0, 4, 3, 7, 9, 5, 8, 2],
[9, 8, 3, 1, 0, 5, 6, 7, 4],
[2, 5, 0, 8, 4, 6, 9, 3, 1]] # la seule matrice utilisé dans le programme.
print("Menu: 1- Commencer un nouveau jeu.")
print(" ", "2- Continuer le jeu.")
print(" ", "3- Quitter le jeu.")
choix = int(input("SVP entrez votre choix: 1, 2 ou 3: "))
while choix < 3 and choix > 0:
if choix == 1:
# Créer le tableau de jeu (9 x 9)
grille = [[5, 3, 8, 6, 9, 1, 0, 4, 7],
[7, 4, 6, 5, 3, 2, 8, 1, 9],
[1, 9, 2, 7, 8, 4, 3, 5, 6],
[8, 7, 1, 2, 6, 3, 4, 9, 5],
[3, 2, 9, 4, 5, 7, 1, 6, 8],
[4, 6, 5, 9, 1, 8, 7, 2, 3],
[6, 1, 4, 3, 7, 9, 5, 8, 2],
[9, 8, 3, 1, 2, 5, 6, 7, 4],
[2, 5, 0, 8, 4, 6, 9, 3, 1]] # la seule matrice utilisé dans le programme.
afficherGrille(grille)
row = int(input("entrez votre choix de case ligne "))
col = int(input("entrez votre choix de case col "))
num = int(input("entrez votre choix de case num "))
if grille[row][col] == 0:
ajout = jouer(grille, row, col, num)
if ajout == True:
print("Bravo!!")
else:
print("Echec :(")
else:
print("Case deja rempli")
afficherGrille(grille)
if verifierGagner(grille) == True:
print("Bravo!! Vous avez gagne")
choix = -1
else:
print("Menu: 1- Commencer un nouveau jeu.")
print(" ", "2- Continuer le jeu.")
print(" ", "3- Quitter le jeu.")
choix = int(input("SVP entrez votre choix: 1, 2 ou 3: "))
if choix==3:
print("Au revoir")
def verifierLigne(grille, row, num):
'''
(list, int, int) -> Bool
Vérifier si la case à ajouter n'existe pas sur la ligne.
Preconditions: grille est une reference a une matrice 9x9 qui contient déja des nombres de 1 à 9
'''
for i in range(0,9):
if(grille[row][i]==num):
return False
break
return true
def verifierCol(grille, col, num):
'''
(list, int, int) -> Bool
Vérifier si la case à ajouter n'existe pas sur la colonne.
Preconditions: grille est une reference a une matrice 9x9 qui contient déja des nombres de 1 à 9
'''
for i in range(0,9):
if(grille[i][col]==num):
return False
break
return True
def verifierSousGrille(grille, row, col, num):
'''
(list, int, int) -> Bool
Vérifier si la case à ajouter n'existe pas sur la sous-grille.
Preconditions: grille est une reference a une matrice 9x9 qui contient déja des nombres de 1 à 9
'''
# A COMPLETER
def verifierGagner(grille):
'''(list) -> bool
* Preconditions: grille est une reference a une matrice 9x9 qui contient de nombres de 1 à 9
* Verifie si la grille est completement remplie.
'''
# A COMPLETER
def verifierValide(grille, row, col, num):
''' (list, int, int, int) -> bool
* verifie si le nombre proposé est bon sur la ligne et colonne et la sous-grille donné en parametre.
* Preconditions: tab est une reference a une matrice 9 x 9 qui contient des chiffres entre 1 et 9
'''
# A COMPLETER
Bon je reformule ma question.voici le code en question j'ai pu réussir à tout rempli mais le problème c'est que quand je l'exécute il ne m'affiche jamais bravo; c'est soit échec ou la case est déjà rempli.il y a un problème quelque part je sais pas. Tout aide est la bienvenue
from jeuSudoku import *
def afficherGrille(grille):
'''
(list) -> None
Affiche le grille de jeu Sudoku
Preconditions: grille est une reference a une matrice 9x9 qui contient déja des nombres de 1 à 9
'''
print(" ", end="")
col = 0
while col < len(grille):
print(col, end=" ")
col += 1
print()
row = 0
while row < len(grille):
print(row, end="")
col = 0
while col < len(grille[row]):
print(" ", grille[row][col], end="")
col += 1
print()
row += 1
def jouer(grille, row, col, num):
'''
(list, int, int, int) -> Bool
Jouer une étape de jeu Sudoku
Preconditions: grille est une réference sur une liste de 9x9 contient seulement des nombres
grille est modifié (un element est ajouté dans la grille) si la case est valide est correcte.
'''
if verifierValide(grille, row, col, num)== True:
ajout = True
else :
ajout = False
# Créer le tableau de jeu (9 x 9)
grille = [[5, 3, 8, 6, 9, 1, 0, 4, 7],
[7, 4, 6, 0, 3, 2, 8, 1, 9],
[1, 9, 2, 0, 8, 4, 3, 5, 6],
[8, 7, 1, 2, 6, 3, 4, 9, 5],
[3, 2, 9, 4, 5, 7, 1, 6, 8],
[4, 6, 5, 9, 1, 8, 7, 2, 3],
[0, 0, 4, 3, 7, 9, 5, 8, 2],
[9, 8, 3, 1, 0, 5, 6, 7, 4],
[2, 5, 0, 8, 4, 6, 9, 3, 1]] # la seule matrice utilisé dans le programme.
print("Menu: 1- Commencer un nouveau jeu.")
print(" ", "2- Continuer le jeu.")
print(" ", "3- Quitter le jeu.")
choix = int(input("SVP entrez votre choix: 1, 2 ou 3: "))
while choix < 3 and choix > 0:
if choix == 1:
# Créer le tableau de jeu (9 x 9)
grille = [[5, 3, 8, 6, 9, 1, 0, 4, 7],
[7, 4, 6, 5, 3, 2, 8, 1, 9],
[1, 9, 2, 7, 8, 4, 3, 5, 6],
[8, 7, 1, 2, 6, 3, 4, 9, 5],
[3, 2, 9, 4, 5, 7, 1, 6, 8],
[4, 6, 5, 9, 1, 8, 7, 2, 3],
[6, 1, 4, 3, 7, 9, 5, 8, 2],
[9, 8, 3, 1, 2, 5, 6, 7, 4],
[2, 5, 0, 8, 4, 6, 9, 3, 1]] # la seule matrice utilisé dans le programme.
afficherGrille(grille)
row = int(input("entrez votre choix de case ligne "))
col = int(input("entrez votre choix de case col "))
num = int(input("entrez votre choix de case num "))
if grille[row][col] == 0:
ajout = jouer(grille, row, col, num)
if ajout == True:
print("Bravo!!")
else:
print("Echec :(")
else:
print("Case deja rempli")
afficherGrille(grille)
if verifierGagner(grille) == True:
print("Bravo!! Vous avez gagne")
choix = -1
else:
print("Menu: 1- Commencer un nouveau jeu.")
print(" ", "2- Continuer le jeu.")
print(" ", "3- Quitter le jeu.")
choix = int(input("SVP entrez votre choix: 1, 2 ou 3: "))
if choix==3:
print("Au revoir")
def verifierLigne(grille, row, num):
'''
(list, int, int) -> Bool
Vérifier si la case à ajouter n'existe pas sur la ligne.
Preconditions: grille est une reference a une matrice 9x9 qui contient déja des nombres de 1 à 9
'''
for i in range(len(grille[0])):
if grille[row][i] == num:
return False
def verifierCol(grille, col, num):
'''
(list, int, int) -> Bool
Vérifier si la case à ajouter n'existe pas sur la colonne.
Preconditions: grille est une reference a une matrice 9x9 qui contient déja des nombres de 1 à 9
'''
for i in range(len(grille)):
if grille[i][col] == num:
return False
def verifierSousGrille(grille, row, col, num):
'''
(list, int, int) -> Bool
Vérifier si la case à ajouter n'existe pas sur la sous-grille.
Preconditions: grille est une reference a une matrice 9x9 qui contient déja des nombres de 1 à 9
'''
grille_x = row[1] // 3
grille_y = col[0] // 3
for i in range(grille_y*3, grille_y*3+3):
for j in range(grille_x*3, grille_x*3+3):
if grille[i][j] == num and (i,j) != grille :
return False
def verifierValide(grille, row, col, num):
''' (list, int, int, int) -> bool
* verifie si le nombre proposé est bon sur la ligne et colonne et la sous-grille donné en parametre.
* Preconditions: tab est une reference a une matrice 9 x 9 qui contient des chiffres entre 1 et 9
'''
if (verifierLigne(grille, row, num) and verifierCol(grille, col, num) and verifierSousGrille(grille, row, col, num))== False:
return True
def verifierGagner(grille):
'''(list) -> bool
* Preconditions: grille est une reference a une matrice 9x9 qui contient de nombres de 1 à 9
* Verifie si la grille est completement remplie.
'''
for i in grille :
if i == 0 :
return True
else :
return False
yg_be
Messages postés23476Date d'inscriptionlundi 9 juin 2008StatutContributeurDernière intervention20 février 20251 568
>
jason
17 nov. 2019 à 12:08
pourquoi fais-tu
import
en début?
tu as bien une petite idée d'où vient le problème, non? à quelle ligne devrait s'afficher "bravo"? dans quel cas "bravo" s'affiche-t'il?
il est souvent utile d'ajouter des
16 nov. 2019 à 16:35
17 nov. 2019 à 00:11
17 nov. 2019 à 03:45
17 nov. 2019 à 12:08
tu as bien une petite idée d'où vient le problème, non? à quelle ligne devrait s'afficher "bravo"? dans quel cas "bravo" s'affiche-t'il?
il est souvent utile d'ajouter des pour comprendre le comportement du programme.
17 nov. 2019 à 17:14