Automates de Wolfram

Reprendre le code :

# https://scienceetonnante.com/2013/10/28/les-automates-cellulaires-elementaires/

from PIL import Image


def creation_image(largeur,hauteur):
    image = Image.new('RGB', (largeur,hauteur), (255,255,255))
    # on met en noir le pixel du milieu de la première ligne
    image.putpixel((largeur//2,0),(0,0,0))
    image.save("MonImage.png", "PNG")
    return image

image=creation_image(501,250)

def regle_en_binaire(entier):
    '''
    creation de la regle à partir d'un nbre entier
    entier : int entre 0 et 255
    return : tuple de longueur 8 donnant l'ecriture binaire de l'entier
    >>>regle_en_binaire(12)
    (0, 0, 0, 0, 1, 1, 0, 0)
    >>>regle_en_binaire(128)
    (1, 0, 0, 0, 0, 0, 0, 0)
    '''
    

def lecture_bloc_centre_pixel(img,x,y):
    '''
    déterminer le nombre associé à un bloc de 3 pixels centré sur celui
    de coordonnées (x,y) 
    en le convertissant en binaire
    '''
    pixel1=(img.getpixel((x-1,y))==(0,0,0))
    pixel2=(img.getpixel((x,y))==(0,0,0))
    pixel3=(img.getpixel((x+1,y))==(0,0,0))
    return pixel1*4+pixel2*2+pixel3
    

def evolution(regle):
    '''
    applique l'evolution selon la regle fixée
    '''
    
    regle_bin=regle_en_binaire(regle)
    global image
    image_retour=image.copy()
    l,h=image.size
    for y in range(h-1):
        for x in range(1,l-1):
            bloc=lecture_bloc_centre_pixel(image_retour,x,y)
            resultat_evol=regle_bin[7-bloc]
            if resultat_evol==1:
                image_retour.putpixel((x,y+1),(0,0,0))
    image_retour.show()
    image_retour.save("regle"+str(regle)+".png", "PNG")
    
                    
                   

et compléter la fonction regle_en_binaire().
Tester ensuite votre programme avec la commande evolution(126) par exemple.