IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Matrice carrée problème


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut Matrice carrée problème
    Bonjour, je suis un petit nouveau dans le monde de la programmation. Python est mon premier langage dans la matière.

    Alors voila: dans le cadre d'un mini projet, je dois construire et afficher un labyrinthe sous forme de matrice carrée, et ensuite remplir l'intérieur du labyrinthe de façon aléatoire grâce à une donnée entrée par l'utilisateur.

    Je dois donc avoir quelque chose qui ressemble à ceci:

    1 1 1 1 1
    1 0 0 0 1
    1 0 0 0 1
    1 0 0 0 1
    1 1 1 1 1

    J'arrive à afficher ceci:

    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0
    0 0 0 0 0

    grâce a ce bout de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    lab = [[0 for i in range(5)] for j in range(5)]
        for i in range(n):
            for j in range(n):
                print lab[i][j],
            print
    Mais je n'arrive pas a remplacer mes zéros pour arriver au résultat montré en premier.

    J'ai déjà essayé pas mal de trucs mais apparemment je dois mal comprendre comment ca fonctionne!

    Si quelqu'un pouvait m'éclairer un peu la dessus ca m'aiderait beaucoup!
    Merci.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Une des solutions possibles:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    n = 5
    lab = []
    for i in range(n):
        lab.append([])
        for j in range(n):
            if i==0 or i==n-1 or j==0 or j==n-1:
                lab[-1].append(1)
            else:
                lab[-1].append(0)
     
    for i in range(n):
        for j in range(n):
            print lab[i][j],
        print
     
    1 1 1 1 1
    1 0 0 0 1
    1 0 0 0 1
    1 0 0 0 1
    1 1 1 1 1
    Tyrtamos

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut
    Merci beaucoup pour la réponse rapide et précise, c'est exactement ça!

    Si j'ai encore une question je reviendrai

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2010
    Messages : 4
    Par défaut
    Au risque de paraître ridicule, je pose une dernière question.

    J'ai donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    def creer_labyrinthe(n,m):
        lab = []
        for i in range(n):
            lab.append([])
            for j in range(n):
                if i==0 or i==n-1 or j==0 or j==n-1:
                    lab[-1].append('x')
                else:
                    lab[-1].append(' ')
     
     
        for i in range(n):
             for j in range(n):
     
                 print lab[i][j],
             print
        res = ''
        return res
     
     
     
     
     
     
    dimension = raw_input("Donnez la dimension n du labyrinthe: \n")
    n = int(dimension)
     
    murs = raw_input("Donnez le nombre m de murs interieurs: \n")
    m = int(murs)
     
    print "Voici un tel labyrinthe:"
     
    print creer_labyrinthe(n,m)
    m étant le nombre de murs disposés de façon aléatoire à l'intérieur du labyrinthe. Il ne me manque plus que ça...Mais je n'y arrive pas plus

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    Bonjour,

    Tout d'abord, tu ferais mieux de restructurer un peu ton code, en séparant la création du labyrinthe et son affichage en deux fonctions:
    - la fonction creer_labyrinthe devrait retourner le labyrinthe créé (liste lab)
    - une fonction afficher_labyrinthe qui reçoit le labyrinthe en argument et l'affiche.

    Pour la création de murs aléatoires, j'imagine que tu penses à quelque chose comme ceci (en pseudo-code):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Répéter m fois:
      Répéter:
        choisir deux nombres (x et y) aléatoirement entre 1 et (n-2) inclus
      Tant qu il y a déjà un mur en lab[x][y]
      Mettre un mur en lab[x][y]
    Pour les nombres aléatoires, il y a la fonction randint du module random.

    Ce qui est un peu gênant avec l'algorithme ci-dessus, c'est que le nombre d'étapes n'est pas borné.

    Cet autre algorithme ne présente pas ce problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Créer la liste des coordonnées de toutes les cases du labyrinthe:
      [(1,1), (1,2), .., (1,n-2), (2,1), .., (2,n-2), .., (n-2,n-2)].
    Mélanger cette liste (fonction shuffle du module random)
    Extraire les m premiers éléments de la liste mélangée et
      mettre un mur à ces coordonnées
    Les deux algorithmes sont équivalents au niveau du résultat, mais risquent de créer des zones déconnectées l'une de l'autres.
    Pour éviter cela il existe d'autres algorithmes, permettant de créer des labyrinthes "parfaits", mais ils sont un peu plus complexes...

  6. #6
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonsoir,

    Citation Envoyé par dividee Voir le message
    il existe d'autres algorithmes, permettant de créer des labyrinthes "parfaits"
    Un exemple ou des liens ?

    Bon code.

Discussions similaires

  1. Liste des sous-matrices carrées
    Par potimarara dans le forum Algorithmes et structures de données
    Réponses: 8
    Dernier message: 12/10/2006, 18h30
  2. Calculer le determinant d'une matrice carrée
    Par NThierry dans le forum C
    Réponses: 15
    Dernier message: 27/08/2006, 11h31
  3. Diagonales de matrices carrées
    Par samtheh dans le forum Mathématiques
    Réponses: 9
    Dernier message: 08/02/2006, 09h19
  4. Sous matrice carrée d'une matrice carrée
    Par devils55 dans le forum C++
    Réponses: 2
    Dernier message: 13/11/2005, 19h07
  5. Initialisation d'une matrice carrée (malloc...)
    Par kilinette dans le forum C
    Réponses: 4
    Dernier message: 17/10/2005, 19h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo