no way to compare when less than two revisions
Différences
Ci-dessous, les différences entre deux révisions de la page.
— | teaching:progappchim:grille_configurations_melange_binaire_2013 [2013/11/29 11:05] (Version actuelle) – créée villersd | ||
---|---|---|---|
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> | ||
+ | # | ||
+ | # -*- 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 " | ||
+ | def buttonClick(): | ||
+ | #Effacement de la grille précédente | ||
+ | c.delete(ALL) | ||
+ | # | ||
+ | nbLig = int(eLig.get()) | ||
+ | nbCol = int(eCol.get()) | ||
+ | nb1 = int(e1.get()) | ||
+ | # | ||
+ | draw(nbLig, nbCol, nb1) | ||
+ | | ||
+ | #Sélection nombre de lignes | ||
+ | Label(root, text=" | ||
+ | eLig = Entry(root) | ||
+ | eLig.pack() | ||
+ | eLig.insert(0, | ||
+ | #Sélection nombre de colonnes | ||
+ | Label(root, text=" | ||
+ | eCol = Entry(root) | ||
+ | eCol.pack() | ||
+ | eCol.insert(0, | ||
+ | #Sélection nombre de 1 | ||
+ | Label(root, text=" | ||
+ | e1 = Entry(root) | ||
+ | e1.pack() | ||
+ | e1.insert(0, | ||
+ | |||
+ | #Bouton de génération de la grille avec le nombre de lignes, colonnes et de 1 sélectionnés | ||
+ | b = Button(root, | ||
+ | b.pack() | ||
+ | |||
+ | c = Canvas(root, | ||
+ | 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/ | ||
+ | cellWidth = int(sideLength/ | ||
+ | #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' | ||
+ | # par intervalles de cellHeight (sideLength/ | ||
+ | #- Tracer une ligne partant de la coordonnée (start, y) à la coordonnée (end, y) | ||
+ | for y in range(start, | ||
+ | c.create_line(start, | ||
+ | |||
+ | #Tracer les lignes verticales | ||
+ | #- Déplacer le x de la coordonnée de départ (start) jusqu' | ||
+ | # par intervalles de cellWidth (sideLength/ | ||
+ | #- Tracer une ligne partant de la coordonnée (x, start) à la coordonnée (x, end) | ||
+ | for x in range(start, | ||
+ | c.create_line(x, | ||
+ | |||
+ | #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/ | ||
+ | y = start+int(cellHeight/ | ||
+ | |||
+ | #Prendre tous les éléments du tableau un par un | ||
+ | #i contient l' | ||
+ | #val contient l' | ||
+ | for i, val in enumerate(table): | ||
+ | #Ecrire 1 ou 2 au milieu de la case (coordonnée (w, h)) | ||
+ | c.create_text(x, | ||
+ | |||
+ | #Prendre le modulo (reste de la division entière) de l' | ||
+ | #- 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/ | ||
+ | y = y + cellHeight | ||
+ | else: | ||
+ | x = x + cellWidth | ||
+ | |||
+ | #Calcul du nombre d' | ||
+ | # | ||
+ | nbrEtats = int(math.factorial(size)/ | ||
+ | c.create_text(50, | ||
+ | |||
+ | root.mainloop() | ||
+ | |||
+ | </ |