Créer un module [Résolu/Fermé]

Signaler
Messages postés
5
Date d'inscription
mercredi 14 décembre 2016
Statut
Membre
Dernière intervention
6 juillet 2017
-
Messages postés
3644
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
-
bonjour,
pour un DM en ISN je dois générer un module de 5 lignes et 5 colonnes avec des 0 ou 1 aléatoirement. Puis le créer un algorithme qui repère combien de fois trois 1 sont alignés horizontalement, verticalement et en diagonale.
par exemple sur une ligne : [0,1,1,1,0] on comptera 1
pour l'instant voila ce que j'ai fais:
from random import randint
L=[[randint(0,1) for i in range(5)]for j in range(5)]
for ligne in L:
    print(ligne)

nb_align_h=0



for i in range(0) :
    for j in range (0) :
                    if ligne[i][j]+ligne[i][j+1]+ligne[i][j+2]==3:
                     nb_align_h=nb_align_h+1
for i in range(1) :
    for j in range (0) :
                    if ligne[i][j]+ligne[i][j+1]+ligne[i][j+2]==3:
                     nb_align_h=nb_align_h+1
for i in range(2) :
    for j in range (0) :
                    if ligne[i][j]+ligne[i][j+1]+ligne[i][j+2]==3:
                     nb_align_h=nb_align_h+1
for i in range(3) :
    for j in range (0) :
                    if ligne[i][j]+ligne[i][j+1]+ligne[i][j+2]==3:
                     nb_align_h=nb_align_h+1
for i in range(4) :
    for j in range (0) :
                    if ligne[i][j]+ligne[i][j+1]+ligne[i][j+2]==3:
                     nb_align_h=nb_align_h+1



for j in range(0) :
    for i in range (0) :
                    if ligne[i][j]+ligne[i+1][j]+ligne[i+2][j]==3:
                     nb_align_h=nb_align_h+1
for j in range(1) :
    for i in range (0) :
                    if ligne[i][j]+ligne[i+1][j]+ligne[i+2][j]==3:
                     nb_align_h=nb_align_h+1
for j in range(2) :
    for i in range (0) :
                    if ligne[i][j]+ligne[i+1][j]+ligne[i+2][j]==3:
                     nb_align_h=nb_align_h+1
for j in range(3) :
    for i in range (0) :
                    if ligne[i][j]+ligne[i+1][j]+ligne[i+2][j]==3:
                     nb_align_h=nb_align_h+1
for j in range(4) :
    for i in range (0) :
                    if ligne[i][j]+ligne[i+1][j]+ligne[i+2][j]==3:
                     nb_align_h=nb_align_h+1


print(nb_align_h)


mais lla variable nb_align_h reste toujours à 0, je pense que le problème est au niveau de iet de j
Merci pour votre réponse
EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

Messages postés
19228
Date d'inscription
samedi 17 mars 2007
Statut
Contributeur
Dernière intervention
1 juin 2020
4 713
Bonjour

Deux remarques:
1- range(0) retoune [] donc tu ne rentres dans aucune de tes boucles...

2- ligne n'est pas la bonne variable pour désigner le contenu de ton module de 5 lignes sur 5 colonnes

Bonnes Fêtes de Fin d'Année
Ritchi
Messages postés
5
Date d'inscription
mercredi 14 décembre 2016
Statut
Membre
Dernière intervention
6 juillet 2017

Merci beaucoup !!!! Mon professeur nus avait pourtant bien spécifié qu'il fallait commencer à 0, mais j'ai essayé et ça marche encore merci tu me sauves la vie ^^
Bonnes Fêtes de Fin d'Année !
Messages postés
19228
Date d'inscription
samedi 17 mars 2007
Statut
Contributeur
Dernière intervention
1 juin 2020
4 713
Bonjour,

Voici de quoi faire les vérifications horizontales, verticales et horizontales pour chercher trois 1 consécutifs.

from random import randint

