Aide puissance 4 simple verif colonne

Résolu/Fermé
m4tts - Modifié le 20 janv. 2022 à 16:34
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 - 20 janv. 2022 à 18:27
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:

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
A voir également:

2 réponses

mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752
Modifié le 20 janv. 2022 à 18:27
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 écris
for i in range(n)
, tu itères de
0
inclue à
n
exclu avec un pas de
1
, donc sur les valeurs
0, 1 ..., n -1
.

De plus, vu que tu connais
for
et
range
, tu devrais l'utiliser à la place de ta boucle
while
, ce serait plus élégant. Généralement les indices sont notés
i
et
j
(
i
pour les lignes de la matrices,
j
pour les indices de la colonne). En tout cas, ce que tu appelles
c
n'est pas adéquat, car ce n'est pas un indice de colonne mais de ligne. Donc si tu veux utiliser
i
et
c
, 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 non
True
ou
False
), 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
1
yg_be Messages postés 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
20 janv. 2022 à 16:43
Pour remplacer
while c < len(grille) - 3:

par un for, je suggère plutôt:
for c in range(len(grille)-3):

et pas
for c in range(len(grille)-2): 
0
mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 752 > yg_be Messages postés 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024
Modifié le 20 janv. 2022 à 18:28
Merci pour tes remarques yg_be, j'ai corrigé le message précédent en conséquence. Cette correction est importante car sinon, la boucle telle qu'elle était écrite pouvait sortir hors de la grille et faire planter le programme.
0
yg_be Messages postés 22779 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 12 mai 2024 1 481
20 janv. 2022 à 16:34
bonjour,
il y a une petite erreur en ligne 4: affiche peut-être les valeurs de i pour t'aider à comprendre.
0