begin process at 2010 07 29 15:48:23
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Graphique

 > HISTOGRAMME ALÉATOIRE

HISTOGRAMME ALÉATOIRE


 Description

Cliquez pour voir la capture en taille normale
Cette source est issue d'un exercice tiré du livre "Apprendre à programmer avec Python" de Gérard Swinnen et a pour but de vérifier la bonne distribution aléatoire des chiffres entre 0 et 1 via la fonction random().

Source

  • # -*- coding: cp1252 -*-
  • #################################################
  • #*****Utilisation de la bibliothèque random*****#
  • #***************Version 1.1*********************#
  • #*************Par Bastelmann********************#
  • #***************29/10/2008**********************#
  • #################################################
  • from random import *
  • from Tkinter import *
  • #################################################
  • #***********Définition des fonctions************#
  • #################################################
  • def liste_alea(n):
  • """génere une liste aléatoire"""
  • s=[]
  • for i in range(n):
  • s.append(random())
  • return s
  • def imprime_liste(nom_liste):
  • """Imprime la liste passée en argument"""
  • for i in range(len(nom_liste)):
  • print nom_liste[i]
  • def creation_liste_compteurs(nb_fractions=10):
  • """crée la liste de compteurs suivant le nombre de fractions demandé"""
  • liste_compteurs=[]
  • for a in (range(nb_fractions)):
  • liste_compteurs.append([a,0])
  • return liste_compteurs
  • def generation(nombre=1000):
  • """Génere la séquence de chiffres de longueur demandée pas l'utilisateur"""
  • s=[]
  • for i in range(nombre):
  • s.append([0,random()])
  • return s
  • def calcul_frequence(liste,total):
  • """calcule les fréquences respectives des différentes fractions"""
  • liste_freq=[]
  • indiq_freq=0
  • while indiq_freq<len(liste):
  • liste_freq.append(int((len(liste)*50)*liste[indiq_freq][1])/(total*1.0))
  • indiq_freq=indiq_freq+1
  • return liste_freq
  • def affiche_frequence(liste_frequence,canevas):
  • """Représente les fréquences en histogramme sur le canevas"""
  • liste_couleur=["black","green","violet","yellow","purple","blue","red"]
  • indiq_freq=0
  • while indiq_freq<len(liste_frequence):
  • couleur=liste_couleur[randint(0,6)]
  • canevas.create_rectangle(20*indiq_freq+1,100,20*indiq_freq+20,100-liste_frequence[indiq_freq],fill=couleur)
  • indiq_freq=indiq_freq+1
  • def bouton_affiche_frequence():
  • """Change la couleur de l'histogramme lorsqu'on clique sur le bouton"""
  • affiche_frequence(histo,can)
  • #################################################
  • #**********Début du programme général***********#
  • #################################################
  • try :
  • nombre=raw_input("Combien de nombres générés souhaitez vous? ")#On demande à l'utilisateur ses conditions
  • if nombre!='':#gestion des valeurs par défaut
  • nombre=int(nombre)
  • elif nombre=='':
  • nombre=10000
  • if nombre>1000000:
  • print "Le nombre choisi est trop grand"
  • quit()
  • nb_fraction=raw_input("En combien voulez vous partitionner l'intervalle [0,1] ?")
  • if nb_fraction !='':#gestion des valeurs par défaut
  • nb_fraction=int(nb_fraction)
  • elif nb_fraction =='':
  • nb_fraction=10
  • if nb_fraction>50:
  • print "Le nombre choisi est trop grand"
  • quit()
  • liste_test=generation(nombre)#on initialise les listes
  • compteurs=creation_liste_compteurs(nb_fraction)
  • c,a,fraction=0,0,1.0/nb_fraction#on initialise les compteurs
  • #################################################
  • #*********Traitement de la liste****************#
  • #################################################
  • while c <=1:
  • i=len(liste_test)-1
  • while i>=0:
  • if liste_test[i][0]==0:
  • if liste_test[i][1]>c and liste_test[i][1]<=(c+fraction):
  • compteurs[a][1]=compteurs[a][1]+1 #Si le chiffre appartient a l'intervalle sélectionné, on incrémente le compteur correspondant
  • liste_test[i][0]=1#On marque le chiffre comme déja traité
  • i=i-1
  • c=c+fraction#on passe à l'intervalle suivant
  • a=a+1
  • print "***************************************"
  • imprime_liste(compteurs)#On affiche le résultat
  • print "***************************************"
  • #################################################
  • #*********Initialisation de l'affichage*********#
  • #################################################
  • liste_couleur=["black","green","violet","yellow","purple","blue","red"]
  • fenetre=Tk()
  • fenetre.title("Histogramme des fréquences")
  • can=Canvas(fenetre, width =20*nb_fraction+1, height =100+1, bg ='white')
  • can.grid(row=1,column=1,columnspan=nb_fraction)
  • Button(fenetre,text="Quitter",command=fenetre.destroy).grid(row=3,column=1,columnspan=nb_fraction)
  • #################################################
  • #***********Affichage des fractions*************#
  • #################################################
  • a=1
  • while a<nb_fraction+1:
  • Label(fenetre,text=a).grid(row=2,column=a)
  • a=a+1
  • #################################################
  • #***********Affichage des fréquences************#
  • #################################################
  • histo=calcul_frequence(compteurs,nombre)
  • affiche_frequence(histo,can)
  • Button(fenetre,text="Couleur",command=bouton_affiche_frequence).grid(row=4,column=1,columnspan=nb_fraction)
  • fenetre.mainloop()
  • #################################################
  • #************Gestion des exceptions*************#
  • #################################################
  • except IndexError:
  • print "Erreur d'indexation de la liste"
  • except ValueError:
  • print "Vous n'avez pas rentré un chiffre correct"
  • except:
  • print "Erreur indéterminée"