L = [[randint(0, 1) for i in range(5)] for j in range(5)]
for ligne in L:
    print(ligne)

nb_align_h = 0
nb_align_v = 0
nb_align_d1 = 0
nb_align_d2 = 0

# check horizontal:
for i in range(5):
    for j in range(0,3):
        if L[i][j] + L[i][j+1] + L[i][j+2] == 3:
            print("Trois 1 en i=%s j=%s (horizontal)" %( i, j))
            nb_align_h = nb_align_h + 1

# check vertical:
for i in range(0,3):
    for j in range(5):
        if L[i][j] + L[i+1][j] + L[i+2][j] == 3:
            print("Trois 1 en i=%s j=%s (vertical)" %( i, j))
            nb_align_v = nb_align_v + 1

# check diagonal gauche vers droite:
for i in range(0,3):
    for j in range(0,3):
        if L[i][j] + L[i+1][j+1] + L[i+2][j+2] == 3:
            print("Trois 1 en i=%s j=%s (horizontale 1)" %( i, j))
            nb_align_d1 = nb_align_d1 + 1

# check diagonal droite vers gauche:
for i in range(0,3):
    for j in range(2,5):
        if L[i][j] + L[i+1][j-1] + L[i+2][j-2] == 3:
            print("Trois 1 en i=%s j=%s (horizontale 2)" %( i, j))
            nb_align_d2 = nb_align_d2 + 1

print("\nIl y a :")
print("- %s combinaisons avec trois 1 en horizontal" % (nb_align_h))
print("- %s combinaisons avec trois 1 en vertical" % (nb_align_v))
print("- %s combinaisons avec trois 1 en diagonal 1" % (nb_align_d1))
print("- %s combinaisons avec trois 1 en diagonal 2" % (nb_align_d2))





Voici un exemple de résultat affiché:



[0, 1, 0, 0, 1]
[1, 1, 1, 1, 0]
[1, 0, 1, 0, 0]
[1, 1, 1, 1, 1]
[1, 1, 1, 1, 0]
Trois 1 en i=1 j=0 (horizontal)
Trois 1 en i=1 j=1 (horizontal)
Trois 1 en i=3 j=0 (horizontal)
Trois 1 en i=3 j=1 (horizontal)
Trois 1 en i=3 j=2 (horizontal)
Trois 1 en i=4 j=0 (horizontal)
Trois 1 en i=4 j=1 (horizontal)
Trois 1 en i=1 j=0 (vertical)
Trois 1 en i=1 j=2 (vertical)
Trois 1 en i=2 j=0 (vertical)
Trois 1 en i=2 j=2 (vertical)
Trois 1 en i=1 j=1 (horizontale 1)
Trois 1 en i=2 j=0 (horizontale 1)
Trois 1 en i=0 j=4 (horizontale 2)
Trois 1 en i=1 j=3 (horizontale 2)
Trois 1 en i=2 j=2 (horizontale 2)

Il y a :
- 7 combinaisons avec trois 1 en horizontal
- 4 combinaisons avec trois 1 en vertical
- 2 combinaisons avec trois 1 en diagonal 1
- 3 combinaisons avec trois 1 en diagonal 2



Bonnes Fêtes de Fin d'Année
Ritchi
Messages postés
5
Date d'inscription
mercredi 14 décembre 2016
Statut
Membre
Dernière intervention
6 juillet 2017

Wouaw c'est impressionnant, merci beaucoup je comprends beaucoup mieux le fonctionnement de certaines fonctions maintenant ^^
Messages postés
3644
Date d'inscription
dimanche 18 mars 2001
Statut
Modérateur
Dernière intervention
15 janvier 2017
881
Et puisque ta matrice est formée exclusivement de 0 et 1, pourquoi faire des tests avec comparaison ?
Il suffit d'additionner les éléméns de chaque ligne, colonne....
A moins que tu ne veuilles modifier tes hypothèses par la suite bien sûr.
Dans ce cas une classe appropriée serait plus souple.