Aide puissance 4 simple verif colonne
Résolu
Bonjour,
J'essaye de faire un puissance 4 en python.
Je n'ai que les bases, donc je ne peux utiliser que des commandes simples et basiques. Même si cela rallonge le code, ce n'est pas grave.
Je suis rendu au vérification des colonnes et j'ai écrit un programme qui est censé fonctionner or ce n'est pas le cas. Je demande votre aide car je vois pas de solution.
Voici le programme en question:
Je devrais avoir d'afficher dans ma console
Merci
J'essaye de faire un puissance 4 en python.
Je n'ai que les bases, donc je ne peux utiliser que des commandes simples et basiques. Même si cela rallonge le code, ce n'est pas grave.
Je suis rendu au vérification des colonnes et j'ai écrit un programme qui est censé fonctionner or ce n'est pas le cas. Je demande votre aide car je vois pas de solution.
Voici le programme en question:
def a_gagne_vert(grille, joueur):
c = 0
while c < len(grille) - 3:
for i in range(0, len(grille[0]) - 1):
if grille[c][i] == grille[c + 1][i] == grille[c + 2][i] == grille[c + 3][i] == joueur:
return True
c = c + 1
return False
print(
a_gagne_vert([
[2, 1, 1, 1, 2, 2],
[1, 1, 2, 2, 1, 2],
[1, 1, 2, 0, 0, 2],
[1, 1, 2, 2, 0, 2],
[0, 0, 0, 0, 0, 0]
],
2
))
Je devrais avoir d'afficher dans ma console
True, or c'est
False.
Merci
Configuration: Windows / Chrome 97.0.4692.71
2 réponses
-
Bonjour,
Merci d'utiliser les balises de codes dans tes prochains messages. Essaye aussi d'espacer ton code de sorte à te conformer aux recommandations PEP8 (espace derrière les virgules, espaces autour des opérateurs).
Ton bug est dû au fait que ton programme n'examine pas la dernière colonne. En effet, si tu écrisfor i in range(n)
, tu itères de0
inclue àn
exclu avec un pas de1
, donc sur les valeurs0, 1 ..., n -1
.
De plus, vu que tu connaisfor
etrange
, tu devrais l'utiliser à la place de ta bouclewhile
, ce serait plus élégant. Généralement les indices sont notési
etj
(i
pour les lignes de la matrices,j
pour les indices de la colonne). En tout cas, ce que tu appellesc
n'est pas adéquat, car ce n'est pas un indice de colonne mais de ligne. Donc si tu veux utiliseri
etc
, on aboutirait au code suivant :
def a_gagne_vertical(grille, joueur): for i in range(len(grille) - 3): for c in range(len(grille[0])): if grille[i][c] == grille[i + 1][c] == grille[i + 2][c] == grille[i + 3][c] == joueur: return True return False print( a_gagne_vertical([ [2, 1, 1, 1, 2, 2], [1, 1, 2, 2, 1, 2], [1, 1, 2, 0, 0, 2], [1, 1, 2, 2, 0, 2], [0, 0, 0, 0, 0, 0] ], 2 ))
Dernier point : Il faut être vigilant à ce que retourne un test d'égalité. En l'occurrence, python3 renvoie la valeur (et nonTrue
ouFalse
), ce qui signifie que lorsqu'un test d'égalité est évalue, on ne compare pas un booléen à une valeur de ta matrice. Donc c'est correct en python3, mais selon le langage, écrire un test ainsi peut ne pas marcher.
Bonne chance -
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
il y a une petite erreur en ligne 4: affiche peut-être les valeurs de i pour t'aider à comprendre.