# -*- coding: cp1252 -*-
#################################################
#*****Utilisation de la bibliothèque random*****#
#***************Version 1.1*********************#
#*************Par Bastelmann********************#
#***************29/10/2008**********************#
#################################################
from random import *
from Tkinter import *
#################################################
#***********Définition des fonctions************#
#################################################
def liste_alea(n):
    """génere une liste aléatoire"""
    s=[]
    for i in range(n):
        s.append(random())
    return s
def imprime_liste(nom_liste):
    """Imprime la liste passée en argument"""
    for i in range(len(nom_liste)):
        print nom_liste[i]
def creation_liste_compteurs(nb_fractions=10):
    """crée la liste de compteurs suivant le nombre de fractions demandé"""
    liste_compteurs=[]
    for a in (range(nb_fractions)):
        liste_compteurs.append([a,0])
    return liste_compteurs
def generation(nombre=1000):
    """Génere la séquence de chiffres de longueur demandée pas l'utilisateur"""
    s=[]
    for i in range(nombre):
        s.append([0,random()])
    return s
def calcul_frequence(liste,total):
    """calcule les fréquences respectives des différentes fractions"""
    liste_freq=[]
    indiq_freq=0
    while indiq_freq<len(liste):
        liste_freq.append(int((len(liste)*50)*liste[indiq_freq][1])/(total*1.0))
        indiq_freq=indiq_freq+1
    return liste_freq
def affiche_frequence(liste_frequence,canevas):
    """Représente les fréquences en histogramme sur le canevas"""
    liste_couleur=["black","green","violet","yellow","purple","blue","red"]
    indiq_freq=0
    while indiq_freq<len(liste_frequence):
        couleur=liste_couleur[randint(0,6)]
        canevas.create_rectangle(20*indiq_freq+1,100,20*indiq_freq+20,100-liste_frequence[indiq_freq],fill=couleur)
        indiq_freq=indiq_freq+1
def bouton_affiche_frequence():
    """Change la couleur de l'histogramme lorsqu'on clique sur le bouton"""
    affiche_frequence(histo,can)
#################################################
#**********Début du programme général***********#
#################################################
try :
    nombre=raw_input("Combien de nombres générés souhaitez vous? ")#On demande à l'utilisateur ses conditions
    if nombre!='':#gestion des valeurs par défaut
        nombre=int(nombre)
    elif nombre=='':
        nombre=10000
    if nombre>1000000:
        print "Le nombre choisi est trop grand"
        quit()
    nb_fraction=raw_input("En combien voulez vous partitionner l'intervalle [0,1] ?")
    if nb_fraction !='':#gestion des valeurs par défaut
        nb_fraction=int(nb_fraction)
    elif nb_fraction =='':
        nb_fraction=10
    if nb_fraction>50:
        print "Le nombre choisi est trop grand"
        quit()
    liste_test=generation(nombre)#on initialise les listes
    compteurs=creation_liste_compteurs(nb_fraction)
    c,a,fraction=0,0,1.0/nb_fraction#on initialise les compteurs
#################################################
#*********Traitement de la liste****************#
#################################################  
    while c <=1:
        i=len(liste_test)-1
        while i>=0:
            if liste_test[i][0]==0:
                if liste_test[i][1]>c and liste_test[i][1]<=(c+fraction):
                    compteurs[a][1]=compteurs[a][1]+1 #Si le chiffre appartient a l'intervalle sélectionné, on incrémente le compteur correspondant
                    liste_test[i][0]=1#On marque le chiffre comme déja traité
            i=i-1
        c=c+fraction#on passe à l'intervalle suivant
        a=a+1
    print "***************************************"
    imprime_liste(compteurs)#On affiche le résultat
    print "***************************************"
#################################################
#*********Initialisation de l'affichage*********#
#################################################
    liste_couleur=["black","green","violet","yellow","purple","blue","red"]
    fenetre=Tk()
    fenetre.title("Histogramme des fréquences")
    can=Canvas(fenetre, width =20*nb_fraction+1, height =100+1, bg ='white')
    can.grid(row=1,column=1,columnspan=nb_fraction)
    Button(fenetre,text="Quitter",command=fenetre.destroy).grid(row=3,column=1,columnspan=nb_fraction)

