Créer un module

Résolu
qwerty_azerty Messages postés 6 Statut Membre -  
jisisv Messages postés 3678 Statut Modérateur -
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

  1. _Ritchi_ Messages postés 21130 Date d'inscription   Statut Contributeur Dernière intervention   6 135
     
    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
    0
    1. qwerty_azerty Messages postés 6 Statut Membre
       
      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 !
      0
    2. _Ritchi_ Messages postés 21130 Date d'inscription   Statut Contributeur Dernière intervention   6 135
       
      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
      0
    3. qwerty_azerty Messages postés 6 Statut Membre
       
      Wouaw c'est impressionnant, merci beaucoup je comprends beaucoup mieux le fonctionnement de certaines fonctions maintenant ^^
      0
  2. jisisv Messages postés 3678 Statut Modérateur 936
     
    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.
    0