| 
 | |||||||
| 
 | 
|  | 
|  | 
|  | Strumenti | 
|  20-12-2008, 13:02 | #1 | |
| Senior Member Iscritto dal: Dec 2007 
					Messaggi: 505
				 | 
				
				[python]Problemi con istogrammi
			 
		Sto leggendo il libro Pensare Da Informatico e non ho capito bene cosa bisogna fare nell'esercizio del capitolo 9 paragrafo 9.8.Ecco il link:http://www.python.it/doc/Howtothink/...-it/chap09.htm L'esercizio è questo: Quote: 
   
				__________________ Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG Non ricordo niente ma non lo dimenticherò mai | |
|   |   | 
|  20-12-2008, 13:51 | #2 | 
| Senior Member Iscritto dal: Oct 2001 
					Messaggi: 11471
				 | 
		Devi mostrare a video un istogramma dei dati. Hai già tutto quello che ti serve per generare i dati casuali, dividerli in intervalli e contarli. Devi solo disegnare a video il grafico.
		 | 
|   |   | 
|  20-12-2008, 14:05 | #3 | |
| Senior Member Iscritto dal: Dec 2007 
					Messaggi: 505
				 | Quote: 
 Però non riesco a quale parte di codice sostituisce questo: Codice: NumIntervalli = 8 Conteggio = [0] * NumIntervalli for i in Lista: Indice = int(i * NumIntervalli) Conteggio[Indice] = Conteggio[Indice] + 1 
				__________________ Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG Non ricordo niente ma non lo dimenticherò mai | |
|   |   | 
|  20-12-2008, 15:15 | #4 | 
| Senior Member Iscritto dal: Dec 2007 
					Messaggi: 505
				 | 
		Il risultato è questo ma è impossibile: Codice: 
import random
def Crea_Lista(lung):
    lista=[0]*lung
    for i in range(8):
        lista[i]=random.random
    
    return lista
def NellIntervallo(Lista,LimiteSuperiore,LimiteInferiore):
    Conteggio=0
    for N in Lista:
        if LimiteInferiore<N<LimiteSuperiore:
            Conteggio=Conteggio+1
    return Conteggio
def Istogramma(Lista,inte):
    amp=1.0/inte
    for i in range(inte):
        LimiteInferiore=i*amp
        LimiteSuperiore=LimiteInferiore+amp
        print  LimiteInferiore,NellIntervallo(Lista,LimiteSuperiore,LimiteInferiore),LimiteSuperiore
Istogramma(Crea_Lista(8),8)
				__________________ Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG Non ricordo niente ma non lo dimenticherò mai | 
|   |   | 
|  20-12-2008, 15:27 | #5 | 
| Senior Member Iscritto dal: Dec 2007 
					Messaggi: 505
				 | 
		ecco ho risolto: Codice: import random
def Crea_Lista(lung):
    lista=[0]*lung
    for i in range(8):
        lista[i]=random.random()
   
    return lista
def NellIntervallo(Lista,LimiteSuperiore,LimiteInferiore):
    Conteggio=0
    for N in Lista:
        if LimiteInferiore<N<LimiteSuperiore:
            Conteggio=Conteggio+1
    return Conteggio
def Istogramma(inte):
    amp=1.0/inte
    for i in range(inte):
     LimiteInferiore=i*amp
     LimiteSuperiore=LimiteInferiore+amp
     print LimiteInferiore,'\t',NellIntervallo(Crea_Lista(8),LimiteSuperiore,LimiteInferiore),'\t',LimiteSuperiore
Istogramma(8)Codice: 0.0 2 0.125 0.125 2 0.25 0.25 0 0.375 0.375 2 0.5 0.5 1 0.625 0.625 3 0.75 0.75 1 0.875 0.875 0 1.0 
				__________________ Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG Non ricordo niente ma non lo dimenticherò mai | 
|   |   | 
|  20-12-2008, 16:01 | #6 | 
| Senior Member Iscritto dal: Oct 2001 
					Messaggi: 11471
				 | 
		L'output non è che assomigli molto ad un istogramma   Invece dei due valori dovresti stampare il valore centrale dell'intervallo e al posto del numero una colonna con altezza proporzionale al numero di elementi al suo interno. | 
|   |   | 
|  20-12-2008, 19:42 | #7 | 
| Senior Member Iscritto dal: Dec 2007 
					Messaggi: 505
				 | 
		
mmm...non capisco proprio cosa devo stampare.Il valore centrale dell'intervallo cos'è Conteggio???
		 
				__________________ Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG Non ricordo niente ma non lo dimenticherò mai | 
|   |   | 
|  20-12-2008, 19:48 | #8 | 
| Senior Member Iscritto dal: Oct 2001 
					Messaggi: 11471
				 | 
		È semplicemente la media dei due estremi dell'intervallo.
		 | 
|   |   | 
|  20-12-2008, 19:49 | #9 | 
| Senior Member Iscritto dal: Oct 2001 
					Messaggi: 11471
				 | 
		Poi ho notato solo ora che crei ogni volta una nuova lista di numeri casuali che è semplicemente assurdo.
		 | 
|   |   | 
|  20-12-2008, 19:56 | #10 | 
| Senior Member Iscritto dal: Dec 2007 
					Messaggi: 505
				 | 
		La salvo in una variabile.In realtà l'avevo già fatto ma non avevo postato.Però il punto ora è come creare sto isogramma non è che puoi farmi un disegnino??
		 
				__________________ Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG Non ricordo niente ma non lo dimenticherò mai | 
|   |   | 
|  20-12-2008, 20:02 | #11 | 
| Senior Member Iscritto dal: Oct 2001 
					Messaggi: 11471
				 | 
		Da wikipedia:  Come suggerimento. Fai le barre orizzontali, e ripassa l'operatore * per le stringhe. | 
|   |   | 
|  20-12-2008, 20:09 | #12 | 
| Senior Member Iscritto dal: Dec 2007 
					Messaggi: 505
				 | 
		Siamo come prima.Una cosa tipo questa: 7 6 5 4 3 2 1 intervallo1 intervallo 2 intervallo 3 
				__________________ Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG Non ricordo niente ma non lo dimenticherò mai Ultima modifica di MasterDany : 20-12-2008 alle 20:33. | 
|   |   | 
|  22-12-2008, 10:55 | #13 | 
| Senior Member Iscritto dal: Dec 2007 
					Messaggi: 505
				 | 
		FullSystem gentilmente mi ha fornito un codice: Codice: import random
def lista_casuale(l):
        lista = [0] * l  # crea una lista di "l" elementi piena di zeri
        for i in range(l): # qui ciclo per "l" volte coì posso scrivere su tutti gli elementi della lista appena creata
                lista[i] = random.random() # genero un numero casuale e lo metto nella lista
        return lista # ritorno la lista a chi mi a chiamato
def dividi_in_barre(lista, n):
        barre = [0] * n # crea una lista di "n" elementi che rappresentano le barre dell'istogramma
        for x in lista: # ciclo per tutti numeri casuali presenti nella lista
                barre[int(x * n)] += 1 # calcolo che indice ha la barra che contiene il numero casuale x e poi incremento di uno il valore della barra
        return barre # ritorna la lista delle barre
def istogramma(lista, n):
        barre = dividi_in_barre(lista, n) # divide la lista di numeri random in "n" barre dell'istogramma
        for barra in barre: # ciclo per ogni barra presente nell'istogramma
                print barra, "x" * barra # stampa il numero di elementi e poi una "x" ripetuta tante volte quanti sono i numeri di elementi presenti in quella barra
lista = lista_casuale(100)
istogramma(lista, 10)La cosa che mi rimaneva più difficile era la funzione dividi_in barre che secondo me fa questo: Moltiplicano il numero degli intervalli per gli elementi della lista otteniamo un numero compreso fra 0.0 e il numero degli intervalli. Con int() lo arrotondiamo per difetto e questo numero corrisponde all'indice dove cade il valore. Infine la funzione istogramma stampa l'inervallo nel quale cade un determinato valore e quante volte è presente un determinato valore. Però mi è rimasto un dubbio perchè +1?? Codice: barre[int(x * n)] += 1 
				__________________ Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG Non ricordo niente ma non lo dimenticherò mai | 
|   |   | 
|  22-12-2008, 10:58 | #14 | 
| Senior Member Iscritto dal: Dec 2007 
					Messaggi: 505
				 | 
		Ho capito  Codice: barre[int(x * n)] += 1 
				__________________ Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG Non ricordo niente ma non lo dimenticherò mai | 
|   |   | 
|  24-12-2008, 14:13 | #15 | 
| Senior Member Iscritto dal: Jan 2002 Città: Germania 
					Messaggi: 26110
				 | 
		Purtroppo continuo ad avere poco tempo, ma vedo che la mia assenza, al contrario, porta buoni frutti. E' sempre meglio sbattere la testa da soli nei problemi che si incontrano, anziché ricorrere all'aiuto di terzi. Quindi il mio consiglio è di provare a perderci un po' di tempo, e soltanto dopo un po', se proprio non si riesce a cavare un ragno dal buco, chiedere qualche suggerimento (ma NON la soluzione). 
				__________________ Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys | 
|   |   | 
|  24-12-2008, 17:48 | #16 | |
| Senior Member Iscritto dal: Dec 2007 
					Messaggi: 505
				 | Quote: 
   
				__________________ Giochi:Fallout 3,Civilitation IV,Call of Duty-World at War,Far Cry 2,Crysis,Age of Empires III. BLOG Non ricordo niente ma non lo dimenticherò mai | |
|   |   | 
|   | 
| Strumenti | |
| 
 | 
 | 
Tutti gli orari sono GMT +1. Ora sono le: 00:52.









 
		 
		 
		 
		









 
  
 



 
                        
                        