#################################################
#***********Affichage des fractions*************#
#################################################
    a=1
    while a<nb_fraction+1:
        Label(fenetre,text=a).grid(row=2,column=a)
        a=a+1
#################################################
#***********Affichage des fréquences************#
#################################################
    histo=calcul_frequence(compteurs,nombre)
    affiche_frequence(histo,can)
    Button(fenetre,text="Couleur",command=bouton_affiche_frequence).grid(row=4,column=1,columnspan=nb_fraction)
    fenetre.mainloop()
#################################################
#************Gestion des exceptions*************#
#################################################
except IndexError:
    print "Erreur d'indexation de la liste"
except ValueError:
    print "Vous n'avez pas rentré un chiffre correct"
except:
    print "Erreur indéterminée"

 Conclusion

J'attend vos remarques quant à cette source, qui je pense peut être améliorée.


 Sources du même auteur

DAMIER SIMPLE AVEC TKINTER

 Sources de la même categorie

Source avec Zip Source avec une capture PYGTK : CODES ET EXPLICATIONS POUR DÉBUTER par loloof64
TK_WATCH :HORLOGE GRAPHIQUE par afranck64
Source avec une capture DESSIN DE DÉS À ÉCHELLE VARIABLE SUR CANVAS par calogerogigante
BOITE DE CONNEXION USER/PASSWORD POUR PYTHON:TK_LOGIN par afranck64
Source avec Zip Source avec une capture CALCUL DE RÉSISTANCES par amaury74

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture CASSE BRIQUE par elnabo
Source avec Zip Source avec une capture ILLUSTRATION DE SINUS ET DE COSINUS par calogerogigante
Source avec Zip Source avec une capture EQUATION STANDARD DE LA DROITE par calogerogigante
Source avec Zip Source avec une capture I.A. (DÉBUTANT) par Rano Its
Source avec Zip CALCULATRICE SIMPLICISTE SOUS TKINTER par elnabo

Commentaires et avis

Commentaire de wkenw le 03/11/2008 09:40:40

Un des intérêts de Python est la concision.
Ainsi liste_alea(n) pourrait être remplacée par [random() for i in range(n)].
De même pour nombre d'autres fonctions dans ton code.

Commentaire de bastelmann le 16/11/2008 00:00:30

Il est vrai que l'on peut également procéder ainsi, mais une des consignes concernant la réalisation de cette fonction était d'utiliser la méthode append().
Et vu que je débute, je préfère bien détailler pour le moment, afin de pouvoir me relire plus facilement^^

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

scrollbar dans scrollbox avec TKinter [ par MHI ] Est-ce que quelqu'un sait comment ajouter les scrollbar à une scrollbox :J'ai essayé ceci :lstFile = Tkinter.Listbox(frmMain)lstFile.place(x = 20, y = checkButton avec TKinter [ par MHI ] comment faire pour tester si un checkButton est coché ? Probleme avec TKinter [ par titasse ] Bonjour, je debute en python. J'ai un probleme lorsque je veux importer TKinter avec la commande from TKinter import * j'ai le message suivant : Imp au sujet de Tkinter et le module turtle [ par nico1900 ] from turtle import *forward(120)left(90)&nbsp;color('red')&nbsp;forward(80)bon en fait je voulais tester le module turtle&nbsp;avec&nbsp;l e code ci-d Un Canvas comme dans Tkinter, mais pour wxPython [ par samurize ] Slt tout le monde. &nbsp; Voila tout est dans le titre (ou a peu pres&nbsp; ) : &nbsp; Je suis &#224; la recherche d'un module pouvant s'integrer da Taille de widgets sous Tkinter [ par Uims ] Bonjour, Quelqu"un saurait comment definir la taille d'un widgets sous tkinter??? Exemple: fen 1 = Tk(taille=600) J'espere que je me fait comprend Ouverture d'un fichier windows (avec Tkinter) [ par Uims ] Bonjour, Je travaille sous python et Tkinter et j'aurai voulu savoir comment dire a python de demarrer (comme on clique sur un fichier) une applicati Tkinter et Python [ par Telimektar1er ] Voila j'ai commenc&#233; e python il y a une semaine et jusqu &#224; aujourd'hui aucun probl&#232;me. Mais voil&#224;, je viens de commencer la cr&#23 help, faire un mastermind en python et en tkinter avant le 24 !!! [ par Crick132 ] je suis &#233;tudiante en 2&#232;me ann&#233;e, je dois r&#233;aliser un mastermind en python avec 8 couleurs et 5 combinaisons possibles.si quelqu'un Importer une image dans Tkinter... [ par skools ] Bonjour à tous, Et pardon à ceux à qui j'ai envoyé des messages perso, je n'arrivais pas à poster un suget dans le forum... Voilà, après des heures d


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,264 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales