Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
DEEBOT T90 PRO OMNI abbina un sistema di aspirazione basato su tecnologia BLAST ad un rullo di lavaggio dei pavimenti dalla larghezza elevata, capace di trattare al meglio le superfici di casa minimizzando i tempi di lavoro. Un robot completo che riesce anche ad essere sottile e garantire automazione ed efficienza nelle operazioni di pulizia di casa
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo
Per diversi giorni il Galaxy S26 Ultra di Samsung è stato il nostro compagno di vita. Oltre alle conferme del colosso coreano come la qualità del display e una suite AI senza rivali, arriva il Privacy Display, un unicum nel mondo smartphone. Ci sono ancora alcuni gap che non sono riusciti a colmare lato batteria e fotocamera, seppur con alcuni miglioramenti.
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Diablo II Resurrected: il nuovo DLC Reign of the Warlock
Abbiamo provato per voi il nuovo DLC lanciato a sorpresa da Blizzard per Diablo II: Resurrected e quella che segue è una disamina dei nuovi contenuti che abbiamo avuto modo di sperimentare nel corso delle nostre sessioni di gioco, con particolare riguardo per la nuova classe dello Stregone
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-10-2008, 12:15   #1
88MIKI88
Member
 
L'Avatar di 88MIKI88
 
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
[Python] - Esercizio da principiante

Esercizio: scrivi una funzione chiamata Istogramma che prende una lista ed il numero di intervalli da considerare e ritorna l'istogramma della distribuzione dei valori per ciascun intervallo.

Codice:
def istogramma(Lista,N_INT):
    L_INT = [0] * N_INT
    for i in Lista:
         Indice = int(i * N_INT)
         L_INT[Indice] = L_INT[Indice] + 1 
    print L_INT

Io l'esercizio l'ho risolto così sta di fatto che non appena faccio partire la funzione mi da un'errore del genere:
Codice:
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    istogramma()
  File "C:\Documents and Settings\MICHELE\Desktop\Copia di Intervall_V2.py", line 7, in istogramma
    L_INT[Indice] = L_INT[Indice] + 1
IndexError: list index out of range
__________________
------------------------------------------------------------------------------------------------------------
Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3
IPHONE 3GS 16GB BLACK
MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD
------------------------------------------------------------------------------------------------------------
88MIKI88 è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2008, 13:28   #2
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16214
Quote:
Originariamente inviato da 88MIKI88 Guarda i messaggi
Codice:
    for i in Lista:
         Indice = int(i * N_INT)
         L_INT[Indice] = L_INT[Indice] + 1
Lista può essere una lista di qualsiasi cosa, quindi non sai bene quale valore assumerà int(i * N_INT).
Più semplicemente, puoi dire al programma di leggere da Lista tanti elementi quanto è lunga Lista:
Codice:
    for i in range(len(Lista)):
         Indice = Lista[i]
EDIT: ah, no, aspetta, i valori sono in intervalli... aspetta che ci penso...
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu

Ultima modifica di Ziosilvio : 25-10-2008 alle 13:30.
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2008, 14:06   #3
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16214
Allora, la cosa è in generale abbastanza complicata.

Se gli intervalli sono equispaziati, allora hai un insieme di valori compresi tra a incluso e b=a+N*h incluso, dove h è l'ampiezza dell'intervallo.
Devi quindi trasformare l'intervallo [a,b) nell'intervallo [0,N) preservando l'ordine, e questo lo puoi fare mandando il valore x che leggi dalla lista, nel valore y = (x-a)/h.
Allora i è la parte intera di y (il massimo intero che non supera y), ossia int(y).

Se gli intervalli non sono equispaziati, allora devi trovare l'intervallo "buono" mediante una serie di confronti.
Dovrebbe essere possibile farlo tramite una variante dell'algoritmo di ricerca binaria, che però adesso non ho voglia di cercare.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2008, 23:43   #4
88MIKI88
Member
 
L'Avatar di 88MIKI88
 
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
Io l'esercizio l'ho risolto così sta di fatto che non appena faccio partire la funzione mi da un'errore del genere:
Codice:
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    istogramma()
  File "C:\Documents and Settings\MICHELE\Desktop\Copia di Intervall_V2.py", line 7, in istogramma
    L_INT[Indice] = L_INT[Indice] + 1
IndexError: list index out of range
[/quote]

L'errore l'ho capito ho provato a creare una lista di nr. random e non da errore.....
L'errore si crea ogni volta che usiamo numeri superiori allo 0.99 in quanto l'indice che viene generato esce dalla lista
__________________
------------------------------------------------------------------------------------------------------------
Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3
IPHONE 3GS 16GB BLACK
MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD
------------------------------------------------------------------------------------------------------------
88MIKI88 è offline   Rispondi citando il messaggio o parte di esso
Old 27-10-2008, 13:01   #5
88MIKI88
Member
 
L'Avatar di 88MIKI88
 
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
Un input per procedere??
__________________
------------------------------------------------------------------------------------------------------------
Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3
IPHONE 3GS 16GB BLACK
MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD
------------------------------------------------------------------------------------------------------------
88MIKI88 è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2008, 14:48   #6
Ziosilvio
Moderatore
 
L'Avatar di Ziosilvio
 
Iscritto dal: Nov 2003
Messaggi: 16214
Quote:
Originariamente inviato da 88MIKI88 Guarda i messaggi
L'errore si crea ogni volta che usiamo numeri superiori allo 0.99 in quanto l'indice che viene generato esce dalla lista
Allora bisogna sicuramente imporre un controllo per assicurarsi che l'indice calcolato sia sensato.
Dopodiché le cose da fare possono essere tante, a me viene in mente di creare la lista con un elemento in più dove segnare le istanze che causano un indice troppo grande.
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" Chi scherza col fuoco si brucia.
Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici
REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu
Ziosilvio è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2008, 21:04   #7
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da 88MIKI88 Guarda i messaggi
Io l'esercizio l'ho risolto così sta di fatto che non appena faccio partire la funzione mi da un'errore del genere:
Codice:
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    istogramma()
  File "C:\Documents and Settings\MICHELE\Desktop\Copia di Intervall_V2.py", line 7, in istogramma
    L_INT[Indice] = L_INT[Indice] + 1
IndexError: list index out of range
L'errore l'ho capito ho provato a creare una lista di nr. random e non da errore.....
L'errore si crea ogni volta che usiamo numeri superiori allo 0.99 in quanto l'indice che viene generato esce dalla lista[/quote]

Posta la lista di numeri random. Ogni volta che usi numeri superiori allo 0.99 dove?

Comunque per essere un libro per principianti questo capitolo è abbastanza complesso, soprattutto per uno come me che la matematica nemmeno la toccava al liceo
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2008, 22:11   #8
88MIKI88
Member
 
L'Avatar di 88MIKI88
 
Iscritto dal: Dec 2007
Città: .......
Messaggi: 188
Quote:
Originariamente inviato da ~FullSyst3m~ Guarda i messaggi
L'errore l'ho capito ho provato a creare una lista di nr. random e non da errore.....
L'errore si crea ogni volta che usiamo numeri superiori allo 0.99 in quanto l'indice che viene generato esce dalla lista
Quote:
Posta la lista di numeri random. Ogni volta che usi numeri superiori allo 0.99 dove?

Comunque per essere un libro per principianti questo capitolo è abbastanza complesso, soprattutto per uno come me che la matematica nemmeno la toccava al liceo
Prendi il programma che genera numeri casuali e tira fuori una lista di numeri.....se tu prendi valori dall'1 in su viene dato errore
__________________
------------------------------------------------------------------------------------------------------------
Intel Core 2 Duo 2.66Ghz - 3gb Ram - Hard Disk 250gb - Scheda Video: GeForce 8500 Gt da 512mb - Windows Xp Pro SP3
IPHONE 3GS 16GB BLACK
MACBOOK PRO 15,4" 2.40GHz - 4GB RAM 320GB HD
------------------------------------------------------------------------------------------------------------
88MIKI88 è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2008, 23:56   #9
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da 88MIKI88 Guarda i messaggi
Prendi il programma che genera numeri casuali e tira fuori una lista di numeri.....se tu prendi valori dall'1 in su viene dato errore
In che senso se prendi valori dall'1 in su?

Il programma è questo:


Codice:
def ListaCasuale (Lungh):
    s = [0] * Lungh
    for i in range(Lungh):
        s[i] = random.random ()
    return s
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2008, 08:36   #10
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Il problema è dovuto a questo int(i * N_INT) ovviamente.

Ora il punto è che i è un elemento della lista, e se N_INT rappresenta il numero di elementi della lista, mi pare normale che se i >= 1.0 ti tenterà di accedere a un elemento fuori dalla lista.

Bisogna assicurarsi che i sia sempre < 1.0, e questo la funzione random.random lo garantisce.
__________________
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2008, 08:52   #11
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Il problema è dovuto a questo int(i * N_INT) ovviamente.

Ora il punto è che i è un elemento della lista, e se N_INT rappresenta il numero di elementi della lista, mi pare normale che se i >= 1.0 ti tenterà di accedere a un elemento fuori dalla lista.

Bisogna assicurarsi che i sia sempre < 1.0, e questo la funzione random.random lo garantisce.
Ma perchè questo limite dell'1.0? Cioè, se io ho i e lo moltiplico ciclicamente ad 8 ad esempio, perchè dovrebbe accedere ad un elemento fuori dalla lista? Dove è imposto il limite di 1.0?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2008, 10:39   #12
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Molto semplice. Supponiamo che tu abbia 8 elementi nella lista, e ci sia un elemento pari a 1.0.

int(1.0 * 8) = 8 quindi dovrei accedere all'elemento di indice 8. Ma in una lista gli elementi partono da 0, per cui gli indici variano sempre da 0 a 7. Se provi ad accedere a quello di indice 8 sollevi un'eccezione, appunto.
__________________
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2008, 13:05   #13
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Molto semplice. Supponiamo che tu abbia 8 elementi nella lista, e ci sia un elemento pari a 1.0.

int(1.0 * 8) = 8 quindi dovrei accedere all'elemento di indice 8. Ma in una lista gli elementi partono da 0, per cui gli indici variano sempre da 0 a 7. Se provi ad accedere a quello di indice 8 sollevi un'eccezione, appunto.
A questo c'ero arrivato pure io, infatti l'ho pure scritto nell'altro topic mi sembra. Quello che non mi è chiaro è quell'i, cioè il valore di i attraversa tutta la lunghezza, per non fare uscire l'indice fuori dal limite allora i dovrebbe attraversare la lista di numeri casuali generata con random.random. O no?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2008, 14:02   #14
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
"i" è semplicemente l'elemento della lista, per cui dipende strettamente da come è stato generato. Se con random.random, allora è garantito essere < 1.0, per cui problemi non dovrebbe darli (posto che N_INT sia effettivamente il numero di elementi della lista).
__________________
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2008, 14:50   #15
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
"i" è semplicemente l'elemento della lista, per cui dipende strettamente da come è stato generato. Se con random.random, allora è garantito essere < 1.0, per cui problemi non dovrebbe darli (posto che N_INT sia effettivamente il numero di elementi della lista).
Bè se i attraversa la Lista si sa come è generato. Per generarlo con random.random si dovrebbe scrivere una cosa del tipo = i = random.random ()?

P.S: che significa posto che N_INT sia effettivamente il numero di elementi della lista? Se come valore metto 8 sono sicuro che gli elementi sono quelli. O sbaglio?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 29-10-2008, 21:50   #16
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Quote:
Originariamente inviato da ~FullSyst3m~ Guarda i messaggi
Bè se i attraversa la Lista si sa come è generato.
"i" non attraversa la lista: è un suo elemento.
Quote:
Per generarlo con random.random si dovrebbe scrivere una cosa del tipo = i = random.random ()?
Per generare una lista di 8 numeri random io farei così:
Codice:
Lista = [random.random() for i in range(8)]
Quote:
P.S: che significa posto che N_INT sia effettivamente il numero di elementi della lista? Se come valore metto 8 sono sicuro che gli elementi sono quelli. O sbaglio?
Sei sicuro se e solo se hai generato una lista di 8 elementi.

Oppure se hai passato len(Lista) come N_INT.
__________________
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2008, 01:36   #17
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
"i" non attraversa la lista: è un suo elemento.

Per generare una lista di 8 numeri random io farei così:
Codice:
Lista = [random.random() for i in range(8)]
Sei sicuro se e solo se hai generato una lista di 8 elementi.

Oppure se hai passato len(Lista) come N_INT.
Si scusa, volevo dire che è un suo elemento che cambia ad ogni ciclo. Se genero una lista di 8 numeri casuali come hai scritto tu dovrei essere abbastanza sicuro non credi?
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2008, 08:24   #18
cdimauro
Senior Member
 
L'Avatar di cdimauro
 
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
Certamente.
__________________
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
cdimauro è offline   Rispondi citando il messaggio o parte di esso
Old 30-10-2008, 08:43   #19
~FullSyst3m~
Senior Member
 
L'Avatar di ~FullSyst3m~
 
Iscritto dal: Mar 2007
Messaggi: 4683
Quote:
Originariamente inviato da cdimauro Guarda i messaggi
Certamente.
Ok. Comunque anche se hai detto che posso andare avanti appena finisco l'altro esercizio dei numeri casuali provo a ragionare su questo codice dell'istogramma
__________________
Firma eliminata e avatar cambiato. Troppa gente giudica il monaco dall'abito.
~FullSyst3m~ è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Deep Tech Revolution: così Area Science Park apre i laboratori alle startup Deep Tech Revolution: così Area Science P...
HP OMEN MAX 16 con RTX 5080: potenza da desktop replacement a prezzo competitivo HP OMEN MAX 16 con RTX 5080: potenza da desktop ...
NVIDIA porta l'AI nello spazio: presenta...
NVIDIA Vera: la CPU per l'AI agentica pr...
Dell rinnova la sua gamma di workstation...
NVIDIA DLSS 5 arriverà in autunno...
Intel Xeon 6 con P-core è la CPU ...
Telepass e TIM: la mobilità integ...
Deep Tech Revolution: le cinque startup ...
Leapmotor, sostenuta da Stellantis, ragg...
Isar Aerospace e Astroscale stringono un...
Donut Lab, test di ricarica con Verge TS...
Polestar, arriva un nuovo finanziamento ...
Friggitrice ad aria, tutto quello che de...
BYD lancia la nuova campagna per il bran...
Samsung Galaxy Book4 in offerta: portati...
HONOR MagicPad 4: più sottile, pi...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:16.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v