Outils pour utilisateurs

Outils du site


teaching:progappchim:grille_configurations_melange_binaire_2013

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

teaching:progappchim:grille_configurations_melange_binaire_2013 [2013/11/29 11:05] (Version actuelle)
villersd créée
Ligne 1: Ligne 1:
 +====== Création d'une grille et de configurations d'un système binaire modélisé ======
  
 +<sxh python; title : grille_configurations_melange_binaire.py>​
 +#​!/​usr/​bin/​env python
 +# -*- coding: utf-8 -*-
 +# travail de ML et MP, ba2 chimie 2012-2013
 +# Création d'une grille et de configurations d'un système binaire modélisé
 +
 +from Tkinter import *
 +import math
 +import random
 +
 +root = Tk()
 +
 +#Fonction appelée lors du clic sur le bouton "​Rafraichir"​
 +def buttonClick():​
 +    #Effacement de la grille précédente
 +    c.delete(ALL)
 +    #​Récupération des informations dans les différents champs
 +    nbLig = int(eLig.get())
 +    nbCol = int(eCol.get())
 +    nb1 = int(e1.get())
 +    #​Regénération de la nouvelle grille
 +    draw(nbLig, nbCol, nb1)
 +    ​
 +#Sélection nombre de lignes
 +Label(root, text="​Nombre de lignes :"​).pack()
 +eLig = Entry(root)
 +eLig.pack()
 +eLig.insert(0,​ "​4"​)
 +#Sélection nombre de colonnes
 +Label(root, text="​Nombre de colonnes :"​).pack()
 +eCol = Entry(root)
 +eCol.pack()
 +eCol.insert(0,​ "​4"​)
 +#Sélection nombre de 1
 +Label(root, text="​Nombre de 1 :"​).pack()
 +e1 = Entry(root)
 +e1.pack()
 +e1.insert(0,​ "​8"​)
 +
 +#Bouton de génération de la grille avec le nombre de lignes, colonnes et de 1 sélectionnés
 +b = Button(root,​ text="​Rafraichir la grille",​ command=buttonClick)
 +b.pack()
 +
 +c = Canvas(root,​ width=600, height=600)
 +c.pack()
 +
 +#Fonction de génération de la grille
 +# nbLig: nombre de lignes
 +# nbCol: nombre de colonnes
 +# nb1: nombre de 1
 +def draw(nbLig, nbCol, nb1):
 +    #Taille de la grille
 +    size = nbLig*nbCol
 +
 +    #Le traçage de la grille démarrera à la coordonnée (start, start)
 +    #ses côtés seront de longueur sideLength
 +    #Le point de fin d'une ligne sera donc de start+sideLength+1 (+1 afin de voir le contour de la grille)
 +    start = 50
 +    sideLength = 400
 +    end = start+sideLength+1
 +    cellHeight = int(sideLength/​nbLig)
 +    cellWidth = int(sideLength/​nbCol)
 +    #Tableaux de 1 et de 2
 +    table = [1]*nb1
 +    table2 = [2]*(size-nb1)
 +    #Fusionner le tableau de 1 avec le tableau de 2 et les réordonner de manière aléatoire
 +    table.extend(table2)
 +    random.shuffle(table)
 +
 +    #Dessiner la grille
 +    #Tracer les lignes horizontales
 +    #- Déplacer le y de la coordonnée de départ (start) jusqu'​à la coordonnée de fin (end)
 +    #  par intervalles de cellHeight (sideLength/​nbLig)
 +    #- Tracer une ligne partant de la coordonnée (start, y) à la coordonnée (end, y)
 +    for y in range(start,​ end, cellHeight):​
 +        c.create_line(start,​ y, end, y, fill="​blue"​)
 +
 +    #Tracer les lignes verticales
 +    #- Déplacer le x de la coordonnée de départ (start) jusqu'​à la coordonnée de fin (end)
 +    #  par intervalles de cellWidth (sideLength/​nbCol)
 +    #- Tracer une ligne partant de la coordonnée (x, start) à la coordonnée (x, end)
 +    for x in range(start,​ end, cellWidth):
 +        c.create_line(x,​ start, x, end, fill="​blue"​)
 +
 +    #Remplir la grille de 1 et de 2 (présents dans le tableau)
 +    #Le milieu de la 1ère case se trouve aux coordonnées suivantes:
 +    x = start+int(cellWidth/​2)
 +    y = start+int(cellHeight/​2)
 +
 +    #Prendre tous les éléments du tableau un par un
 +    #i contient l'​index du tableau (1 -> size)
 +    #val contient l'​élément présent dans le tableau (1 ou 2)
 +    for i, val in enumerate(table):​
 +        #Ecrire 1 ou 2 au milieu de la case (coordonnée (w, h))
 +        c.create_text(x,​ y, text=str(val))
 +
 +        #Prendre le modulo (reste de la division entière) de l'​index i+1/nbCol (i+1 le tableau démarre à 0)
 +        #- Si = 0, il faut passer à la ligne suivante et revenir à la première colonne
 +        #- Sinon, il faut juste passer à la colonne suivante
 +        if (i+1) % nbCol == 0:
 +            x = start+int(cellWidth/​2)
 +            y = y + cellHeight
 +        else:
 +            x = x + cellWidth
 +
 +#Calcul du nombre d'​états possibles
 +    #​N!/​N1!(N-N1)!
 +    nbrEtats = int(math.factorial(size)/​(math.factorial(nb1)*math.factorial(size-nb1)))
 +    c.create_text(50,​ 500, text="​Nombre d'​états possibles: " + str(nbrEtats),​ anchor="​w"​)
 +
 +root.mainloop()
 +
 +</​sxh>​
teaching/progappchim/grille_configurations_melange_binaire_2013.txt · Dernière modification: 2013/11/29 11:05 par villersd