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 :

jeu de la vie


Sujet :

Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 8
    Par défaut jeu de la vie
    Bonjour,

    Je bloque à la question 2 du jeu de la vie.

    j'en suis là pour définir une grille contenant des zéros :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def creation_grille_vide(nombreLignes, nombreColonnes):
        grid = [[]] * nombreLignes
        for ligne in range(nombreLignes):
            grid[ligne] = [0] * nombreColonnes
        return grid
    Ensuite, je bloque, il faut créer une fonction qui affiche la grille avec des cellules vivantes qui affiches v et les cellules mortes qui affiche -.
    J e débute et donc je galère, j'ai essayé d'aller un peu partout sur internet mais pas facile.
    Pourriez vous me guider s'il vous plaît?
    Merci
    SBO

  2. #2
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Cela manque de précisions tout ça.

    Ces cellules vivantes et morte sont elles-transmises ? Si oui, sous quelle forme ?
    Ces cellules vivantes et morte sont elles-calculée ? Si oui, en fonction de quoi ?
    Ces cellules vivantes et morte sont elles choisies au hasard ?

    La grille est-elle fourni ou doit-tu la créer ?

    Peux-tu montrer ce que tu as tenté ?

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 8
    Par défaut Précisions et tentatives
    bonjour,

    voici les précisions :
    pour savoir si une cellule est vivante à l'instant n, on compte le nb de cellules vivantes parmi les 8 voisines à l'instant n-1.
    A chaque étape n, l'état de chaque cellule ne dépend que de son état et de celui des cellules voisines à l étape n-1.

    Si le nb de cellules vivantes voisines est inférieur ou égal à 1 ou supérieur ou égal à 4 alors la cellule est morte à l'instant n, si le nb est égal à 3, alors la cellule est vivante à l'instantn, si le nb est égal à 2, alors la cellule ne change pas d'état par rapport à n-1.

    On doit travailler sur un plateau nxn avec n=10. Le plateau est codé par une listes d'entiers à 2 dimensions appelés grille. Les cellules vivantes ont pour valuer 1 et les mortes 0.
    Il n'a pas de grille type, juste un exemple.
    On nous demande d'abord de coder une fonction creer_geillevide qui donnera une liste et retournera une grille contenant des zéros: j'ai fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def creation_grille_vide(nombreLignes, nombreColonnes):
        grille = [[]] * nombreLignes
        for ligne in range(nombreLignes):
            grille[ligne] = [0] * nombreColonnes
        return grille
    Ensuite on demande une fonction affiche grille(grille : list) avec en paramètres une grille et les cellules representées afficheront v lorsqu'elles sont vivantes et - lorsqu'elles sont mortes.

    j'ai essayé ça (je sais c'est nul mais je débute):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def affiche_grille(grille):
        morte ='v'
        vivante='-'
        print(grille)
    puis il faudra créer une fonction initialisation aleatoire(grille:list) avec une liste d'entiers qui affecte des valeurs au hasard de 0 et 1 de façon equiprobable

    J'ai beaucoup cherché mais je sèche
    Merci encore
    SBO

  4. #4
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Donc, si j'ai bien compris, on te donne un grille avec la situation à l'instant T et tu dois rendre la même grille avec la situation à l'instant T+1.
    Et pour déterminer cette situation à T+1, il faut appliquer certaines conditions.

    Sur le principe, je ne vois rien de compliqué, il faut appliquer les conditions qu'on te donnes.
    Celles-ci :
    Si le nb de cellules vivantes voisines est inférieur ou égal à 1 ou supérieur ou égal à 4 alors la cellule est morte à l'instant n, si le nb est égal à 3, alors la cellule est vivante à l'instant n, si le nb est égal à 2, alors la cellule ne change pas d'état par rapport à n-1.
    Je te suggère, avant de commencer à coder, de poser les différents cas sur papier.
    De cette manière tu auras quelque chose de concret et ce sera plus facile à traduire en code.

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 8
    Par défaut suite
    Merci. c'est ce que j'ai fait avec l'exemple donnée dans l'exercice. J'ai compris le principe.
    J'ai trouvé des pistes mais je voulais faire étape par étape sans avancer jusqu'au bout si quelque chose ne fonctionnait pas. C'est pour cela que je vouslais de l'aide sur comment afficher les v et les - sur la grille avec une fonction. J'ai mis la question 3 parce que ça me paraissait bizarre de devoir définir les v et les - et ensuite faire un mode aléatoire d'attribution de la grille en repassant par des 0 et des 1

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 8
    Par défaut
    rebonjour,
    quand il demande :
    Ensuite on demande une fonction affiche grille(grille : list) avec en paramètres une grille

    j'imagine un début comme cela

    Code :

    def affiche_grille()

    mais je mets quoi dans les parenthèses ??

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1 541
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1 541
    Par défaut
    Ce qu'on te demande dans affiche_grille c'est d'afficher les cellules de la grille et d'afficher 'v' si elle est vivante (donc =1) ou '-' si elle est morte (=0)
    rien de plus ni de moins. Donc basiquement, brutalement, tu parcours la grille, tu regardes l'état de la cellule et tu affiches ou 'v' ou '-' pour la cellule en cours.
    Tips: regarde la doc de la fonction print et ses paramètres sep et end (surtout end je dirais)

    dans les parenthèses, comme indiqué dans l'énoncé, tu passes une grille (tu lui donnes le nom que tu veux, ça sera le nom utilisé en interne de la fonction
    Ensuite on demande une fonction affiche_grille(grille : list) avec en paramètres une grille et les cellules representées afficheront v lorsqu'elles sont vivantes et - lorsqu'elles sont mortes.

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 8
    Par défaut
    ça y est, je suis arrivée à créer une grille de 0, puis une grille avec les v et les - et ensuite créer une grille aléatoire à 50%.
    Je suis au point où tu expliquais comment compter les voisins mais j'ai cette erreur là et je ne comprends pas

    TypeError: object of type 'int' has no len()

    code :

    def une_etape(grille):
    print(creation_grille_vide(grille))
    for a in range(len(grille)):
    for b in range(len(i)):
    if grille[a][b]==0 and grille[a][b]==3:
    new[a][b]=1
    if grille[a][b]==1 and grille[a][b]==2:
    new[a][b]=1
    if grille[a][b]==1 and grille[a][b]==3:
    new[a][b]=1
    if grille[a][b]==1 and grille[a][b] > 3:
    new[a][b]=0
    if grille[a][b]==0 and grille[a][b]==3:
    new[a][b]=1

    Peux tu m'aiguiller?
    Merci

  9. #9
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Normal.
    range(len(grille)) va te créer une liste d'entier de 0 à n où n est la taille de ta grille-1.
    Donc for a in range(len(grille)) va boucler et a vaudra 0, puis 1, puis 2, jusqu'à n.
    Ce sont des entiers, et on ne peux pas utiliser len() sur un entier.

    En revanche, tu peux utiliser for a in grille:a représentera une ligne dans ta grille (donc à priori une autre liste).
    Et là tu pourra faire for b in a:b représentera une cellule.

  10. #10
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 8
    Par défaut
    Ok merci, j'ai corrigé mais ça me donne la même erreur pour
    if grille[a][b]==0 and grille[a][b]==3:

  11. #11
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Cela m'étonnerai beaucoup que tu reçoivent exactement la même erreur car ce code ne fait pas appel à len().

    Utilise la balise code (bouton avec le #).
    Là ton code n'est même pas indenté, et du coup on ne sait pas ce qu'il fait.

    Et puis, il n'y a rien qui te choques dans tes tests ?
    Comment grille[a][b] peut-il valoir 0 et 3 en même temps ?

    Edit :
    SI tu as remplacé tes boucles, par celles que je t'ai suggéré alors grille[a][b] n'a plus aucun sens puisque la valeur de ta cellule c'est b.
    D'où ton autre message d'erreur

  12. #12
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 8
    Par défaut
    dsl, peux tu me dire comment afficher sur la page de discussion le code avec les balises (quelqu'un de developpez.net ) me l'a corriger mais je ne sais pas le faire?

  13. #13
    Expert confirmé
    Avatar de popo
    Homme Profil pro
    Analyste programmeur Delphi / C#
    Inscrit en
    Mars 2005
    Messages
    2 972
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste programmeur Delphi / C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 2 972
    Par défaut
    Déjà expliqué
    Citation Envoyé par popo Voir le message
    Utilise la balise code (bouton avec le #).
    Edit :
    Egalement mentionné dans les règles du forum (que tu es sensé lire avant de poster):
    http://club.developpez.com/regles/#LIII-E

  14. #14
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2022
    Messages : 8
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    def une_etape(grille):
        print(creation_grille_vide(grille))
        for a in grille:
            for b in a:
                if grille[a][b]==0 :
                    new[a][b]=1
                if grille[a][b]==1 :
                    new[a][b]=1
                if grille[a][b] > 3:
                    new[a][b]=0
    J'ai essayé pour savoir si je n'avais pas la même erreur avant de rentrer dans la logique de l'exercice mais c'est toujours pareil

  15. #15
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par SBO06 Voir le message
    J'ai essayé pour savoir si je n'avais pas la même erreur avant de rentrer dans la logique de l'exercice mais c'est toujours pareil
    Pareil que quoi???

    Sinon quelques remarques
    • tu fais print(creation_grille_vide(grille)). Déjà je ne vois pas pourquoi une fonction de "création de truc" aurait besoin de recevoir "truc" en paramètre. Ben oui, puisqu'elle le crée, elle n'a pas besoin de le recevoir quoi (et puis en fait que reçoit-elle si le "truc" va être créé, il n'existe donc pas encore).
      Et surtout le fait que tu affiches ce que la fonction renvoie sans le récupérer pour t'en servir plus tard rend un peu la fonction inutile (ou du moins peu "primordiale") dans le programme. Ce qui laisse planer un doute sur ta logique interne
    • as-tu étudié le fonctionnement de la syntaxe for element in iterable ??? Parce que si oui, tu n'utiliserais pas ensuite "element" comme indice dudit itérable. Quand tu écris for a in grille, "a" n'est pas un indice donc grille[a] ça ne marche pas
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Problème jeu de la vie de Wolfram
    Par romromp dans le forum Pascal
    Réponses: 14
    Dernier message: 11/03/2007, 19h58
  2. algorithme d'évolution du "jeu de la vie" en caml
    Par nono88 dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 13/12/2006, 00h56
  3. Conway's life (jeu de la vie) pour images
    Par O( N ) dans le forum C
    Réponses: 1
    Dernier message: 26/09/2006, 02h13
  4. [Conception] Jeu de la vie
    Par deuscapser dans le forum Général Java
    Réponses: 16
    Dernier message: 09/03/2006, 12h47
  5. [VB] projet à réaliser: Jeu de la vie
    Par mauriiice dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 02/12/2005, 20h06

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