Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme dans le jeu de la vie

    31 décembre 2016 à 16:11:22

    Bonjour,pourriez m'aider à trouver ce qui ne fonctionne pas dans mon programme. Les états des cellules ne changent pas comme il le faudrait.(essayer par vous meme). Merci

    def plateau(n):
        plateau=[]
        ligne=0
        for i in range(0,n):
            lst=[]
            for y in range(0,n):
                lst.append(False)
            plateau.append(lst)
        return plateau
    
    
    def affichage_texte(plateau):
        affichage=""
        for i in range(len(plateau)):
            case=plateau[i]
            for y in range(len(case)):
                booleen=case[y]
                if booleen==False:
                    case[y]='X'
                else:
                    case[y]='o'
        for w in plateau :
            for x in w:
                affichage+= x
                affichage+= " "
            affichage+= "\n"
        print(affichage)
    
        
           
    def coordonnées_cellulev(plateau):
        cellulev=[]
        n=int(input('Combien de cellule vivante, voulez-vous initialiser? '))
        if n>0 and n<=len(plateau)**2:
            print('x et y doivent etre compris entre 0 et',len(plateau)-1)
            for i in range(n):
                x_coord=int(input('abscisse de la celulle vivante: '))
                y_coord=int(input('ordonnée de la celulle vivante: '))
                while x_coord>len(plateau)-1 or x_coord<0 or y_coord>len(plateau)-1 or y_coord<0 :
                    print('Les coordonnées sont pas sur le plateau ! x et y doivent etre compris entre 0 et',len(plateau)-1)
                    x_coord=int(input('abscisse de la celulle vivante: '))
                    y_coord=int(input('ordonnée de la celulle vivante: '))
                coord=(x_coord,y_coord)
                cellulev.append(coord)
            return cellulev
        else:
            print('pas de cellule vivante initialisée')
            print()
            return False
    
    
    
    def placement_cellulev(coordonnées_cellulesv,plateau):
            for i in coordonnées_cellulesv:
                x=i[0]
                y=i[1]
                plateau[x][y]=True
    
    
    def voisin(plateau):
        voisintotal=[]
        for i in range(len(plateau)):
            ligne=plateau[i]
            for y in range(len(ligne)):
                voisin=[]
                ligne=plateau[i]
                if i==0:
                    if y==0:
                        voisin.append(ligne[y+1])
                        ligne=plateau[i+1]
                        voisin.append(ligne[y])
                        voisin.append(ligne[y+1])
                    elif 0<y<len(ligne)-1:
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y+1])
                        ligne=plateau[i+1]
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y])
                        voisin.append(ligne[y+1])
                    else:
                        voisin.append(ligne[y-1])
                        ligne=plateau[i+1]
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y])
                    voisintotal.append(voisin)
                if 0<i<len(plateau)-1:
                    if y==0:
                        ligne=plateau[i-1]
                        voisin.append(ligne[y])
                        voisin.append(ligne[y+1])
                        ligne=plateau[i]
                        voisin.append(ligne[y+1])
                        ligne=plateau[i+1]
                        voisin.append(ligne[y])
                        voisin.append(ligne[y+1])
                    elif 0<y<len(ligne)-1:
                        ligne=plateau[i-1]
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y])
                        voisin.append(ligne[y+1])
                        ligne=plateau[i]
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y+1])
                        ligne=plateau[i+1]
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y])
                        voisin.append(ligne[y+1])
                    else:
                        ligne=plateau[i-1]
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y])
                        ligne=plateau[i]
                        voisin.append(ligne[y-1])
                        ligne=plateau[i+1]
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y])
                    voisintotal.append(voisin)
                elif i==len(plateau)-1:
                    if y==0:
                        ligne=plateau[i-1]
                        voisin.append(ligne[y])
                        voisin.append(ligne[y+1])
                        ligne=plateau[i]
                        voisin.append(ligne[y+1])
                    elif 0<y<len(ligne)-1:
                        ligne=plateau[i-1]
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y])
                        voisin.append(ligne[y+1])
                        ligne=plateau[i]
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y+1])
                    else:
                        ligne=plateau[i-1]
                        voisin.append(ligne[y-1])
                        voisin.append(ligne[y])
                        ligne=plateau[i]
                        voisin.append(ligne[y-1])
                    voisintotal.append(voisin)
        return voisintotal
                        
                        
    def itérations(plateau,voisin,n):
        x=0
        for k in range(n-1):
            for i in plateau:
                for y in range(len(i)):
                        if x<=len(voisin)-1:
                            voisinage=voisin[x]
                        x+=1
                        compteur=0
                        for z in range(len(voisinage)):
                            if voisinage[z]==True:
                                compteur+=1
                        if compteur<2:
                            i[y]=False
                        elif compteur==2:
                            i[y]=i[y]
                        elif compteur==3:
                            i[y]=True
                        elif compteur<3:
                            i[y]=False
                affichage_texte(plateau)
                
                
                    
            
            
    def jeu():
        plat=plateau(3)
        coordonnées_cellulesv=coordonnées_cellulev(plat)
        if coordonnées_cellulesv!=False:
            placement_cellulev(coordonnées_cellulesv,plat)
        voisinage=voisin(plat)
        n=int(input('Saisir le nombre d’itérations: '))
        print()
        affichage_texte(plat)
        itérations(plat,voisinage,n)
    
    jeu()
        
        



    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      31 décembre 2016 à 18:44:33

      Salut,

      Déjà je te conseillerai d'éviter d'utiliser des accents dans tes codes sources (sauf si ces accents sont stockés dans des chaines de caractères ou des strings, vu qu'en python, l'interpréteur supporte l'UTF-8).

      C'est une mauvaise pratique qui peut, entre autres, t'amener à des erreurs si ton fichier n'est pas encodé dans le bon format (Latin-1 / UTF-8 par exemple, conflit pouvant être rencontré assez simplement sous windows).

      Heureusement pour toi l'interpréteur python 3 supporte pleinement l'UTF-8.

      Sinon, qu'est ce qui ne va pas ?

      • Partager sur Facebook
      • Partager sur Twitter
        1 janvier 2017 à 19:24:42

        D'accord, j'éviterais d'en utiliser maintenant. Y'a un probleme au niveau des itérations, le programme affiche correctement les deux premieres itérations et affiche constamment la deuxieme itérations par la suite..
        • Partager sur Facebook
        • Partager sur Twitter
          1 janvier 2017 à 20:40:56

          Est ce que tu peux expliquer ce que fait ta fonction voisin ? elle me semble très compliqué...  ainsi que : N'oublie pas que l'état n+1 ne dépends pas que du nombre de voisin vivant à l'état n, mais aussi de l'état de la cellule à l'état n. 

          if compteur<2:
          i[y]=False
          elif compteur==2:
          i[y]=i[y]
          elif compteur==3:
          i[y]=True
          elif compteur<3:
          i[y]=False
          • Partager sur Facebook
          • Partager sur Twitter
            1 janvier 2017 à 22:30:29

            J'ai trouvé le probleme de mon programme. Il faut enfaite modifé la fonction affichage_texte. Comment effectuer une copie d'une liste sans qu'elle se modifie par la suite en modifiant sa copie? J'ai essayé ça mais ça marche pas. merci.
            def affichage_texte(plateau):
                affichage=""
                intermediaire=list(plateau)
                for i in range(len(intermediaire)):
                    case=intermediaire[i]
                    for y in range(len(case)):
                        booleen=case[y]
                        if booleen==False:
                            case[y]='X'
                        else:
                            case[y]='o'
                for w in intermediaire :
                    for x in w:
                        affichage+= x
                        affichage+= " "
                    affichage+= "\n"
                print(affichage)
            

            -
            Edité par lasyvegasy 2 janvier 2017 à 13:16:58

            • Partager sur Facebook
            • Partager sur Twitter

            Probleme dans le jeu de la vie

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown