View Full Version : Programmazione con Python
nuvolare
31-03-2009, 20:54
Ciao a tutti, mi trovo alle prese con le classi ed oggetti di pyhton, utilizzo il pensare come libro.
Questo è il primo esempio.
class Punto:
P1.x = 3.0 #definisco la classe Punto
P1.y = 4.0 #definisco la varibile P1 e gli attributi
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
P1 = Punto()
print P1.x
print P1.y
Il libro mi specifica pure che la riga del print stampa (3.0, 4.0) e la riga seguente il valore 25.0 che è il risultato dell'operazione.
Quindi, a detta del libro, dovrebbe andare tutto bene, invece appena metto il codice su Terminale visualizzo :
class Punto:
P1.x = 3.0
P1.y = 4.0
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
(3.0, 4.0)
>>> P1 = Punto()
>>> print P1.x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Punto instance has no attribute 'x'
>>> print P1.y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Punto instance has no attribute 'y'
Cos'è che sbaglio?
~FullSyst3m~
31-03-2009, 21:02
Ciao a tutti, mi trovo alle prese con le classi ed oggetti di pyhton, utilizzo il pensare come libro.
Questo è il primo esempio.
class Punto:
P1.x = 3.0 #definisco la classe Punto
P1.y = 4.0 #definisco la varibile P1 e gli attributi
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
P1 = Punto()
print P1.x
print P1.y
Il libro mi specifica pure che la riga del print stampa (3.0, 4.0) e la riga seguente il valore 25.0 che è il risultato dell'operazione.
Quindi, a detta del libro, dovrebbe andare tutto bene, invece appena metto il codice su Terminale visualizzo :
class Punto:
P1.x = 3.0
P1.y = 4.0
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
(3.0, 4.0)
>>> P1 = Punto()
>>> print P1.x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Punto instance has no attribute 'x'
>>> print P1.y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Punto instance has no attribute 'y'
Cos'è che sbaglio?
Sbagli la stessa cosa dell'alto giorno: non puoi usare P1.x dentro la classe se P1 non lo hai referenziato. E il libro lo fa vedere chiaro:
class Punto:
pass
P1 = Punto()
P1.x = 10
P1.y = 11
E la stessa cosa vale per il resto del codice: non puoi usare P1 se non esiste.
cdimauro
31-03-2009, 21:05
Puoi postare il codice completo del libro, e dirmi che versione usi di Python?
Intanto ti dico che, giustamente, Python ti segnala che quell'istanza non possiede gli attribuiti x e y.
nuvolare
31-03-2009, 22:07
E il libro lo fa vedere chiaro:
class Punto:
pass
P1 = Punto()
P1.x = 10
P1.y = 11
E la stessa cosa vale per il resto del codice: non puoi usare P1 se non esiste.
Ma sul mio libro c'è scritto questo
class Punto: pass
P1 = Punto()
P1.x = 3.0
P1.y = 4.0
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
print P1.x
print P1.y
La versione di python che utilizzo è la 2.5.4 e se scrivo su IDLE ottengo:
class Punto:
P1.x = 3.0 #definisco la classe Punto
P1.y = 4.0 #definisco la varibile P1 e gli attributi
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
P1 = Punto()
print P1.x
print P1.y
SyntaxError: invalid syntax
Se invece scrivo su Terminale ottengo :
class Punto:
P1.x = 3.0 #definisco la classe Punto
P1.y = 4.0 #definisco la varibile P1 e gli attributi
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
(3.0, 4.0)
P1 = Punto()
print P1.x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Punto instance has no attribute 'x'
print P1.y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Punto instance has no attribute 'y'
~FullSyst3m~
31-03-2009, 22:17
Ma sul mio libro c'è scritto questo
class Punto: pass
P1 = Punto()
P1.x = 3.0
P1.y = 4.0
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
print P1.x
print P1.y
La versione di python che utilizzo è la 2.5.4 e se scrivo su IDLE ottengo:
class Punto:
P1.x = 3.0 #definisco la classe Punto
P1.y = 4.0 #definisco la varibile P1 e gli attributi
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
P1 = Punto()
print P1.x
print P1.y
SyntaxError: invalid syntax
Se invece scrivo su Terminale ottengo :
class Punto:
P1.x = 3.0 #definisco la classe Punto
P1.y = 4.0 #definisco la varibile P1 e gli attributi
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
(3.0, 4.0)
P1 = Punto()
print P1.x
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Punto instance has no attribute 'x'
print P1.y
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Punto instance has no attribute 'y'
Scusa, mi dai il link al documento che stai studiando?
nuvolare
01-04-2009, 10:31
il link è questo http://www.python.it/doc/Howtothink/Howtothink-html-it/chap12.htm
Poi una domanda ma il libro perché mi dice di fare questa sequenza se è sbagliata?
e mi dicevi che il libro fa l'esempio della sequenza iniziale del codice con il pass in questo modo
class Punto
pass
e quindi mi fa capire che così si definisce una classe, ma poi poche righe sotto mi dice:
"L'istruzione pass non ha effetti è stata inserita solo per il solo fatto che la definizione prevede un corpo che deve ancora essere scritto"
Quindi desumo che non va usato, giusto?
Poi più avanti mi dice :
"Per creare un oggetto di tipo Punto viene chiamata una funzione chiamata Punto:
P1 = Punto()
Poi mi dice di aggiungere un dato all'istanza
P1.x = 3.0
P1.y = 4.0
e poi per stampare gli attributi delle variabili P1 :
print P1.y
print P1.x
e poi per ultimo mi dice l'operazione per stampare il risultato e per effettuare l'operazione della Distanza al quadrato:
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
Dall'unione di tutto questo ho formato il codice che mi avete detto essere sbagliato.
~FullSyst3m~
01-04-2009, 10:48
il link è questo http://www.python.it/doc/Howtothink/Howtothink-html-it/chap12.htm
Poi una domanda ma il libro perché mi dice di fare questa sequenza se è sbagliata?
e mi dicevi che il libro fa l'esempio della sequenza iniziale del codice con il pass in questo modo
class Punto
pass
e quindi mi fa capire che così si definisce una classe, ma poi poche righe sotto mi dice:
"L'istruzione pass non ha effetti è stata inserita solo per il solo fatto che la definizione prevede un corpo che deve ancora essere scritto"
Quindi desumo che non va usato, giusto?
Poi più avanti mi dice :
"Per creare un oggetto di tipo Punto viene chiamata una funzione chiamata Punto:
P1 = Punto()
Poi mi dice di aggiungere un dato all'istanza
P1.x = 3.0
P1.y = 4.0
e poi per stampare gli attributi delle variabili P1 :
print P1.y
print P1.x
e poi per ultimo mi dice l'operazione per stampare il risultato e per effettuare l'operazione della Distanza al quadrato:
print'(' + str(P1.x) +', '+ str(P1.y) + ')'
DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
Dall'unione di tutto questo ho formato il codice che mi avete detto essere sbagliato.
Come dice il libro, il pass è un segnaposto, non fa nulla. Quel codice tu non lo devi scrivere dentro la classe, il libro te lo avrebbe detto, devi scriverlo al di fuori, come ti ho già spiegato e fatto vedere.
nuvolare
01-04-2009, 13:07
Ho capito l'errore.... :doh:
Allora io facevo questo :
class Punto: pass
P1 = Punto()
P1.x = 3.0
P1.y = 4.0
print P1.x
print P1.y
Invece dovevo fare questo :
>>> class Punto:
pass
>>> p1 = Punto()
>>> P1.x = 3.0
>>> P1.y = 4.0
>>>
>>> print P1.x
3.0
>>> print P1.y
4.0
Ed inserire il codice quando mi spuntavano le >>>, cosa che io non facevo ed attaccavo tutto....
Adesso un dubbio.
Dato questo codice:
>>> class Punto:
pass
>>> P1.x = 3.0
>>> P1.y = 4.0
>>> print'(' + str(P1.x) +', '+ str(P1.y) + ')'
(3.0, 4.0)
>>> DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
>>>
Perché il print mi stampa il risultato ed invece il passaggio successivo non mi fa le moltiplicazioni e mi stampa i >>> ?
@FULL
Tu mi parlavi di dentro la classe e fuori la classe, io non so se ti riferivi a quello che o scoperto adesso, perché non capivo cosa intendevi, e quindi continuavo a non seguire.
Comunque grazie lo stesso.
~FullSyst3m~
01-04-2009, 13:36
Ho capito l'errore.... :doh:
Allora io facevo questo :
class Punto: pass
P1 = Punto()
P1.x = 3.0
P1.y = 4.0
print P1.x
print P1.y
Invece dovevo fare questo :
>>> class Punto:
pass
>>> p1 = Punto()
>>> P1.x = 3.0
>>> P1.y = 4.0
>>>
>>> print P1.x
3.0
>>> print P1.y
4.0
Ed inserire il codice quando mi spuntavano le >>>, cosa che io non facevo ed attaccavo tutto....
Adesso un dubbio.
Dato questo codice:
>>> class Punto:
pass
>>> P1.x = 3.0
>>> P1.y = 4.0
>>> print'(' + str(P1.x) +', '+ str(P1.y) + ')'
(3.0, 4.0)
>>> DistanzaAlQuadrato = P1.x * P1.x + P1.y * P1.y
>>>
Perché il print mi stampa il risultato ed invece il passaggio successivo non mi fa le moltiplicazioni e mi stampa i >>> ?
Perchè fai un assegnamento. Stai assegnando il valore di quell'espressione alla variabile DistanzaAlQuadrato. Se vuoi vedere il risultato printa la variabile
print DistanzaAlQuadrato
@FULL
Tu mi parlavi di dentro la classe e fuori la classe, io non so se ti riferivi a quello che o scoperto adesso, perché non capivo cosa intendevi, e quindi continuavo a non seguire.
Comunque grazie lo stesso.
Si, mi riferivo a questo. Dentro la classe significa dentro il corpo della classe. L'indentazione in Python è importantissima.
class Punto:
dentro la classe
dentro la classe
fuori la classe
nuvolare
01-04-2009, 13:43
Si, mi riferivo a questo. Dentro la classe significa dentro il corpo della classe. L'indentazione in Python è importantissima.
Si, ok adesso ho fatto il print di DistanzaAlQuadrato ed è uscito il risultato.
Il problema e che di identazione non ne ha mai parlato questo libro, quindi quello che so e grazie a te ai vari forum e agli esperimenti fatti.
Ma non c'è un listato di quando e come fare l'identazione?
Tipo, dopo il print, dopo al funzione, in questo senso, perché altrimenti non so mai quando è giusto e quando non lo è.
Grazie
~FullSyst3m~
01-04-2009, 14:45
Si, ok adesso ho fatto il print di DistanzaAlQuadrato ed è uscito il risultato.
Il problema e che di identazione non ne ha mai parlato questo libro, quindi quello che so e grazie a te ai vari forum e agli esperimenti fatti.
Ma non c'è un listato di quando e come fare l'identazione?
Tipo, dopo il print, dopo al funzione, in questo senso, perché altrimenti non so mai quando è giusto e quando non lo è.
Grazie
Ne parla nei primi capitoli dell'indentazione. Comunque l'indentazione si usa quando devi inserire delle istruzioni in un blocco. Ad esempio dentro una funzione, una classe, un ciclo for, un while ecc.
Se usi un IDE mezzo decente impari a capire quando usarla, ti indenta in automatico il codice. Infine, non usare sempre il terminale, cosi fai solo confusione. Usalo solo quando devi fare qualche prova al volo, per il resto usa l'IDE. Cosi puoi modificare il file quando vuoi, salvarlo e imparare come usare l'indentazione.
cdimauro
01-04-2009, 16:17
:eek: Ho creato un mostro! :p
~FullSyst3m~
01-04-2009, 17:41
:eek: Ho creato un mostro! :p
Dai che mi fai arrossire :flower:
cdimauro
01-04-2009, 18:29
In pochi mesi sei passato dal chiedere spiegazioni a fornirle. Direi che c'è ben poco da commentare. Complimenti. :p
Quoto e rinnovo i complimenti, ogni tanto leggo anche in questa sezione :)
~FullSyst3m~
01-04-2009, 21:00
In pochi mesi sei passato dal chiedere spiegazioni a fornirle. Direi che c'è ben poco da commentare. Complimenti. :p
Dai, esageratone :flower: E poi non sono pochi mesi, sono troppi. Avrei potuto impiegare molto meno tempo.
Queste sono le cose basilari, se non sapessi spiegarle sarebbe grave ;)
Quoto e rinnovo i complimenti, ogni tanto leggo anche in questa sezione
Grazie :)
P.S: rileggendo ogni tanto quel libro, come in questo caso, capisco il perchè di tutte quelle richieste di spiegazioni che facevo: alcune cose per chi non conosce il linguaggio non sono chiare e le dà per scontate, cosi si incappa in dubbi che riguardandoli dopo ti dici: "che stupido".
nuvolare
02-04-2009, 00:35
P.S: rileggendo ogni tanto quel libro, come in questo caso, capisco il perchè di tutte quelle richieste di spiegazioni che facevo: alcune cose per chi non conosce il linguaggio non sono chiare e le dà per scontate, cosi si incappa in dubbi che riguardandoli dopo ti dici: "che stupido".
Hai pienamente ragione, solo che avvolte riesci a trovare la soluzione da solo, altre volte, hai la risposta sotto il naso e non la vedi e poi e appena capisci il concetto, stupido me lo dico per prima e per il dopo.... :muro:
~FullSyst3m~
02-04-2009, 00:45
Hai pienamente ragione, solo che avvolte riesci a trovare la soluzione da solo, altre volte, hai la risposta sotto il naso e non la vedi e poi e appena capisci il concetto, stupido me lo dico per prima e per il dopo.... :muro:
E' questo il problema di non avere libri fatti come si deve. Ma per iniziare da 0 quello è il migliore.
nuvolare
02-04-2009, 17:58
Full, mi dicevi di utilizzare un IDE, non vorrei fare confusione ma sono diversi con IDLE che c'è nella cartella di python?
Nel frattempo continuo con i miei studi e sto facendo il paragrafo 12.5, in cui mi dice di fare:
>>> class Rettangolo:
pass
>>> Rett = Rettangolo()
>>> Rett.Largezza = 100.0
>>> Rett.Altezza = 200.0
>>> Rett.AltoSinistra = Punto()
>>> Rett.AltoSinistra.x = 0.0;
>>> Rett.AltoSinistra.y = 0.0;
>>> def TrovaCentro(Rettangolo):
P = Punto()
P.x = Rettangolo.AltoSinistra.x + Rettangolo.Larghezza/2.0
P.y = Rettangolo.AltoSinistra.y + Rettangolo.Altezza/2.0
return P
>>> Centro = TrovaCentro(Rett)
Traceback (most recent call last):
File "<pyshell#49>", line 1, in <module>
Centro = TrovaCentro(Rett)
File "<pyshell#48>", line 3, in TrovaCentro
P.x = Rettangolo.AltoSinistra.x + Rettangolo.Larghezza/2.0
AttributeError: Rettangolo instance has no attribute 'Larghezza'
>>>
Invece dovrebbe proseguire restituendomi 50.0, 100.0 ed invece a me da l'errore appena riportato
Il link è questo http://www.python.it/doc/Howtothink/Howtothink-html-it/chap12.htm la parte dei Rettangoli 12.5
~FullSyst3m~
02-04-2009, 19:33
Full, mi dicevi di utilizzare un IDE, non vorrei fare confusione ma sono diversi con IDLE che c'è nella cartella di python?
Nel frattempo continuo con i miei studi e sto facendo il paragrafo 12.5, in cui mi dice di fare:
>>> class Rettangolo:
pass
>>> Rett = Rettangolo()
>>> Rett.Largezza = 100.0
>>> Rett.Altezza = 200.0
>>> Rett.AltoSinistra = Punto()
>>> Rett.AltoSinistra.x = 0.0;
>>> Rett.AltoSinistra.y = 0.0;
>>> def TrovaCentro(Rettangolo):
P = Punto()
P.x = Rettangolo.AltoSinistra.x + Rettangolo.Larghezza/2.0
P.y = Rettangolo.AltoSinistra.y + Rettangolo.Altezza/2.0
return P
>>> Centro = TrovaCentro(Rett)
Traceback (most recent call last):
File "<pyshell#49>", line 1, in <module>
Centro = TrovaCentro(Rett)
File "<pyshell#48>", line 3, in TrovaCentro
P.x = Rettangolo.AltoSinistra.x + Rettangolo.Larghezza/2.0
AttributeError: Rettangolo instance has no attribute 'Larghezza'
>>>
Invece dovrebbe proseguire restituendomi 50.0, 100.0 ed invece a me da l'errore appena riportato
Il link è questo http://www.python.it/doc/Howtothink/Howtothink-html-it/chap12.htm la parte dei Rettangoli 12.5
Parli dell'IDLE incluso insieme al linguaggio? Anche quello è buono per iniziare, ma ti consiglio di passare direttamente a qualcosa di migliore.
>>> Rett.AltoSinistra.x = 0.0;
>>> Rett.AltoSinistra.y = 0.0;
Perchè il punto e virgola?
Comunque ecco il codice, studialo e vedrai dove hai sbagliato:
class Rettangolo:
pass
class Punto:
pass
Rett = Rettangolo()
Rett.Larghezza = 100
Rett.Altezza = 200
Rett.AltoSinistra = Punto()
Rett.AltoSinistra.x = 0.0
Rett.AltoSinistra.y = 0.0
def TrovaCentro(Rettangolo):
P = Punto()
P.x = Rettangolo.AltoSinistra.x + Rettangolo.Larghezza / 2
P.y = Rettangolo.AltoSinistra.y + Rettangolo.Altezza / 2
return P
def StampaPunto(Punto):
print '(' + str(Punto.x) + ', ' + str(Punto.y) + ')'
Centro = TrovaCentro(Rett)
StampaPunto(Centro)
nuvolare
02-04-2009, 19:48
Parli dell'IDLE incluso insieme al linguaggio? Anche quello è buono per iniziare, ma ti consiglio di passare direttamente a qualcosa di migliore.
Si parlo di quello, se mi dai direttamente uno che usi tu così parliamo la stessa lingua e non avrò problemi in seguito.
>>> Rett.AltoSinistra.x = 0.0;
>>> Rett.AltoSinistra.y = 0.0;
Perchè il punto e virgola?
Perché così è scritto sul libro
class Punto:
pass
Pensandoci effettivamente visto che c'è l'oggetto Punto() questo ci vuole, ma perché il libro non me lo dice ed accorcia tutto? questo sono cose fondamentali da capire, specialmente all'inizio quanto tutto si capisce solo quando lo vedi scritto... :D
~FullSyst3m~
02-04-2009, 20:04
Si parlo di quello, se mi dai direttamente uno che usi tu così parliamo la stessa lingua e non avrò problemi in seguito.
Personalmente quando studio Java uso direttamente NetBeans. Oppure se devo usare direttamente Python utilizzo PyScripter. Su linux invece Geany.
Perché così è scritto sul libro
E' un errore, non lo ascoltare :D
Pensandoci effettivamente visto che c'è la classe Punto questo ci vuole, ma perché il libro non me lo dice ed accorcia tutto? questo sono cose fondamentali da capire, specialmente all'inizio quanto tutto si capisce solo quando lo vedi scritto... :D
Lo so, per questo ho detto che dà molte cose per scontate. Quando io ho capito come era strutturato il libro mi sono abituato a queste cose. Poi basta guardare il codice per capire che se viene istanziato l'oggetto Punto la classe corrispondente deve pur essere da qualche parte.
nuvolare
02-04-2009, 20:08
Poi basta guardare il codice per capire che se viene istanziato l'oggetto Punto la classe corrispondente deve pur essere da qualche parte.
Certo hai ragione, ma questo discorso l'ho fatto proprio dopo aver visto il codice...
Grazie Full
~FullSyst3m~
02-04-2009, 20:18
Certo hai ragione, ma questo discorso l'ho fatto proprio dopo aver visto il codice...
Grazie Full
Di nulla ;)
nuvolare
02-04-2009, 22:49
Io comunque non riesco a trovare un IDE per il mio Mac e quindi sono costretto a fare tutto con l'IDLE che ti parlavo prima, quello di python per intenderci. Oppure posso scrivere con il mio programma di Testo il codice e poi salvarlo con estensione .py e poi eseguirlo con Terminale a sempre con IDLE di python? se si può come si fa? con java facevo javac, ecc ma qua?
cdimauro
02-04-2009, 23:00
Certo che puoi. A mali estremi fai così, ma guarda che di IDE per Mac ce ne sono anche.
Komodo Edit lo trovi qui (http://www.activestate.com/komodo_edit/downloads/) e c'è la versione anche per i vecchi Mac PowerPC.
Al limite scarica SPE (http://pythonide.blogspot.com/) ma ricordati scaricare e installare la libreria wxPython prima di installare SPE.
nuvolare
02-04-2009, 23:15
Ho perso un pomeriggio a cercare gli IDE per mac...
CD ha creato un super eroe non un mostro!!! :D
Grazie 1000 ho installato Komodo che è stato più comodo da installare :rotfl:
Per capire come si usa, su Help? oppure puoi dirmi in come fare per eseguire un codice di prova?
cdimauro
02-04-2009, 23:34
Figurati.
Per configurarlo leggiti il thread ufficiale degli IDE di Python, che trovi qui (http://www.hwupgrade.it/forum/showthread.php?t=1825689).
Io stacco e vado a nanna che sono pezzi.
nuvolare
02-04-2009, 23:36
Grazie per tutto, buona notte, ciao
~FullSyst3m~
02-04-2009, 23:38
Ho perso un pomeriggio a cercare gli IDE per mac...
CD ha creato un super eroe non un mostro!!! :D
Grazie 1000 ho installato Komodo che è stato più comodo da installare :rotfl:
Per capire come si usa, su Help? oppure puoi dirmi in come fare per eseguire un codice di prova?
La configurazione di Komodo è semplice, come ha detto cdimauro leggi il topic che ti ha linkato, poco dopo l'inizio trovi la sua spiegazione ;)
nuvolare
02-04-2009, 23:43
Sono all'opera, grazie :D
~FullSyst3m~
02-04-2009, 23:46
Sono all'opera, grazie :D
Buon divertimento ;)
nuvolare
03-04-2009, 00:39
Che spettacolo ho scritto un sacco di codice per provare!!!! :D
Domani posso continuare a studiare senza intrippi....
Grazie ciao a domani
~FullSyst3m~
03-04-2009, 00:54
Che spettacolo ho scritto un sacco di codice per provare!!!! :D
Domani posso continuare a studiare senza intrippi....
Grazie ciao a domani
Anche tu sei entrato nel tunnel ormai :asd:
cdimauro
03-04-2009, 06:20
Ma lui c'ha messo meno tempo di te a diventare Python-dipendente. :asd:
nuvolare
03-04-2009, 06:25
Ciò messo troppo tempo nello sceglierlo però... :D
cdimauro
03-04-2009, 09:08
Allora per adesso siete in parità: 1 a 1. :D
Vedremo quale sarà il tuo percorso. :)
nuvolare
03-04-2009, 09:16
Ma se ho questo
class Rettangolo:
pass
class Punto:
pass
Rett = Rettangolo()
Rett.Larghezza = 100
Rett.Altezza = 200
Rett.AltoSinistra = Punto()
Rett.AltoSinistra.x = 0.0
Rett.AltoSinistra.y = 0.0
def TrovaCentro(Rettangolo):
P = Punto()
P.x = Rettangolo.AltoSinistra.x + Rettangolo.Larghezza / 2
P.y = Rettangolo.AltoSinistra.y + Rettangolo.Altezza / 2
return P
def StampaPunto(Punto):
print '(' + str(Punto.x) + ', ' + str(Punto.y) + ')'
Centro = TrovaCentro(Rett)
StampaPunto(Centro)
E volessi cambiare il punto, come mi dice l'esercizio del cap 12.7
posso importare l'esercizio precedente in questo modo ?
import Rettangolo
class MuoviRettangolo:
pass
P2 = Rettangolo()
P2.Largezza = 100
P2.Altezza = 200
P2.AltoSinistra = Punto()
P2.AltoSinistra.x = 0.0
P2.AltoSinistra.y = 0.0
MuoviRettangolo(P2, 50, 100)
def MuoviRettangolo(Rettangolo, dx, dy):
P2 = Movimento()
P2.x = Rettangolo.AltoSinistra.x + dx
P2.y = Rettangolo.AltoSinistra.y + dy
return P2
def StampaPunto(MuoviRettangolo):
print '(' + str(Movimento.x) + ', ' + str(Movimento.y) + ')'
PuntoNuovo = MuoviRettangolo(Movimento)
StampaNuvoPunto(PuntoNuovo)
~FullSyst3m~
03-04-2009, 09:59
Ma lui c'ha messo meno tempo di te a diventare Python-dipendente. :asd:
Io ero già Python-dipendente dopo aver visto il primo codice sul libro, in pratica capitolo 3 :D
2-0 :asd:
Vedremo quale sarà il tuo percorso.
Al momento è uguale visto che sta studiando sul Pensare :D
Per importare un qualcosa, questo qualcosa deve essere un modulo, cioè deve esserci un file che contiene quello che vuoi importare.
Tu hai un file che si chiama Rettangolo.py e che contiene una classe Rettangolo? Se si puoi fare l'import (sempre che il file sia nei PATH in cui cerca Python), altrimenti l'interprete solleverà un errore "Import Error".
nuvolare
03-04-2009, 10:26
Tu hai un file che si chiama Rettangolo.py e che contiene una classe Rettangolo? Se si puoi fare l'import (sempre che il file sia nei PATH in cui cerca Python), altrimenti l'interprete solleverà un errore "Import Error".
Si ho fatto esattamente questo.
Ma ho degli errori probabilmente per codici
~FullSyst3m~
03-04-2009, 10:28
Si ho fatto esattamente questo.
Ma ho degli errori probabilmente per codici
Lo hai chiamato Rettangolo il file .py? Ma come mai hai fatto tutto questo giro adesso?
Comunque posta il codice dei file e l'errore che ottieni.
nuvolare
03-04-2009, 11:26
Si l'ho chiamato Rettangolo.py
Sono arrivato ad importarlo perché facevo modifiche su modiche e non mi riusciva niente allora ho deciso di lasciare quello originale fare le operazioni sull'altro file ed importarlo.
Gli errori sono
(50.0, 100.0)
Traceback (most recent call last):
File "/Users/salvatore/Python/MuoviRettImport.py", line 9, in ?
P2 = Rettangolo()
TypeError: 'module' object is not callable
Ma non è questo il motivo creo che risolto questo c'è ne sono altri
~FullSyst3m~
03-04-2009, 11:37
Si l'ho chiamato Rettangolo.py
Sono arrivato ad importarlo perché facevo modifiche su modiche e non mi riusciva niente allora ho deciso di lasciare quello originale fare le operazioni sull'altro file ed importarlo.
Gli errori sono
(50.0, 100.0)
Traceback (most recent call last):
File "/Users/salvatore/Python/MuoviRettImport.py", line 9, in ?
P2 = Rettangolo()
TypeError: 'module' object is not callable
Ma non è questo il motivo creo che risolto questo c'è ne sono altri
Quell'errore te lo dà perchè l'interprete crede che vuoi chiamare il modulo, non la classe.
In questo caso quindi fai cosi:
from Rettangolo import Rettangolo
Ora non dovrebbe darti più l'errore di prima.
nuvolare
03-04-2009, 13:12
Adesso ho questo:
class Rettangolo:
pass
class Punto:
pass
Rett = Rettangolo()
Rett.Larghezza = 100
Rett.Altezza = 200
Rett.AltoSinistra = Punto()
Rett.AltoSinistra.x = 0.0
Rett.AltoSinistra.y = 0.0
def TrovaCentro(Rettangolo):
P = Punto()
P.x = Rettangolo.AltoSinistra.x + Rettangolo.Larghezza / 2
P.y = Rettangolo.AltoSinistra.y + Rettangolo.Altezza / 2
return P
class Movimento:
pass
class MuoviRettangolo:
dx = 50
dy = 100
def MuoviRettangolo(Rettangolo, dx, dy):
P2 = Movimento()
P2.x = Rettangolo.AltoSinistra.x + dx
P2.y = Rettangolo.AltoSinistra.y + dy
return P2
def StampaPunto(Movimento):
print '( '+ str(Movimento.x) + ', ' + str(Movimento.y) + ')'
Centro = TrovaCentro(Rett)
StampaPunto(Centro)
Come faccio a stampare la modifica del secondo punto(quello in rosso)?
Perché continua a darmi ( 50.0, 100.0) che è il risultato senza lo spostamento del turno
~FullSyst3m~
03-04-2009, 13:19
Adesso ho questo:
class Rettangolo:
pass
class Punto:
pass
Rett = Rettangolo()
Rett.Larghezza = 100
Rett.Altezza = 200
Rett.AltoSinistra = Punto()
Rett.AltoSinistra.x = 0.0
Rett.AltoSinistra.y = 0.0
def TrovaCentro(Rettangolo):
P = Punto()
P.x = Rettangolo.AltoSinistra.x + Rettangolo.Larghezza / 2
P.y = Rettangolo.AltoSinistra.y + Rettangolo.Altezza / 2
return P
class Movimento:
pass
class MuoviRettangolo:
dx = 50
dy = 100
def MuoviRettangolo(Rettangolo, dx, dy):
P2 = Movimento()
P2.x = Rettangolo.AltoSinistra.x + dx
P2.y = Rettangolo.AltoSinistra.y + dy
return P2
def StampaPunto(Movimento):
print '( '+ str(Movimento.x) + ', ' + str(Movimento.y) + ')'
Centro = TrovaCentro(Rett)
StampaPunto(Centro)
Come faccio a stampare la modifica del secondo punto(quello in rosso)?
Perché continua a darmi ( 50.0, 100.0) che è il risultato senza lo spostamento del turno
Perchè hai una classe MuoviRettangolo ed un metodo MuoviRettangolo?
nuvolare
03-04-2009, 13:33
Credevo di passare i parametri dx e dy in questo modo :D
~FullSyst3m~
03-04-2009, 13:35
Forse nelle varie prove ho dimenticato un pezzo, lui non lo dava come errore e non ricordavo di avercelo lascito...
Nel libro non c'è nessuna classe del genere. Ecco il codice, devi ricordarti di usarle le funzioni che definisci, altrimenti non funziona nulla ;)
class Rettangolo:
pass
class Punto:
pass
Rett = Rettangolo()
Rett.Larghezza = 50
Rett.Altezza = 100
Rett.AltoSinistra = Punto()
Rett.AltoSinistra.x = 0
Rett.AltoSinistra.y = 0
def TrovaCentro(Rettangolo):
P = Punto()
P.x = Rettangolo.AltoSinistra.x + Rettangolo.Larghezza / 2
P.y = Rettangolo.AltoSinistra.y + Rettangolo.Altezza / 2
return P
class Movimento:
pass
def MuoviRettangolo(Rettangolo, dx, dy):
P2 = Movimento()
P2.x = Rettangolo.AltoSinistra.x + dx
P2.y = Rettangolo.AltoSinistra.y + dy
return P2
def StampaPunto(Movimento):
print '( '+ str(Movimento.x) + ', ' + str(Movimento.y) + ')'
centro = TrovaCentro(Rett)
StampaPunto(centro)
muovi = MuoviRettangolo(Rett, 10, 15)
StampaPunto(muovi)
nuvolare
03-04-2009, 13:38
Scusami ho fatto la modifica al post mentre tu rispondevi ed infatti come ho riscritto pensavo di passarci i parametri in quel modo...
Ecco come passarceli è vero...
Ok, che dire... Grazie!!!
~FullSyst3m~
03-04-2009, 13:47
Scusami ho fatto la modifica al post mentre tu rispondevi ed infatti come ho riscritto pensavo di passarci i parametri in quel modo...
Ecco come passarceli è vero...
Ok, che dire... Grazie!!!
Di niente ;)
nuvolare
04-04-2009, 17:53
Continuo con gli studi, sto facendo l'esercizio finale del 12.8 quello con il deepcopy
Ho creato questo:
def MuoviRettangolo(Rettangolo, NuovaLargezza, NuovaAltezza):
import copy
NuovoRett = copy.deepcopy(Rettangolo)
NuovoRett.Largezza = NuovoRett.Largezza + NuovaLargezza
NuovoRett.Altezza = NuovoRett.Altezza + NuovaAltezza
return NuovoRett
Se io volessi passare dei parametri a questo metodo o funzione, non dovrei passarli in questo modo?
NuovoPunto = MuoviRettangolo (Rettangolo, 10, 20)
StampaNuovoPunto(NuovoPunto)
perché mi dice:
NuovoPunto = MuoviRettangolo (Rettangolo, 10, 20)
NameError: name 'Rettangolo' is not defined
~FullSyst3m~
04-04-2009, 18:38
Continuo con gli studi, sto facendo l'esercizio finale del 12.8 quello con il deepcopy
Ho creato questo:
def MuoviRettangolo(Rettangolo, NuovaLargezza, NuovaAltezza):
import copy
NuovoRett = copy.deepcopy(Rettangolo)
NuovoRett.Largezza = NuovoRett.Largezza + NuovaLargezza
NuovoRett.Altezza = NuovoRett.Altezza + NuovaAltezza
return NuovoRett
Se io volessi passare dei parametri a questo metodo o funzione, non dovrei passarli in questo modo?
NuovoPunto = MuoviRettangolo (Rettangolo, 10, 20)
StampaNuovoPunto(NuovoPunto)
perché mi dice:
NuovoPunto = MuoviRettangolo (Rettangolo, 10, 20)
NameError: name 'Rettangolo' is not defined
Ma la variabile Rettangolo l'hai definita? L'hai istanziata la classe rettangolo?
nuvolare
04-04-2009, 18:44
Ma la variabile Rettangolo l'hai definita? L'hai istanziata la classe rettangolo?
Sinceramente no, ma non l'ho fatto perché siccome lui qui mi parla di copia, pensavo che lui prendesse tutto dall'altro file e quindi a me rimaneva di inserire questi dati... ma dalla tua domanda mi sembra di capire che ho sbagliato!!!! :D
~FullSyst3m~
04-04-2009, 18:54
Sinceramente no, ma non l'ho fatto perché siccome lui qui mi parla di copia, pensavo che lui prendesse tutto dall'altro file e quindi a me rimaneva di inserire questi dati... ma dalla tua domanda mi sembra di capire che ho sbagliato!!!! :D
Bè, da qualche parte deve pur copiarlo il rettangolo no? Se non glielo passi cosa copia? ;)
nuvolare
04-04-2009, 20:34
Quindi devo passargli anche i dati del Rettangolo, cioè creare la classe Rettangolo e le variabili
class Rettangolo:
pass
class Punto:
pass
Rett = Rettangolo()
Rett.Larghezza = 50
Rett.Altezza = 100
Rett.AltoSinistra = Punto()
Rett.AltoSinistra.x = 0
Rett.AltoSinistra.y = 0
Quindi deepcopy serve per copiare ciò che gli passi nel codice stesso, io avevo frainteso allora, pensavo che lui si andava a copiare tutto quello che c'è nel file chiamato Rettangolo.
Quindi se gli passo 1 rettangolo me ne fa fa un altro nello stesso file, giusto?
~FullSyst3m~
04-04-2009, 21:06
Quindi devo passargli anche i dati del Rettangolo, cioè creare la classe Rettangolo e le variabili
class Rettangolo:
pass
class Punto:
pass
Rett = Rettangolo()
Rett.Larghezza = 50
Rett.Altezza = 100
Rett.AltoSinistra = Punto()
Rett.AltoSinistra.x = 0
Rett.AltoSinistra.y = 0
Quindi deepcopy serve per copiare ciò che gli passi nel codice stesso, io avevo frainteso allora, pensavo che lui si andava a copiare tutto quello che c'è nel file chiamato Rettangolo.
Quindi se gli passo 1 rettangolo me ne fa fa un altro nello stesso file, giusto?
In che senso nello stesso file? Tu crei un rettangolo, lo passi a quella funzione e lui te ne fa una copia che poi usi dentro il codice della funzione o all'esterno.
nuvolare
04-04-2009, 21:25
In che senso nello stesso file? Tu crei un rettangolo, lo passi a quella funzione e lui te ne fa una copia che poi usi dentro il codice della funzione o all'esterno.
Ok, il rettangolo è quello che ho creato nell'esercizio prima
class Rettangolo:
pass
class Punto:
pass
Rett = Rettangolo()
Rett.Larghezza = 50
Rett.Altezza = 100
Rett.AltoSinistra = Punto()
Rett.AltoSinistra.x = 0
Rett.AltoSinistra.y = 0
Poi gli passo la funzione deepcopy
def MuoviRettangolo(Rettangolo, NuovaLargezza, NuovaAltezza):
import copy
NuovoRett = copy.deepcopy(Rettangolo)
NuovoRett.Largezza = NuovoRett.Largezza + NuovaLargezza
NuovoRett.Altezza = NuovoRett.Altezza + NuovaAltezza
return NuovoRett
Che praticamente copia quel rettangolo.
Non sarebbe stato proprio male se questo libro avesse gli esercizi svolti, si capirebbero meglio le cose...
~FullSyst3m~
04-04-2009, 23:40
Ok, il rettangolo è quello che ho creato nell'esercizio prima
class Rettangolo:
pass
class Punto:
pass
Rett = Rettangolo()
Rett.Larghezza = 50
Rett.Altezza = 100
Rett.AltoSinistra = Punto()
Rett.AltoSinistra.x = 0
Rett.AltoSinistra.y = 0
Poi gli passo la funzione deepcopy
def MuoviRettangolo(Rettangolo, NuovaLargezza, NuovaAltezza):
import copy
NuovoRett = copy.deepcopy(Rettangolo)
NuovoRett.Largezza = NuovoRett.Largezza + NuovaLargezza
NuovoRett.Altezza = NuovoRett.Altezza + NuovaAltezza
return NuovoRett
Che praticamente copia quel rettangolo.
Non sarebbe stato proprio male se questo libro avesse gli esercizi svolti, si capirebbero meglio le cose...
Io ancora non ho capito cosa volevi dire prima, comunque l'importante che hai risolto. Basta ragionarci un pò ;) Quando finisci questo libro leggi il tutorial ufficiale di Guido e qualche capitolo del Dive into Python che tratta cose che lì non ci sono anche se è scritto maluccio. Infine il Learning Python non ti deve mancare, tratta molte cose e per un controllo al volo è ottimo.
nuvolare
05-04-2009, 13:19
Ok, grazie io avvolte mi sembra di cadere dalle nuvole, mi ferma il ragionamento, non so per quale motivo, sarà che ancora devo entrare nel ragionamento, ma...
Un altro problema con il cap successivo, più che problema un dubbio.
Per prima cosa si crea la classe
class Tempo:
pass
Poi si passano le varibili
OraCorrente = Tempo()
OraCorrente.Ore = 9
OraCorrente.Minuti = 30
OraCorrente.Secondi = 40
TempoCottura = Tempo()
TempoCottura.Ore = 3
TempoCottura.Minuti = 40
TempoCottura.Secondi = 30
Poi definisco la funzione
def SommaTempi(T1, T2):
Somma = Tempo()
Somma.Ore = T1.Ore + T2.Ore
Somma.Minuti = T1.Minuti + T2.Minuti
Somma.Secondi = T1.Secondi + T2.Secondi
return Somma
In questa situazione per esempio a me verrebbe istintivo creare una cosa del genere, perché è sbagliata?
Def SommaTempi(Tempo1, Tempo2):
Somma = Tempo()
SommaOre = TempoCottura.Ore + OraCorrente.Ora
SommaMinuti = TempoCottura.Minuti + OraCorrente.Minuti
SommaSecondi = TempoCottura.Secondi + OraCorrente.Secondi
return Somma
~FullSyst3m~
05-04-2009, 13:53
Ok, grazie io avvolte mi sembra di cadere dalle nuvole, mi ferma il ragionamento, non so per quale motivo, sarà che ancora devo entrare nel ragionamento, ma...
Un altro problema con il cap successivo, più che problema un dubbio.
Per prima cosa si crea la classe
class Tempo:
pass
Poi si passano le varibili
OraCorrente = Tempo()
OraCorrente.Ore = 9
OraCorrente.Minuti = 30
OraCorrente.Secondi = 40
TempoCottura = Tempo()
TempoCottura.Ore = 3
TempoCottura.Minuti = 40
TempoCottura.Secondi = 30
Poi definisco la funzione
def SommaTempi(T1, T2):
Somma = Tempo()
Somma.Ore = T1.Ore + T2.Ore
Somma.Minuti = T1.Minuti + T2.Minuti
Somma.Secondi = T1.Secondi + T2.Secondi
return Somma
In questa situazione per esempio a me verrebbe istintivo creare una cosa del genere, perché è sbagliata?
Def SommaTempi(Tempo1, Tempo2):
Somma = Tempo()
SommaOre = TempoCottura.Ore + OraCorrente.Ora
SommaMinuti = TempoCottura.Minuti + OraCorrente.Minuti
SommaSecondi = TempoCottura.Secondi + OraCorrente.Secondi
return Somma
Se tu come parametro scrivi Tempo1 non puoi scrivere
SommaOre = TempoCottura.Ore + OraCorrente.Ore
l'interprete ti dirà: "ma dove è TempoCottura e OraCorrente?". Quindi devi scrivere
Tempo1.Ore + Tempo2.Ore
quando tu passi i parametri TempoCottura e OraCorrente ci penserà Python direttamente a sostituire Tempo1 con TempoCottura (o OraCorrente, dipende cosa gli dai per prima) e Tempo2 con OraCorrente(o viceversa).
nuvolare
11-04-2009, 11:30
Ok, ho rivisto e credo di aver capito il funzionamento, sono adesso arrivato al par 13.3 in cui mi parla dei Modificatori, e mi fa vedere come questo :
def Incremento(Tempo, Secondi):
Tempo.Secondi = Tempo.Secondi + Secondi
while Somma.Secondi >= 60:
Tempo.Secondi = Tempo.Secondi -60
Tempo.Minuti = Tempo.Minuti +1
while Tempo.Minuti >= 60:
Tempo.Minuti = Tempo.Minuti -60
Tempo.Ore = Tempo.Ore +1
Possa risolvere il problema quando i secondi sono più di 60.
Ma non capisco dove questo dovrebbe essere messo, se a seguire all'esercizio di prima o c'è, come al solito, qualche cosa che non fa vedere e che da per scontato.
Tra le mie prove sono riuscito a creare questo:
class Tempo:
pass
OraCorrente = Tempo()
OraCorrente.Ore = 9
OraCorrente.Minuti = 30
OraCorrente.Secondi = 40
TempoCottura = Tempo()
TempoCottura.Ore = 3
TempoCottura.Minuti = 40
TempoCottura.Secondi = 30
def SommaTempi(T1, T2):
Somma = Tempo()
Somma.Ore = T1.Ore + T2.Ore
Somma.Minuti = T1.Minuti + T2.Minuti
Somma.Secondi = T1.Secondi + T2.Secondi
if Somma.Secondi >= 60:
Somma.Secondi = Somma.Secondi -60
Somma.Minuti = Somma.Minuti +1
if Somma.Minuti >= 60:
Somma.Minuti = Somma.Minuti -60
Somma.Ore = Somma.Ore +1
return Somma.Ore, Somma.Minuti, Somma.Secondi
PastoPronto = SommaTempi(OraCorrente, TempoCottura)
print "Il Tempo di Cottura e' di :",(PastoPronto)
Modificando questo codice ed inserendo quello che mi dice il libro, dovrebbe venir fuori questo :
class Tempo:
pass
OraCorrente = Tempo()
OraCorrente.Ore = 9
OraCorrente.Minuti = 30
OraCorrente.Secondi = 40
TempoCottura = Tempo()
TempoCottura.Ore = 3
TempoCottura.Minuti = 40
TempoCottura.Secondi = 30
def SommaTempi(T1, T2):
Somma = Tempo()
Somma.Ore = T1.Ore + T2.Ore
Somma.Minuti = T1.Minuti + T2.Minuti
Somma.Secondi = T1.Secondi + T2.Secondi
def Incremento(Tempo, Secondi):
Tempo.Secondi = Tempo.Secondi + Secondi
while Somma.Secondi >= 60:
Tempo.Secondi = Tempo.Secondi -60
Tempo.Minuti = Tempo.Minuti +1
while Tempo.Minuti >= 60:
Tempo.Minuti = Tempo.Minuti -60
Tempo.Ore = Tempo.Ore +1
return Tempo.Ore, Tempo.Minuti, Tempo.Secondi
PastoPronto = SommaTempi(OraCorrente, TempoCottura)
print "Il Tempo di Cottura e' di :",(PastoPronto)
Che come risultato evidenzia :
Il Tempo di Cottura e' di : None
Siccome non mi da un errore, credo che non riesca a capire come calcolare,
~FullSyst3m~
11-04-2009, 12:10
class Tempo:
pass
OraCorrente = Tempo()
OraCorrente.ore = 11
OraCorrente.minuti = 51
OraCorrente.secondi = 00
TempoCottura = Tempo()
TempoCottura.ore = 3
TempoCottura.minuti = 35
TempoCottura.secondi = 00
def StampaTempo (Tempo):
print "Il tempo di cottura e' di:", Tempo.ore, ":", Tempo.minuti, ":", Tempo.secondi
def SommaTempi(Time, Time2):
Somma = Tempo()
Somma.ore = Time.ore + Time2.ore
Somma.minuti = Time.minuti + Time2.minuti
Somma.secondi = Time.secondi + Time2.secondi
if Somma.secondi >= 60:
Somma.secondi = Somma.secondi - 60
Somma.minuti = Somma.minuti + 1
if Somma.minuti >= 60:
Somma.minuti = Somma.minuti - 60
Somma.ore = Somma.ore + 1
return Somma
def Incremento(Tempo, Secondi):
Tempo.secondi = Tempo.secondi + Secondi
while Tempo.secondi >= 60:
Tempo.secondi = Tempo.secondi - 60
Tempo.minuti = Tempo.minuti + 1
while Tempo.minuti >= 60:
Tempo.minuti = Tempo.minuti - 60
Tempo.ore = Tempo.ore + 1
PastoPronto = SommaTempi(OraCorrente, TempoCottura)
StampaTempo(PastoPronto)
nuvolare
13-04-2009, 19:38
Ok, grazie per la tua risposta ed anche se è passata spero che abbiate passato tutti una felice Pasqua.
Scusami ma perché fai questa operazione?
def StampaTempo (Tempo):
print "Il tempo di cottura e' di:", Tempo.ore, ":", Tempo.minuti, ":", Tempo.secondi
Io nell'esercizio precedente ho creato questo codice :
class Tempo:
pass
OraCorrente = Tempo()
OraCorrente.Ore = 9
OraCorrente.Minuti = 30
OraCorrente.Secondi = 40
TempoCottura = Tempo()
TempoCottura.Ore = 3
TempoCottura.Minuti = 40
TempoCottura.Secondi = 30
def SommaTempi(T1, T2):
Somma = Tempo()
Somma.Ore = T1.Ore + T2.Ore
Somma.Minuti = T1.Minuti + T2.Minuti
Somma.Secondi = T1.Secondi + T2.Secondi
if Somma.Secondi >= 60:
Somma.Secondi = Somma.Secondi -60
Somma.Minuti = Somma.Minuti +1
if Somma.Minuti >= 60:
Somma.Minuti = Somma.Minuti -60
Somma.Ore = Somma.Ore +1
return Somma.Ore, Somma.Minuti, Somma.Secondi
PastoPronto = SommaTempi(OraCorrente, TempoCottura)
print "Il Tempo di Cottura e' di :",(PastoPronto)
Come puoi vedere alla fine ho inserito print..... perché se inserisco, StampaTempo, come riporta il libro, mi da un errore.
Ok, grazie per la tua risposta ed anche se è passata spero che abbiate passato tutti una felice Pasqua.
Scusami ma perché fai questa operazione?
def StampaTempo (Tempo):
print "Il tempo di cottura e' di:", Tempo.ore, ":", Tempo.minuti, ":", Tempo.secondi
Io nell'esercizio precedente ho creato questo codice :
class Tempo:
pass
OraCorrente = Tempo()
OraCorrente.Ore = 9
OraCorrente.Minuti = 30
OraCorrente.Secondi = 40
TempoCottura = Tempo()
TempoCottura.Ore = 3
TempoCottura.Minuti = 40
TempoCottura.Secondi = 30
def SommaTempi(T1, T2):
Somma = Tempo()
Somma.Ore = T1.Ore + T2.Ore
Somma.Minuti = T1.Minuti + T2.Minuti
Somma.Secondi = T1.Secondi + T2.Secondi
if Somma.Secondi >= 60:
Somma.Secondi = Somma.Secondi -60
Somma.Minuti = Somma.Minuti +1
if Somma.Minuti >= 60:
Somma.Minuti = Somma.Minuti -60
Somma.Ore = Somma.Ore +1
return Somma.Ore, Somma.Minuti, Somma.Secondi
PastoPronto = SommaTempi(OraCorrente, TempoCottura)
print "Il Tempo di Cottura e' di :",(PastoPronto)
Come puoi vedere alla fine ho inserito print..... perché se inserisco, StampaTempo, come riporta il libro, mi da un errore.
E' normale che ti dà errore, perché il metodo StampaTempo non è definito nella tua classe.
nuvolare
13-04-2009, 19:56
Partendo da quello mio ho controllato e cambiato alcune codici, cercando di mantenere la linea logica che stavo seguendo ed ho creato questa situazione :
class Tempo:
pass
OraCorrente = Tempo()
OraCorrente.Ore = 9
OraCorrente.Minuti = 30
OraCorrente.Secondi = 40
TempoCottura = Tempo()
TempoCottura.Ore = 3
TempoCottura.Minuti = 59
TempoCottura.Secondi = 59
def SommaTempi(T1, T2):
Somma = Tempo()
Somma.Ore = T1.Ore + T2.Ore
Somma.Minuti = T1.Minuti + T2.Minuti
Somma.Secondi = T1.Secondi + T2.Secondi
if Somma.Secondi >= 60:
Somma.Secondi = Somma.Secondi -60
Somma.Minuti = Somma.Minuti +1
if Somma.Minuti >= 60:
Somma.Minuti = Somma.Minuti -60
Somma.Ore = Somma.Ore +1
return Somma.Ore, Somma.Minuti, Somma.Secondi
def Incremento(Tempo, Secondi):
Tempo.secondi = Tempo.secondi + Secondi
while Tempo.secondi >= 60:
Tempo.secondi = Tempo.secondi - 60
Tempo.minuti = Tempo.minuti + 1
while Tempo.minuti >= 60:
Tempo.minuti = Tempo.minuti - 60
Tempo.ore = Tempo.ore + 1
PastoPronto = SommaTempi(OraCorrente, TempoCottura)
print "Il Tempo di Cottura e' di :",(PastoPronto)
Il risultato mi sembra lo stesso, ma non riesco a definire le differenze di codici tra il tuo ed il mio
Partendo da quello mio ho controllato e cambiato alcune codici, cercando di mantenere la linea logica che stavo seguendo ed ho creato questa situazione :
cut...
Il risultato mi sembra lo stesso, ma non riesco a definire le differenze di codici tra il tuo ed il mio
Ma non c'è alcuna differenza sostanziale. In pratica lui ha definito un nuovo metodo che riceve in ingresso una variabile PastoPronto di tipo Tempo, che è a sua colta il valore restituito dal metodo SommaTempi(OraCorrente, TempoCottura) e stampa il tutto con un "print".
Tu invece stampi direttamente il risultato con "print" senza invocare metodi precedentemente definiti. Tutto qui.
~FullSyst3m~
13-04-2009, 20:13
Ma non c'è alcuna differenza sostanziale. In pratica lui ha definito un nuovo metodo che riceve in ingresso una variabile PastoPronto di tipo Tempo, che è a sua colta il valore restituito dal metodo SommaTempi(OraCorrente, TempoCottura) e stampa il tutto con un "print".
Tu invece stampi direttamente il risultato con "print" senza invocare metodi precedentemente definiti. Tutto qui.
E apparte questo io ho scritto quella classe perchè più avanti il libro la mostra, ma sarebbe dogvuta andare prima.
nuvolare
13-04-2009, 20:33
Ok, ed invece per quanto riguarda il passaggio
def StampaTempo (Tempo):
print "Il tempo di cottura e' di:", Tempo.ore, ":", Tempo.minuti, ":", Tempo.secondi
Scusate le domande, ma siccome avvolte il libro non mi porta a seguire un filo logico, mi ritrovo a raggiungere diverse soluzioni senza capire le differenze.
nuvolare
14-04-2009, 11:32
Giusto per capire, ma in questo caso :
class Tempo:
pass
OraCorrente = Tempo()
OraCorrente.Ore = 9
OraCorrente.Minuti = 30
OraCorrente.Secondi = 40
TempoCottura = Tempo()
TempoCottura.Ore = 3
TempoCottura.Minuti = 40
TempoCottura.Secondi = 30
def SommaTempi(T1, T2):
Somma = Tempo()
Somma.Ore = T1.Ore + T2.Ore
Somma.Minuti = T1.Minuti + T2.Minuti
Somma.Secondi = T1.Secondi + T2.Secondi
def Incremento(Tempo, Secondi):
Tempo.Secondi = Tempo.Secondi + Secondi
while Somma.Secondi >= 60:
Tempo.Secondi = Tempo.Secondi -60
Tempo.Minuti = Tempo.Minuti +1
while Tempo.Minuti >= 60:
Tempo.Minuti = Tempo.Minuti -60
Tempo.Ore = Tempo.Ore +1
return Tempo.Ore, Tempo.Minuti, Tempo.Secondi
PastoPronto = SommaTempi(OraCorrente, TempoCottura)
print "Il Tempo di Cottura e' di :",(PastoPronto)
Mi visualizza un errore del tipo :
L'rario di cottura e' di : None
Cosa significa questo?
~FullSyst3m~
14-04-2009, 11:55
Giusto per capire, ma in questo caso :
class Tempo:
pass
OraCorrente = Tempo()
OraCorrente.Ore = 9
OraCorrente.Minuti = 30
OraCorrente.Secondi = 40
TempoCottura = Tempo()
TempoCottura.Ore = 3
TempoCottura.Minuti = 40
TempoCottura.Secondi = 30
def SommaTempi(T1, T2):
Somma = Tempo()
Somma.Ore = T1.Ore + T2.Ore
Somma.Minuti = T1.Minuti + T2.Minuti
Somma.Secondi = T1.Secondi + T2.Secondi
def Incremento(Tempo, Secondi):
Tempo.Secondi = Tempo.Secondi + Secondi
while Somma.Secondi >= 60:
Tempo.Secondi = Tempo.Secondi -60
Tempo.Minuti = Tempo.Minuti +1
while Tempo.Minuti >= 60:
Tempo.Minuti = Tempo.Minuti -60
Tempo.Ore = Tempo.Ore +1
return Tempo.Ore, Tempo.Minuti, Tempo.Secondi
PastoPronto = SommaTempi(OraCorrente, TempoCottura)
print "Il Tempo di Cottura e' di :",(PastoPronto)
Mi visualizza un errore del tipo :
L'rario di cottura e' di : None
Cosa significa questo?
SommaTempi non ritorna nulla, quindi quello che viene stampato è appunto None.
nuvolare
14-04-2009, 12:58
SommaTempi non ritorna nulla, quindi quello che viene stampato è appunto None.
Scusami, ma SommaTempi perché non restituisce nulla, perché non ha collegamenti o perché ho fatto degli errori? i dati mi sembra che ci siano da sommare giuto?
~FullSyst3m~
14-04-2009, 13:24
Scusami, ma SommaTempi perché non restituisce nulla, perché non ha collegamenti o perché ho fatto degli errori? i dati mi sembra che ci siano da sommare giuto?
Non ritorna nulla perchè non c'è nessun return. Il return è l'istruzione che ritorna qualcosa e con il print tu la stampi, ma se la funzione non ritorna nulla (None appunto) allora stamperai None.
nuvolare
15-04-2009, 10:33
Non ritorna nulla perchè non c'è nessun return. Il return è l'istruzione che ritorna qualcosa e con il print tu la stampi, ma se la funzione non ritorna nulla (None appunto) allora stamperai None.
Ok, ma il return non ha collegamenti con il codice precedente? Io mi confondo, cerco sempre di dare dei collegamenti logici, tipo in C quindi se nel codice ci metto il return poi istintivamente vado a riprendermi quel return per farci altro, invece basta semplicemente ritornare il valore?
Ti faccio vedere un esperimento che ho fatto per uscire un pò fuori dal libro, anche se sono sempre gli stessi parametri.
class Tempo:
pass
OraDecollo = Tempo()
OraDecollo.Ore = 20
OraDecollo.Minuti = 30
TempoVolo = Tempo()
TempoVolo.Ore = 1
TempoVolo.Minuti = 30
def OraArrivo1(A1, A2):
Somma1 = Tempo()
Somma1.Ore = A1.Ore + A2.Ore
Somma1.Minuti = A1.Minuti + A2.Minuti
if Somma1.Minuti >= 60:
Somma1.Minuti = Somma1.Minuti - 60
Somma1.Ore = Somma1.Ore +1
return Somma1.Ore, Somma1.Minuti
OrarioArrivo = OraArrivo1(OraDecollo, TempoVolo)
print "L'orario di Arrivo e' previsto alle ore :", (OrarioArrivo)
In questo caso il return c'è, ma io non lo riprendo, (es. facendo print return) ma è sufficiente per non farmi stampare il "None"
Quindi la domanda che mi pongo è :
Se io volessi riprendere quei parametri, che sono la somma dei due Tempi (OraDecollo + TempoVolo), per ampliare questo esercizio, dove trovo i dati, sul return oppure su OrarioArrivo?
~FullSyst3m~
15-04-2009, 10:44
Ok, ma il return non ha collegamenti con il codice precedente? Io mi confondo, cerco sempre di dare dei collegamenti logici, tipo in C quindi se nel codice ci metto il return poi istintivamente vado a riprendermi quel return per farci altro, invece basta semplicemente ritornare il valore?
Ti faccio vedere un esperimento che ho fatto per uscire un pò fuori dal libro, anche se sono sempre gli stessi parametri.
class Tempo:
pass
OraDecollo = Tempo()
OraDecollo.Ore = 20
OraDecollo.Minuti = 30
TempoVolo = Tempo()
TempoVolo.Ore = 1
TempoVolo.Minuti = 30
def OraArrivo1(A1, A2):
Somma1 = Tempo()
Somma1.Ore = A1.Ore + A2.Ore
Somma1.Minuti = A1.Minuti + A2.Minuti
if Somma1.Minuti >= 60:
Somma1.Minuti = Somma1.Minuti - 60
Somma1.Ore = Somma1.Ore +1
return Somma1.Ore, Somma1.Minuti
OrarioArrivo = OraArrivo1(OraDecollo, TempoVolo)
print "L'orario di Arrivo e' previsto alle ore :", (OrarioArrivo)
In questo caso il return c'è, ma io non lo riprendo, (es. facendo print return) ma è sufficiente per non farmi stampare il "None"
Quindi la domanda che mi pongo è :
Se io volessi riprendere quei parametri, che sono la somma dei due Tempi (OraDecollo + TempoVolo), per ampliare questo esercizio, dove trovo i dati, sul return oppure su OrarioArrivo?
Il return ritorna qualcosa. Il None non c'è più perchè ora la funzione ritorna quei due valori. Tu con i valori ritornati da una funzione puoi farci ciò che vuoi: passarli ad un'altra funzione, assegnarli ad una variabile, stamparli.
Nel tuo caso OrarioArrivo = Somma1.Ore, Somma1.Minuti
def ritorna(n):
return n*n
ritorna(4)
print ritorna(4)
a = ritorna(4)
print a
nuvolare
15-04-2009, 18:05
Adesso ho cercato di aggiungere il secondo passaggio a quello precedente, ma non riesco a riprendere i dati del 1° come ti dicevo.
class Tempo:
pass
OraDecollo = Tempo()
OraDecollo.Ore = 20
OraDecollo.Minuti = 30
TempoVolo = Tempo()
TempoVolo.Ore = 1
TempoVolo.Minuti = 40
def OraArrivo1(A1, A2):
Somma1 = Tempo()
Somma1.Ore = A1.Ore + A2.Ore
Somma1.Minuti = A1.Minuti + A2.Minuti
if Somma1.Minuti >= 60:
Somma1.Minuti = Somma1.Minuti - 60
Somma1.Ore = Somma1.Ore +1
return Somma1.Ore, Somma1.Minuti
OrarioArrivo = OraArrivo1(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", (OrarioArrivo)
TempoVolo2 = Tempo()
TempoVolo2.Ore = 1
TempoVolo2.Minuti = 07
def OraArrivo2(A2, B1):
Somma2 = Tempo()
Somma2.Ore = B1.Ore + A2.Ore
Somma2.Minuti = B1.Minuti + A2.Minuti
if Somma2.Minuti >= 60:
Somma2.Minuti = Somma2.Minuti - 60
Somma2.Ore = Somma2.Ore +1
return Somma2.Ore, Somma2.Minuti
OrarioArrivo2 = OraArrivo2(OrarioArrivo, TempoVolo2)
print "L'orario di Arrivo al Secondo aeroporto e' previsto alle ore :", (OrarioArrivo2)
L'errore che visualizzo è :
L'orario di Arrivo al Primo aeroporto e' previsto alle ore : (22, 10)
Traceback (most recent call last):
File "/Users/salvatore/Python/Elisoccorso.py", line 41, in <module>
OrarioArrivo2 = OraArrivo2(OrarioArrivo, TempoVolo2)
File "/Users/salvatore/Python/Elisoccorso.py", line 32, in OraArrivo2
Somma2.Ore = B1.Ore + A2.Ore
AttributeError: 'tuple' object has no attribute 'Ore'
~FullSyst3m~
15-04-2009, 19:48
Adesso ho cercato di aggiungere il secondo passaggio a quello precedente, ma non riesco a riprendere i dati del 1° come ti dicevo.
class Tempo:
pass
OraDecollo = Tempo()
OraDecollo.Ore = 20
OraDecollo.Minuti = 30
TempoVolo = Tempo()
TempoVolo.Ore = 1
TempoVolo.Minuti = 40
def OraArrivo1(A1, A2):
Somma1 = Tempo()
Somma1.Ore = A1.Ore + A2.Ore
Somma1.Minuti = A1.Minuti + A2.Minuti
if Somma1.Minuti >= 60:
Somma1.Minuti = Somma1.Minuti - 60
Somma1.Ore = Somma1.Ore +1
return Somma1.Ore, Somma1.Minuti
OrarioArrivo = OraArrivo1(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", (OrarioArrivo)
TempoVolo2 = Tempo()
TempoVolo2.Ore = 1
TempoVolo2.Minuti = 07
def OraArrivo2(A2, B1):
Somma2 = Tempo()
Somma2.Ore = B1.Ore + A2.Ore
Somma2.Minuti = B1.Minuti + A2.Minuti
if Somma2.Minuti >= 60:
Somma2.Minuti = Somma2.Minuti - 60
Somma2.Ore = Somma2.Ore +1
return Somma2.Ore, Somma2.Minuti
OrarioArrivo2 = OraArrivo2(OrarioArrivo, TempoVolo2)
print "L'orario di Arrivo al Secondo aeroporto e' previsto alle ore :", (OrarioArrivo2)
L'errore che visualizzo è :
L'orario di Arrivo al Primo aeroporto e' previsto alle ore : (22, 10)
Traceback (most recent call last):
File "/Users/salvatore/Python/Elisoccorso.py", line 41, in <module>
OrarioArrivo2 = OraArrivo2(OrarioArrivo, TempoVolo2)
File "/Users/salvatore/Python/Elisoccorso.py", line 32, in OraArrivo2
Somma2.Ore = B1.Ore + A2.Ore
AttributeError: 'tuple' object has no attribute 'Ore'
Scusa, ma tu in pratica cosa vuoi sapere? Cosa non capisci?
nuvolare
15-04-2009, 19:51
Come prendere il parametro dato dal precedente e sommarlo al successivo, quindi ad OraArrivo devo sommare 1 ora e 07 minuti(in questo caso) che poi verrà chiamato OraArrivo2
Attento, non so se hai notato ma stai scrivendo codice ridondante e di difficile lettura.
Per quanto riguarda il return scrivere in python: oggetto1, oggetto2 equivale a scrivere (oggetto1, oggetto2) ovvero una tupla. Per accedere al suo contenuto puoi usare il tuple unpacking:
OreArrivo, MinutiArrivo = OraArrivo1(OraDecollo, TempoVolo)
Oppure accedere al suo contenuto tramite indici:
OrarioArrivo = OraArrivo1(OraDecollo, TempoVolo)
OreArrivo = OrarioArrivo[0]
MinutiArrivo = OrarioArrivo[1]
PS: per convenzione sarebbe meglio scrivere i nomi dei metodi con la lettera iniziale minuscola
~FullSyst3m~
16-04-2009, 00:55
Attento, non so se hai notato ma stai scrivendo codice ridondante e di difficile lettura.
Per quanto riguarda il return scrivere in python: oggetto1, oggetto2 equivale a scrivere (oggetto1, oggetto2) ovvero una tupla. Per accedere al suo contenuto puoi usare il tuple unpacking:
OreArrivo, MinutiArrivo = OraArrivo1(OraDecollo, TempoVolo)
Oppure accedere al suo contenuto tramite indici:
OrarioArrivo = OraArrivo1(OraDecollo, TempoVolo)
OreArrivo = OrarioArrivo[0]
MinutiArrivo = OrarioArrivo[1]
PS: per convenzione sarebbe meglio scrivere i nomi dei metodi con la lettera iniziale minuscola
Quoto, ma apparte questo si è confuso proprio per come è strutturato il libro. Dovrebbe ripassare un pò i capitoli precedenti.
nuvolare
17-04-2009, 19:22
Quoto, ma apparte questo si è confuso proprio per come è strutturato il libro. Dovrebbe ripassare un pò i capitoli precedenti.
Quoto e stra quoto :D
Si credo che ho fatto un pò di confusione, infatti mi sto rivedendo le funzioni e il return, ma non perché non sappia cosa siano, ma magari perché non ho ben afferrato il modo di applicazione soprattutto quando si complicano le cose.
~FullSyst3m~
17-04-2009, 20:18
Quoto e stra quoto :d
Si credo che ho fatto un pò di confusione, infatti mi sto rivedendo le funzioni e il return, ma non perché non sappia cosa siano, ma magari perché non ho ben afferrato il modo di applicazione soprattutto quando si complicano le cose.
Per chi non ha mai programmato quel libro fa venire questi dubbi, li ho avuti pure io quando avevo inziato lì. Poi leggendo altre guide e facendo un pò di pratica tutto è più chiaro.
nuvolare
26-04-2009, 18:31
ok, ritorno con la situazione più chiara visto che mi era sfuggita :D
Ho provato a creare qualcosa che mi possa aiutare a capire, che ha dei parametri diversi dal normale Tempo di cottura riportato sul libro.
Partenza = 10.00
TempoCorsa = 01.30
TempoSosta = 00.15
TempoCorsa2 = 00.10
TempoSosta2 = 00.30
TempoCorsa3 = 01.30
def StampaNumero(A1):
print "L'orario di rientro e' previsto alle ore:", A1
def StampaArrivo1(B1):
print "L'orario di Arrivo alla 1 sosta e' previsto alle ore:", B1
def StampaDecollo2(D1):
print "L'orario di Partenza dalla 1 sosta e' previsto alle ore:", D1
def StampaArrivo2(C1):
print "L'orario di Arrivo alla 2 sosta e' previsto alle ore:", C1
def StampaDecollo3(E1):
print "L'orario di Partenza dalla 3 sosta e' previsto alle ore:", E1
def OrarioDecollo3(Partenza, TempoCorsa):
UltimoTratto = Partenza + TempoCorsa
UltimoTratto1 = UltimoTratto + TempoSosta
UltimoTratto2 = UltimoTratto1 + TempoCorsa2
UltimoTratto3 = UltimoTratto2 + TempoSosta2
return(UltimoTratto3)
def OrarioArrivo(Partenza, TempoCorsa):
Somma1 = Partenza + TempoCorsa
Somma2 = Somma1 + TempoSosta
Somma3 = Somma2 + TempoCorsa2
Somma4 = Somma3 + TempoSosta2
Somma5 = Somma4 + TempoCorsa3
return(Somma5)
def Partenza2(Partenza, TempoCorsa):
Decollo2 = Partenza + TempoCorsa + TempoSosta
return(Decollo2)
def OrarioArrivo1(Partenza, TempoCorsa):
Time = Partenza + TempoCorsa
return(Time)
def OrarioArrivo2(Partenza, TempoCorsa):
Step = Partenza + TempoCorsa
Step2 = Step + TempoSosta + TempoCorsa2
return(Step2)
TimeArrivo1 = OrarioArrivo1(Partenza, TempoCorsa)
StampaArrivo1(TimeArrivo1)
TimeDecollo2 = Partenza2(Partenza, TempoCorsa)
StampaDecollo2(TimeDecollo2)
TimeArrivo2 = OrarioArrivo2(Partenza, TempoCorsa)
StampaArrivo2(TimeArrivo2)
TimeDecollo3 = OrarioDecollo3(Partenza, TempoCorsa)
StampaDecollo3(TimeDecollo3)
TimeArrivo = OrarioArrivo(Partenza, TempoCorsa)
StampaNumero(TimeArrivo)
Questo stampa il risultato quasi voluto e cioè
L'orario di Arrivo alla 1 sosta e' previsto alle ore: 11.3
L'orario di Partenza dalla 1 sosta e' previsto alle ore: 11.45
L'orario di Arrivo alla 2 sosta e' previsto alle ore: 11.55
L'orario di Partenza dalla 3 sosta e' previsto alle ore: 11.85
L'orario di rientro e' previsto alle ore: 13.15
Come potete vedere, ci sono dei parametri che non rispettano l'ora di 60 minuti. A questo punto per applicare il parametro if dovrei applicarlo a TimeDecollo vacendo questo:
if TimeDecollo2 % 10 >= 60:
TimeArrivo2 + 1
oppure ad un altro parametro tipo Somma5 facendo:
if Somma5 % 10 >= 60:
Somma5 - 60
Partenza2 + 1
return(Somma5)
Spero di essere stato chiaro...
P.S.
Tra le 1000 prove che ho fatto e uscita una cose del genere:
Il Tempo di Arrivo e previsto alle ore : <__main__.Tempo instance at 0x68698>
Che vuol dire?
grazie
~FullSyst3m~
26-04-2009, 20:06
ok, ritorno con la situazione più chiara visto che mi era sfuggita :D
Ho provato a creare qualcosa che mi possa aiutare a capire, che ha dei parametri diversi dal normale Tempo di cottura riportato sul libro.
Partenza = 10.00
TempoCorsa = 01.30
TempoSosta = 00.15
TempoCorsa2 = 00.10
TempoSosta2 = 00.30
TempoCorsa3 = 01.30
def StampaNumero(A1):
print "L'orario di rientro e' previsto alle ore:", A1
def StampaArrivo1(B1):
print "L'orario di Arrivo alla 1 sosta e' previsto alle ore:", B1
def StampaDecollo2(D1):
print "L'orario di Partenza dalla 1 sosta e' previsto alle ore:", D1
def StampaArrivo2(C1):
print "L'orario di Arrivo alla 2 sosta e' previsto alle ore:", C1
def StampaDecollo3(E1):
print "L'orario di Partenza dalla 3 sosta e' previsto alle ore:", E1
def OrarioDecollo3(Partenza, TempoCorsa):
UltimoTratto = Partenza + TempoCorsa
UltimoTratto1 = UltimoTratto + TempoSosta
UltimoTratto2 = UltimoTratto1 + TempoCorsa2
UltimoTratto3 = UltimoTratto2 + TempoSosta2
return(UltimoTratto3)
def OrarioArrivo(Partenza, TempoCorsa):
Somma1 = Partenza + TempoCorsa
Somma2 = Somma1 + TempoSosta
Somma3 = Somma2 + TempoCorsa2
Somma4 = Somma3 + TempoSosta2
Somma5 = Somma4 + TempoCorsa3
return(Somma5)
def Partenza2(Partenza, TempoCorsa):
Decollo2 = Partenza + TempoCorsa + TempoSosta
return(Decollo2)
def OrarioArrivo1(Partenza, TempoCorsa):
Time = Partenza + TempoCorsa
return(Time)
def OrarioArrivo2(Partenza, TempoCorsa):
Step = Partenza + TempoCorsa
Step2 = Step + TempoSosta + TempoCorsa2
return(Step2)
TimeArrivo1 = OrarioArrivo1(Partenza, TempoCorsa)
StampaArrivo1(TimeArrivo1)
TimeDecollo2 = Partenza2(Partenza, TempoCorsa)
StampaDecollo2(TimeDecollo2)
TimeArrivo2 = OrarioArrivo2(Partenza, TempoCorsa)
StampaArrivo2(TimeArrivo2)
TimeDecollo3 = OrarioDecollo3(Partenza, TempoCorsa)
StampaDecollo3(TimeDecollo3)
TimeArrivo = OrarioArrivo(Partenza, TempoCorsa)
StampaNumero(TimeArrivo)
Questo stampa il risultato quasi voluto e cioè
L'orario di Arrivo alla 1 sosta e' previsto alle ore: 11.3
L'orario di Partenza dalla 1 sosta e' previsto alle ore: 11.45
L'orario di Arrivo alla 2 sosta e' previsto alle ore: 11.55
L'orario di Partenza dalla 3 sosta e' previsto alle ore: 11.85
L'orario di rientro e' previsto alle ore: 13.15
Come potete vedere, ci sono dei parametri che non rispettano l'ora di 60 minuti. A questo punto per applicare il parametro if dovrei applicarlo a TimeDecollo vacendo questo:
if TimeDecollo2 % 10 >= 60:
TimeArrivo2 + 1
oppure ad un altro parametro tipo Somma5 facendo:
if Somma5 % 10 >= 60:
Somma5 - 60
Partenza2 + 1
return(Somma5)
Spero di essere stato chiaro...
P.S.
Tra le 1000 prove che ho fatto e uscita una cose del genere:
Il Tempo di Arrivo e previsto alle ore : <__main__.Tempo instance at 0x68698>
Che vuol dire?
grazie
Vuol dire che hai stampato l'indirizzo della funzione e non quello che ritorna. In ogni caso perchè hai fatto
if TimeDecollo2 % 10 >= 60:
TimeArrivo2 + 1
Il libro questo lo fa vedere chiaro: devi controllare se i secondi o i minuti sono maggiori o uguali a 60. Perchè usi l'operatore resto?
nuvolare
26-04-2009, 20:13
Perché all'inizio del Cap 4 dice che il % può essere usato per astrarre la cifra più a destra di un numero x % 10 quindi, se non ho capito male, nel numero con la virgola tipo 10.85 dovrebbe astrarre 85.
nuvolare
26-04-2009, 22:44
Ho fatto la prova a fare quello che ti dicevo ed il risultato di :
10,85 % 10 è (10, 5)
10,85 % 100 è (10, 85)
Quindi se io voglio prendere solo i numeri dopo la virgola, quale operazione posso usare?
~FullSyst3m~
26-04-2009, 23:55
Ho fatto la prova a fare quello che ti dicevo ed il risultato di :
10,85 % 10 è (10, 5)
10,85 % 100 è (10, 85)
Quindi se io voglio prendere solo i numeri dopo la virgola, quale operazione posso usare?
Si serve pure a quello, ma in pratica è deprecato, non viene usato per niente, non ha un'utilità pratica reale.
Tornando a noi, sinceramente non mi sono mai posto il problema e non ho mai letto nulla a riguardo, ma una soluzione, anche se non elegante, potrebbe essere:
numero = "%f" % 85.50
print numero[3] + numero[4]
nuvolare
27-04-2009, 07:57
Ma in questo modo lui considera il dato (numero in questo caso) come 2 singoli numeri e cioè 5 e 0.
Infatti se faccio
numero = "%f" % 85.64
print numero[3] + numero[4] * 2
mi da come soluzione 644, perché moltiplica per 2 il dato 4.
Io vorrei invece scindere i due numeri 85.64
~FullSyst3m~
27-04-2009, 11:17
Ma in questo modo lui considera il dato (numero in questo caso) come 2 singoli numeri e cioè 5 e 0.
Infatti se faccio
numero = "%f" % 85.64
print numero[3] + numero[4] * 2
mi da come soluzione 644, perché moltiplica per 2 il dato 4.
Io vorrei invece scindere i due numeri 85.64
Puoi fare cosi:
numero = "%f" % 85.64
decimale = int(numero[3] + numero[4])
print decimale * 2
nuvolare
27-04-2009, 13:17
Ok, grazie visto che hai detto di non aver mai provato ti do ance questo:
from math import modf
fraz,int = modf(1.23456)
print fraz
nuvolare
28-04-2009, 01:00
Puoi fare cosi:
numero = "%f" % 85.64
decimale = int(numero[3] + numero[4])
print decimale * 2
Giusto per capire, ma se io scrivo
numero = "%d" % 85.64
decimale = int(numero[1] + numero[2])
print decimale
Questo è sbagliato, ma perché?
Quale invece la soluzione per richiamare al contrario solo la parte prima della virgola?
~FullSyst3m~
28-04-2009, 12:47
Ok, grazie visto che hai detto di non aver mai provato ti do ance questo:
from math import modf
fraz,int = modf(1.23456)
print fraz
A che serve di preciso? fraz mi viene 0.23456.
Questo è sbagliato, ma perché?
Quale invece la soluzione per richiamare al contrario solo la parte prima della virgola?
Perchè usi %d invece di %f e poi ricorda che gli indici in Python partono da 0.
numero = "%f" % 85.64
decimale = int(numero[0] + numero[1])
print decimale
nuvolare
28-04-2009, 15:00
A che serve di preciso? fraz mi viene 0.23456.
Ma è praticamente quello che mi hai dato tu, solo che usato sotto formule matematiche, io l'ho trovato cercando in giro
Perchè usi %d invece di %f e poi ricorda che gli indici in Python partono da 0.
numero = "%f" % 85.64
decimale = int(numero[0] + numero[1])
print decimale
Si hai ragione io la facevo più complicata, toglievo %f pensando che si riferisse ai floatting e mettevo %d come in C
~FullSyst3m~
28-04-2009, 17:00
Ma è praticamente quello che mi hai dato tu, solo che usato sotto formule matematiche, io l'ho trovato cercando in giro
Non è proprio uguale, ma l'importante che hai risolto. L'ho visto dove lo hai trovato comunque.
Si hai ragione io la facevo più complicata, toglievo %f pensando che si riferisse ai floatting e mettevo %d come in C
Il %d è per i numeri interi.
nuvolare
28-04-2009, 23:25
Ho questa situazione
L'orario di Partenza dalla 3 sosta e' previsto alle ore: 11.99
L'orario di rientro e' previsto alle ore: 13.29
che è la somma di vari passaggi.
Con l'aiuto di quel codice che mi hai dato ho creato questo:
TimeArrivo = OrarioArrivo(Partenza, TempoCorsa)
Decimale5 = "%f" % TimeArrivo
Intera5 = int(Decimale5[3] + Decimale5[4])
PartePrimaria5 = "%f" % TimeArrivo
InteraA5 = int(PartePrimaria5[0] + PartePrimaria5[1])
if Intera5 >= 60:
Intera5 = Intera5 - 60
InteraA5 = InteraA5 + 1
print "L'orario di rientro e' previsto alle ore:", InteraA5,":",Intera5
Che mi scompone l'ora in 2 parti e me la ripresenta calcolata, togliendo alla parte dopo la virgola 60 ed aggiungendo 1 alla parte intera prima della virgola.
Così facendo ottengo :
L'orario di Partenza dalla 3 sosta e' previsto alle ore: 12 : 39
L'orario di rientro e' previsto alle ore: 13 : 29
Il problema si presenta quando il contatore del numero 12:99 salta a 12:00 e che quindi non viene più considerato dalla formula if Intera >= 60: ma che in realtà sarebbe come se fossero 13:00, ma lui non mi toglie i 60 e non mi aggiunge una unità dall'altra parte.
C'è un modo per fargli capire anche questa cosa?
Una soluzione, ma dovrei stravolgere tutto, sarebbe quella di creare a questa situazione :
def OrarioArrivo1(Partenza, TempoCorsa):
Time = Partenza + TempoCorsa
return(Time)
Quest'altra che si trova a monte del calcolo.
Qui dovrei fare quel lavoro di scissione dei due valori, creando questa:
def OrarioArrivo1(Partenza, TempoCorsa):
Time = Partenza + TempoCorsa
Decimale = "%f" % OrarioArrivo1
Intera = int(Decimale[3] + Decimale[4])
PartePrimaria = "%f" % TimaArrivo1
InteraA = int(PartePrimaria[0] + PartePrimaria[1])
if Intera >= 60:
Intera = Intera - 60
InteraA = InteraA + 1
return(Time)
Il return(Time) che in realtà in questa posizione è sbagliato perché non ritorna più questo valore, quindi che deve ritornare? Può ritornare più valori e poi riunirli in un unico valore, che in teoria q a questo punto dovrebbe già essere corretto?
Lo so un macello!!! ma ho capito molte cose che non avevo afferrato bene creando questo programmino... :D
Se serve per capire posso allegarlo tutto, non so...
Grazie 1000
~FullSyst3m~
29-04-2009, 02:36
Ho questa situazione
L'orario di Partenza dalla 3 sosta e' previsto alle ore: 11.99
L'orario di rientro e' previsto alle ore: 13.29
che è la somma di vari passaggi.
Con l'aiuto di quel codice che mi hai dato ho creato questo:
TimeArrivo = OrarioArrivo(Partenza, TempoCorsa)
Decimale5 = "%f" % TimeArrivo
Intera5 = int(Decimale5[3] + Decimale5[4])
PartePrimaria5 = "%f" % TimeArrivo
InteraA5 = int(PartePrimaria5[0] + PartePrimaria5[1])
if Intera5 >= 60:
Intera5 = Intera5 - 60
InteraA5 = InteraA5 + 1
print "L'orario di rientro e' previsto alle ore:", InteraA5,":",Intera5
Che mi scompone l'ora in 2 parti e me la ripresenta calcolata, togliendo alla parte dopo la virgola 60 ed aggiungendo 1 alla parte intera prima della virgola.
Così facendo ottengo :
L'orario di Partenza dalla 3 sosta e' previsto alle ore: 12 : 39
L'orario di rientro e' previsto alle ore: 13 : 29
Il problema si presenta quando il contatore del numero 12:99 salta a 12:00 e che quindi non viene più considerato dalla formula if Intera >= 60: ma che in realtà sarebbe come se fossero 13:00, ma lui non mi toglie i 60 e non mi aggiunge una unità dall'altra parte.
C'è un modo per fargli capire anche questa cosa?
Una soluzione, ma dovrei stravolgere tutto, sarebbe quella di creare a questa situazione :
def OrarioArrivo1(Partenza, TempoCorsa):
Time = Partenza + TempoCorsa
return(Time)
Quest'altra che si trova a monte del calcolo.
Qui dovrei fare quel lavoro di scissione dei due valori, creando questa:
def OrarioArrivo1(Partenza, TempoCorsa):
Time = Partenza + TempoCorsa
Decimale = "%f" % OrarioArrivo1
Intera = int(Decimale[3] + Decimale[4])
PartePrimaria = "%f" % TimaArrivo1
InteraA = int(PartePrimaria[0] + PartePrimaria[1])
if Intera >= 60:
Intera = Intera - 60
InteraA = InteraA + 1
return(Time)
Il return(Time) che in realtà in questa posizione è sbagliato perché non ritorna più questo valore, quindi che deve ritornare? Può ritornare più valori e poi riunirli in un unico valore, che in teoria q a questo punto dovrebbe già essere corretto?
Lo so un macello!!! ma ho capito molte cose che non avevo afferrato bene creando questo programmino... :D
Se serve per capire posso allegarlo tutto, non so...
Grazie 1000
Adesso non vedo niente, ho gli occhi che mi si chiudono da soli, domani gli dò un'occhiata. In ogni caso hai capito perchè stai facendo pratica e ti impegni. Si vede che sei migliorato dalla prima volta ;)
Notte.
nuvolare
30-04-2009, 13:51
Continuo con le mie prove, ho tralasciato quell'esercizio poi quando avrò più esperienza lo continuerò, ma giusto per una questione di principio ormai.
Adesso ho ripreso lo stesso modificato e fatto in maniera diversa.
Io non capisco il problema però...
Quindi ho questo:
def OrarioDecollo(OraDecollo, TempoVolo):
Somma2 = Tempo()
Somma2.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore
Somma2.Minuti = OraDecollo.Minuti + TempoVolo.Minuti + TempoSosta.Minuti
if Somma2.Minuti >= 60:
Somma2.Minuti = Somma2.Minuti - 60
Somma2.Ore = Somma2.Ore +1
return Somma2.Ore, Somma2.Minuti
def OrarioArrivo(OraDecollo, TempoVolo):
Somma = Tempo()
Somma.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore + TempoVolo2.Ore
Somma.Minuti = OraDecollo.Minuti + TempoVolo.Minuti + TempoSosta.Minuti + TempoVolo2.Minuti
if Somma.Minuti >= 60:
Somma.Minuti = Somma.Minuti - 60
Somma.Ore = Somma.Ore +1
return Somma.Ore, Somma.Minuti
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo e' previsto alle ore :", OraArrivo2
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primoo e' previsto alle ore :", (OraArrivo)
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo e' previsto alle ore:", (OraDecollo)
che mi restituisce questo :
L'orario di arrivo al Terzo e' previsto alle ore : (12, 55)
L'orario di Arrivo al Primo e' previsto alle ore : (12, 55)
L'oraro di Arrivo al Secondo e' previsto alle ore: (12, 40)
Visto che il risultato lo dovrebbe dare al contrario ho invertito i parametri scrivendo OrarioArrivo2 dal primo posto all'ultimo posto, cos'ì da avere la visuale delle ore in fila:
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", (OraArrivo)
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", (OraDecollo)
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
Questo però mi da un errore, che mi dice:
L'orario di Arrivo al Primo e' previsto alle ore : (12, 55)
L'oraro di Arrivo al Secondo e' previsto alle ore: (12, 40)
Traceback (most recent call last):
File "/Users/nuvolare/Python/Esperimento.py", line 69, in <module>
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
File "/Users/nuvolare/Python/Esperimento.py", line 52, in OrarioArrivo
Somma.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore + TempoVolo2.Ore
AttributeError: 'tuple' object has no attribute 'Ore'
Ma è possibile che la modifica di posizione di un semplice parametro mi dia un errore?
~FullSyst3m~
30-04-2009, 17:45
Continuo con le mie prove, ho tralasciato quell'esercizio poi quando avrò più esperienza lo continuerò, ma giusto per una questione di principio ormai.
Adesso ho ripreso lo stesso modificato e fatto in maniera diversa.
Io non capisco il problema però...
Quindi ho questo:
def OrarioDecollo(OraDecollo, TempoVolo):
Somma2 = Tempo()
Somma2.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore
Somma2.Minuti = OraDecollo.Minuti + TempoVolo.Minuti + TempoSosta.Minuti
if Somma2.Minuti >= 60:
Somma2.Minuti = Somma2.Minuti - 60
Somma2.Ore = Somma2.Ore +1
return Somma2.Ore, Somma2.Minuti
def OrarioArrivo(OraDecollo, TempoVolo):
Somma = Tempo()
Somma.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore + TempoVolo2.Ore
Somma.Minuti = OraDecollo.Minuti + TempoVolo.Minuti + TempoSosta.Minuti + TempoVolo2.Minuti
if Somma.Minuti >= 60:
Somma.Minuti = Somma.Minuti - 60
Somma.Ore = Somma.Ore +1
return Somma.Ore, Somma.Minuti
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", (OraArrivo)
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", (OraArrivo)
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", (OraDecollo)
che mi restituisce questo :
L'orario di arrivo al Terzo e' previsto alle ore : (12, 55)
L'orario di Arrivo al Primo e' previsto alle ore : (12, 55)
L'oraro di Arrivo al Secondo e' previsto alle ore: (12, 40)
Visto che il risultato lo dovrebbe dare al contrario ho invertito i parametri scrivendo OrarioArrivo2 dal primo posto all'ultimo posto, cos'ì da avere la visuale delle ore in fila:
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", (OraArrivo)
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", (OraDecollo)
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
Questo però mi da un errore, che mi dice:
L'orario di Arrivo al Primo e' previsto alle ore : (12, 55)
L'oraro di Arrivo al Secondo e' previsto alle ore: (12, 40)
Traceback (most recent call last):
File "/Users/nuvolare/Python/Esperimento.py", line 69, in <module>
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
File "/Users/nuvolare/Python/Esperimento.py", line 52, in OrarioArrivo
Somma.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore + TempoVolo2.Ore
AttributeError: 'tuple' object has no attribute 'Ore'
Ma è possibile che la modifica di posizione di un semplice parametro mi dia un errore?
Qua non si tratta di cambiare solo il parametro o no. Allora, riguardo il tuo post di prima me lo ero dimenticato di guardarlo, ho un pò di impegni ultimamente, se vuoi poi gli dò un'occhiata, ma dovresti sbatterci un pò la testa tu. Per questo codice invece devi imparare a interpretare gli errori che ottieni. Qua ti dice che la tupla non ha un attributo Ore. Di conseguenza vuol dire che da qualche parte vuoi accede all'attributo Ore di una tupla.
Buona caccia.
nuvolare
30-04-2009, 19:32
Qua non si tratta di cambiare solo il parametro o no. Allora, riguardo il tuo post di prima me lo ero dimenticato di guardarlo, ho un pò di impegni ultimamente, se vuoi poi gli dò un'occhiata, ma dovresti sbatterci un pò la testa tu. Per questo codice invece devi imparare a interpretare gli errori che ottieni. Qua ti dice che la tupla non ha un attributo Ore. Di conseguenza vuol dire che da qualche parte vuoi accede all'attributo Ore di una tupla.
Buona caccia.
Io ci ho impiegato una mattina a fare prove, togli e metti, sposta ecc...
L'unica cosa che ho trovato è la differenza che ti dicevo prima spostando da così:
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", (OraArrivo)
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", (OraDecollo)
a così:
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", (OraArrivo)
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", (OraDecollo)
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
ed il risultato quello dell'errore delle tupe, niente altro....
Ma tu l'ho hai visto l'errore? :D
~FullSyst3m~
30-04-2009, 20:53
Io ci ho impiegato una mattina a fare prove, togli e metti, sposta ecc...
L'unica cosa che ho trovato è la differenza che ti dicevo prima spostando da così:
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", (OraArrivo)
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", (OraDecollo)
a così:
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", (OraArrivo)
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", (OraDecollo)
OraArrivo2 = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
ed il risultato quello dell'errore delle tupe, niente altro....
Ma tu l'ho hai visto l'errore? :D
Il codice è corto, basta leggere il traceback e l'errore si trova. Basta guardare attentamente la traccia e capisci dove è. Hai fatto un cambiamento che ha apportato questo errore, quindi...? Dai che ci arrivi ;)
nuvolare
01-05-2009, 18:19
nooo, io non ci capisco più nulla!!!
Ho smosso quasi tutto il codice e mi sono accertato che i nomi di ogni codice siano diversi, ma continuo a non capire dov'è il problema.
Io continuo ad ottenere il risultato solamente spostando il codice, come ti ho fatto vedere sopra
l'errore che mi stampa è :
L'orario di Arrivo e' previsto alle ore : (11, 25)
L'oraro di Arrivo al Secondo e' previsto alle ore: (12, 40)
Traceback (most recent call last):
File "/Users/nuvolare/Python/Elisoccorso.py", line 70, in <module>
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
File "/Users/nuvolare/Python/Esperimento.py", line 52, in OrarioArrivo2
Somma.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore + TempoVolo2.Ore
AttributeError: 'tuple' object has no attribute 'Ore'
Se vado a prendere le linee che mi dice lui, non trovo delle tupe e non trovo nemmeno il perché non ho attribute Ore.
Non so più...
~FullSyst3m~
02-05-2009, 15:15
nooo, io non ci capisco più nulla!!!
Ho smosso quasi tutto il codice e mi sono accertato che i nomi di ogni codice siano diversi, ma continuo a non capire dov'è il problema.
Io continuo ad ottenere il risultato solamente spostando il codice, come ti ho fatto vedere sopra
l'errore che mi stampa è :
L'orario di Arrivo e' previsto alle ore : (11, 25)
L'oraro di Arrivo al Secondo e' previsto alle ore: (12, 40)
Traceback (most recent call last):
File "/Users/nuvolare/Python/Elisoccorso.py", line 70, in <module>
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
File "/Users/nuvolare/Python/Esperimento.py", line 52, in OrarioArrivo2
Somma.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore + TempoVolo2.Ore
AttributeError: 'tuple' object has no attribute 'Ore'
Se vado a prendere le linee che mi dice lui, non trovo delle tupe e non trovo nemmeno il perché non ho attribute Ore.
Non so più...
Fai cosi. Posta tutto il codice che poi lo controllo.
P.S: riguardo le cifre decimali di un numero, mi sono venuti in mente gli indici negativi.
Ad esempio:
numero = "%f" % 90.10
decimale = numero[-2:]
nuvolare
02-05-2009, 20:42
Ok, allora questo è il codice completo:
class Tempo:
pass
OraDecollo = Tempo()
OraDecollo.Ore = 10
OraDecollo.Minuti = 10
TempoVolo = Tempo()
TempoVolo.Ore = 01
TempoVolo.Minuti = 15
TempoSosta = Tempo()
TempoSosta.Ore = 01
TempoSosta.Minuti = 15
TempoVolo2 = Tempo()
TempoVolo2.Ore = 00
TempoVolo2.Minuti = 15
TempoSosta2 = Tempo()
TempoSosta2.Ore = 02
TempoSosta2.Minuti = 30
TempoVolo3 = Tempo()
TempoVolo3.Ore = 01
TempoVolo3.Minuti = 30
def OrarioArrivo(OraDecollo, TempoVolo):
Somma1 = Tempo()
Somma1.Ore = OraDecollo.Ore + TempoVolo.Ore
Somma1.Minuti = OraDecollo.Minuti + TempoVolo.Minuti
if Somma1.Minuti >= 60:
Somma1.Minuti = Somma1.Minuti - 60
Somma1.Ore = Somma1.Ore +1
return Somma1.Ore, Somma1.Minuti
def OrarioDecollo(OraDecollo, TempoVolo):
Somma2 = Tempo()
Somma2.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore
Somma2.Minuti = OraDecollo.Minuti + TempoVolo.Minuti + TempoSosta.Minuti
if Somma2.Minuti >= 60:
Somma2.Minuti = Somma2.Minuti - 60
Somma2.Ore = Somma2.Ore +1
return Somma2.Ore, Somma2.Minuti
def OrarioArrivo2(OraDecollo, TempoVolo):
Somma = Tempo()
Somma.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore + TempoVolo2.Ore
Somma.Minuti = OraDecollo.Minuti + TempoVolo.Minuti + TempoSosta.Minuti + TempoVolo2.Minuti
if Somma.Minuti >= 60:
Somma.Minuti = Somma.Minuti - 60
Somma.Ore = Somma.Ore +1
return Somma.Ore, Somma.Minuti
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", OraArrivo
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", OraDecollo
Così funziona regolarmente, ma siccome stampa prima il terzo arrivo, ho sostituito in questo modo l'ultima parte del codice:
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", OraArrivo
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", OraDecollo
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
In questo caso ricevo l'errore di cui ti parlavo che è appunto :
L'orario di Arrivo e' previsto alle ore : (11, 25)
L'oraro di Arrivo al Secondo e' previsto alle ore: (12, 40)
Traceback (most recent call last):
File "/Users/nuvolare/Python/Elisoccorso.py", line 70, in <module>
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
File "/Users/nuvolare/Python/Esperimento.py", line 52, in OrarioArrivo2
Somma.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore + TempoVolo2.Ore
AttributeError: 'tuple' object has no attribute 'Ore'
~FullSyst3m~
02-05-2009, 21:00
Ok, allora questo è il codice completo:
class Tempo:
pass
OraDecollo = Tempo()
OraDecollo.Ore = 10
OraDecollo.Minuti = 10
TempoVolo = Tempo()
TempoVolo.Ore = 01
TempoVolo.Minuti = 15
TempoSosta = Tempo()
TempoSosta.Ore = 01
TempoSosta.Minuti = 15
TempoVolo2 = Tempo()
TempoVolo2.Ore = 00
TempoVolo2.Minuti = 15
TempoSosta2 = Tempo()
TempoSosta2.Ore = 02
TempoSosta2.Minuti = 30
TempoVolo3 = Tempo()
TempoVolo3.Ore = 01
TempoVolo3.Minuti = 30
def OrarioArrivo(OraDecollo, TempoVolo):
Somma1 = Tempo()
Somma1.Ore = OraDecollo.Ore + TempoVolo.Ore
Somma1.Minuti = OraDecollo.Minuti + TempoVolo.Minuti
if Somma1.Minuti >= 60:
Somma1.Minuti = Somma1.Minuti - 60
Somma1.Ore = Somma1.Ore +1
return Somma1.Ore, Somma1.Minuti
def OrarioDecollo(OraDecollo, TempoVolo):
Somma2 = Tempo()
Somma2.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore
Somma2.Minuti = OraDecollo.Minuti + TempoVolo.Minuti + TempoSosta.Minuti
if Somma2.Minuti >= 60:
Somma2.Minuti = Somma2.Minuti - 60
Somma2.Ore = Somma2.Ore +1
return Somma2.Ore, Somma2.Minuti
def OrarioArrivo2(OraDecollo, TempoVolo):
Somma = Tempo()
Somma.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore + TempoVolo2.Ore
Somma.Minuti = OraDecollo.Minuti + TempoVolo.Minuti + TempoSosta.Minuti + TempoVolo2.Minuti
if Somma.Minuti >= 60:
Somma.Minuti = Somma.Minuti - 60
Somma.Ore = Somma.Ore +1
return Somma.Ore, Somma.Minuti
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", OraArrivo
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", OraDecollo
Così funziona regolarmente, ma siccome stampa prima il terzo arrivo, ho sostituito in questo modo l'ultima parte del codice:
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", OraArrivo
OraDecollo = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", OraDecollo
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
In questo caso ricevo l'errore di cui ti parlavo che è appunto :
L'orario di Arrivo e' previsto alle ore : (11, 25)
L'oraro di Arrivo al Secondo e' previsto alle ore: (12, 40)
Traceback (most recent call last):
File "/Users/nuvolare/Python/Elisoccorso.py", line 70, in <module>
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
File "/Users/nuvolare/Python/Esperimento.py", line 52, in OrarioArrivo2
Somma.Ore = OraDecollo.Ore + TempoVolo.Ore + TempoSosta.Ore + TempoVolo2.Ore
AttributeError: 'tuple' object has no attribute 'Ore'
Questa volta te lo dico io, la prossima devi ragionarci su ;)
Se tu guardi, qui
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
Passi OraDecollo che altro non è che una tupla (OraDecollo = OrarioDecollo che torna una tupla), di conseguenza ottieni l'errore che segnalato dall'interprete.
nuvolare
02-05-2009, 21:15
e si!!! :muro:
Ti giuro che ho perso una giornata controllore e ricontrollare la situazione dei nomi, avevo capito che era qualcosa del genere, ma non so perché non lo vedevo...
Mi sembra come quando scrivi qualcosa e poi non trovi gli errori perché lo sai a memoria e non leggi più!!!!
Mi è bastato correggere il tutto in questo modo:
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", OraArrivo
OraDecollo23 = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", OraDecollo23
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
Per ottenere gli orari regolari come volevo... :D
Che dire!!!
Grazie
~FullSyst3m~
03-05-2009, 13:40
e si!!! :muro:
Ti giuro che ho perso una giornata controllore e ricontrollare la situazione dei nomi, avevo capito che era qualcosa del genere, ma non so perché non lo vedevo...
Mi sembra come quando scrivi qualcosa e poi non trovi gli errori perché lo sai a memoria e non leggi più!!!!
Mi è bastato correggere il tutto in questo modo:
OraArrivo = OrarioArrivo(OraDecollo, TempoVolo)
print "L'orario di Arrivo al Primo aeroporto e' previsto alle ore :", OraArrivo
OraDecollo23 = OrarioDecollo(OraDecollo, TempoVolo)
print "L'oraro di Arrivo al Secondo aeroporto e' previsto alle ore:", OraDecollo23
OraArrivo2 = OrarioArrivo2(OraDecollo, TempoVolo)
print "L'orario di arrivo al Terzo Aeroporto e' previsto alle ore :", OraArrivo2
Per ottenere gli orari regolari come volevo... :D
Che dire!!!
Grazie
Di niente ;)
nuvolare
10-05-2009, 10:37
Ho iniziato a fare l'ereditarietà, ed al capito 16.4 mi dice di provare mi da un errore se scrivo questo:
class Carta:
ListaSemi = ["Fiori", "Quadri", "Cuori", "Picche"]
ListaRanghi = ["impossibile", "Asso", "2", "3", "4", "5", "6", "7", "8",\
"9", "10", "Jack", "Regina", "Re"]
def __init__(self, Seme=0, Rango=0):
self.Seme = Seme
self.Rango = Rango
def __str__(self):
return (self.ListaRanghi[self.Rango] +" di "+ self.ListaSemi[self.Seme])
def __cmp__(self, Altro):
#controlla il seme
if self.Seme > Altro.Seme: return 1
if self.Seme < Altro.Seme: return -1
#se i semi sono uguali controlla Rango
if self.Rango > Altro.Rango: return 1
if self.Rango < Altro.Rango: return -1
#se anche i semi sono uguali allora ritorna 0
return 0
Carta1 = Carta(1, 1)
Carta2 = Carta(1, 13)
print Carta1 > Carta2
Carta1 = Carta(3, 11)
print Carta1
Carta2 = Carta(1, 3)
print Carta2
class Mazzo:
def __init__(self):
self.Carte = []
for Seme in range(4): #listaSemi sono 4
for Rango in range(1,14): #ListaRanghi va da 1 a 14
self.Carte.append(Carta(Seme, Rango))
def StampaMazzo(self):
for Carta in self.Carte:
print Carta
def __str__(self):
s=""
for i in range(len(self.Carte)):
s=s+str(self.Carte[i]) +"\n"
return s
def Mescola(self):
import random
NumCarte = len(self.Carte)
for i in range(NumCarte):
j = random.randrange(i, NumCarte)
self.Carte[i], self.Carte[j] = self.Carte[j], self.Carte[i]
def RimuoviCarta(self, Carta):
if Carta in self.Carte:
self.Carte.remove(Carta)
return 1
else:
return 0
def PrimaCarta(self):
return self.Carte.pop()
def EVuoto(self):
return(len(self.Carte) == 0)
def Distribuisci(self, ListaMani, NumCarte=999):
NumMani = len(ListaMani)
for i in range(NumCarte):
if self.EVuoto(): break
Carta = self.PrimaCarta()
Mano = ListaMani[i % NumMani]
Mano.AggiungiCarta(Carta)
class Mano(Mazzo):
def __init__ (self, nome=""):
self.Carte= []
self.Nome = Nome
def AggiungiCarta(self, Carta):
self.Carte.append(Carta)
def RimuoviCarta(self, Carta):
if Carta in self.Carte:
self.Carte.remove(Carta)
return 1
else:
return 0
Mazzo1 = Mazzo()
Mazzo1.Mescola()
Mano1 = ("Pippo")
Mazzo1.Distribuisci([Mano1], 5)
print Mazzo1
Mi da questo errore:
Traceback (most recent call last):
File "/Users/nuvolare/Python/Carta.py", line 103, in <module>
Mazzo1.Mescola()
AttributeError: Mazzo instance has no attribute 'Mescola'
ma per quale motivo? più che altro per sapere se ci sono errori di scrittura, che non vedo oppure è proprio un errore sul codice.
~FullSyst3m~
10-05-2009, 10:58
Ho iniziato a fare l'ereditarietà, ed al capito 16.4 mi dice di provare mi da un errore se scrivo questo:
class Carta:
ListaSemi = ["Fiori", "Quadri", "Cuori", "Picche"]
ListaRanghi = ["impossibile", "Asso", "2", "3", "4", "5", "6", "7", "8",\
"9", "10", "Jack", "Regina", "Re"]
def __init__(self, Seme=0, Rango=0):
self.Seme = Seme
self.Rango = Rango
def __str__(self):
return (self.ListaRanghi[self.Rango] +" di "+ self.ListaSemi[self.Seme])
def __cmp__(self, Altro):
#controlla il seme
if self.Seme > Altro.Seme: return 1
if self.Seme < Altro.Seme: return -1
#se i semi sono uguali controlla Rango
if self.Rango > Altro.Rango: return 1
if self.Rango < Altro.Rango: return -1
#se anche i semi sono uguali allora ritorna 0
return 0
Carta1 = Carta(1, 1)
Carta2 = Carta(1, 13)
print Carta1 > Carta2
Carta1 = Carta(3, 11)
print Carta1
Carta2 = Carta(1, 3)
print Carta2
class Mazzo:
def __init__(self):
self.Carte = []
for Seme in range(4): #listaSemi sono 4
for Rango in range(1,14): #ListaRanghi va da 1 a 14
self.Carte.append(Carta(Seme, Rango))
def StampaMazzo(self):
for Carta in self.Carte:
print Carta
def __str__(self):
s=""
for i in range(len(self.Carte)):
s=s+str(self.Carte[i]) +"\n"
return s
def Mescola(self):
import random
NumCarte = len(self.Carte)
for i in range(NumCarte):
j = random.randrange(i, NumCarte)
self.Carte[i], self.Carte[j] = self.Carte[j], self.Carte[i]
def RimuoviCarta(self, Carta):
if Carta in self.Carte:
self.Carte.remove(Carta)
return 1
else:
return 0
def PrimaCarta(self):
return self.Carte.pop()
def EVuoto(self):
return(len(self.Carte) == 0)
def Distribuisci(self, ListaMani, NumCarte=999):
NumMani = len(ListaMani)
for i in range(NumCarte):
if self.EVuoto(): break
Carta = self.PrimaCarta()
Mano = ListaMani[i % NumMani]
Mano.AggiungiCarta(Carta)
class Mano(Mazzo):
def __init__ (self, nome=""):
self.Carte= []
self.Nome = Nome
def AggiungiCarta(self, Carta):
self.Carte.append(Carta)
def RimuoviCarta(self, Carta):
if Carta in self.Carte:
self.Carte.remove(Carta)
return 1
else:
return 0
Mazzo1 = Mazzo()
Mazzo1.Mescola()
Mano1 = ("Pippo")
Mazzo1.Distribuisci([Mano1], 5)
print Mazzo1
Mi da questo errore:
Traceback (most recent call last):
File "/Users/nuvolare/Python/Carta.py", line 103, in <module>
Mazzo1.Mescola()
AttributeError: Mazzo instance has no attribute 'Mescola'
ma per quale motivo? più che altro per sapere se ci sono errori di scrittura, che non vedo oppure è proprio un errore sul codice.
E' un errore di indentazione. Mescola() è fuori dalla classe.
nuvolare
11-05-2009, 19:35
E' un errore di indentazione. Mescola() è fuori dalla classe.
E si! hai ragione...
Ma l'ereditarietà è importante nel contesto python?
Perché il libro parla come se su altri linguaggi di programmazione sia più importante che su Python.
Nel caso in cui questo sia vero preferirei andare avanti, poi magari ritornare ad approfondire perché non ho molto ben capito questo capitolo.
Se invece è indispensabile per la prosecuzione allora lo devo rivedere meglio.
~FullSyst3m~
11-05-2009, 19:39
E si! hai ragione...
Ma l'ereditarietà è importante nel contesto python?
Perché il libro parla come se su altri linguaggi di programmazione sia più importante che su Python.
Nel caso in cui questo sia vero preferirei andare avanti, poi magari ritornare ad approfondire perché non ho molto ben capito questo capitolo.
Se invece è indispensabile per la prosecuzione allora lo devo rivedere meglio.
L'ereditarietà è importante a prescindere dal linguaggio. Studiala e bene anche.
nuvolare
19-05-2009, 07:41
Ciao, dovrei scrivere delle cose con la necessità che il programma mi chieda quello che voglio scrivere. Sono quindi ritornato al cap 4.12, ma non mi ricordo come facevo e non trovo gli esercizi fatti.
Questi sono in gli esempi del libro:
Prompt = "Qual'e' il tuo nome? "
prova = input(Prompt)
Inserimento = raw_input()
print Inserimento
Inserendo in questo modo però, il quadrante di Komodo(in basso) è bianco ed appena scrivo qualcosa lui mi riporta quanto da me scritto più fa ripartire il Prompt con la scritta fra virgolette e ripete quando da me scritto. Se non scrivo almeno una lettera o un numero non parte la richiesta.
Io invece vorrei che lui mi chiedesse cosa scrivere prima del mio intervento e poi mi stampasse il valore da me richiesto, Ottenendo :
Qual'è il tuo nome?
Nuvolare
Così io ho poi la possibilità di prendermi quel numero o lettera e gestirmeli come meglio credo
~FullSyst3m~
19-05-2009, 14:15
Ciao, dovrei scrivere delle cose con la necessità che il programma mi chieda quello che voglio scrivere. Sono quindi ritornato al cap 4.12, ma non mi ricordo come facevo e non trovo gli esercizi fatti.
Questi sono in gli esempi del libro:
Prompt = "Qual'e' il tuo nome? "
prova = input(Prompt)
Inserimento = raw_input()
print Inserimento
Inserendo in questo modo però, il quadrante di Komodo(in basso) è bianco ed appena scrivo qualcosa lui mi riporta quanto da me scritto più fa ripartire il Prompt con la scritta fra virgolette e ripete quando da me scritto. Se non scrivo almeno una lettera o un numero non parte la richiesta.
Io invece vorrei che lui mi chiedesse cosa scrivere prima del mio intervento e poi mi stampasse il valore da me richiesto, Ottenendo :
Qual'è il tuo nome?
Nuvolare
Così io ho poi la possibilità di prendermi quel numero o lettera e gestirmeli come meglio credo
Non ho capito molto bene i problemi che hai e non mi piace Komodo come IDE oltretutto. In ogni caso la cosa è semplice:
nome = raw_input("Quale è il tuo nome?")
print nome
Ricorda che prima di Python 3 c'è differenza tra raw_input(serve per prendere in ingresso delle stringhe) e input(numeri).
nuvolare
19-05-2009, 19:18
Non ho capito molto bene i problemi che hai e non mi piace Komodo come IDE oltretutto. In ogni caso la cosa è semplice:
nome = raw_input("Quale è il tuo nome?")
print nome
Appunto è proprio questo il problema, che con questo codice devo scrivere qualcosa per far partire la sequenza.
Io vorrei che appena faccio "RUN" oppure "Esegui" qualsiasi sia il comando di esecuzione, lui mi chieda quello che io gli imposto, esempio in questo caso "Quale è il tuo nome?"
Quindi se io sono l'utente utilizzatore e sono davanti al pc devo rispondere alle domande che il programmatore ha impostato, Esempio:
Il tuo nome? .....
Il tuo Cognome? ....
Dove abiti? ....
I dati immessi poi li utilizzerò per farci quello che mi serve.
Spero di essere stato un pò più chiaro adesso...
~FullSyst3m~
19-05-2009, 20:22
Appunto è proprio questo il problema, che con questo codice devo scrivere qualcosa per far partire la sequenza.
Io vorrei che appena faccio "RUN" oppure "Esegui" qualsiasi sia il comando di esecuzione, lui mi chieda quello che io gli imposto, esempio in questo caso "Quale è il tuo nome?"
Quindi se io sono l'utente utilizzatore e sono davanti al pc devo rispondere alle domande che il programmatore ha impostato, Esempio:
Il tuo nome? .....
Il tuo Cognome? ....
Dove abiti? ....
I dati immessi poi li utilizzerò per farci quello che mi serve.
Spero di essere stato un pò più chiaro adesso...
Si sei chiaro, ma quello credo sia un problema dell'IDE. Prova anche con il semplice IDLE incluso in Python. Se poi il problema è che non sai come usare le varie informazioni inserite dall'utente allora quello è un altro discorso.
nuvolare
20-05-2009, 09:47
Si in effetti è proprio un problema dell'IDE, infatti ho scritto
nome = raw_input("Quale e il tuo nome?")
print nome
E sul Terminale mi da la soluzione corretta con la domanda e poi attende che io inserisco il dato e poi mi fornisce la risposta dopo che do invio.
Se invece faccio la stessa cosa con Komodo, non ho nessuna risposta dall'IDE, quindi in questo caso non visualizzo la domanda e non appena inserisco il nome la risposta che ottengo è:
Nuvolare
Quale e il tuo nome?Nuvolare
Chi è che usava Komodo? se non sbaglio cdimauro, giusto per capire se lui ha una soluzione a questo
cdimauro
20-05-2009, 13:57
Non so, perché ormai sono passato a Eclipse, e anche con Komodo ho usato pochissimo la shell interattiva integrata (ho sempre una shell Python da command line aperta).
nuvolare
21-05-2009, 00:37
Ok, allora continuo poi perfezionerò anche questa parte...
Una volta che ci siamo mi dite la differenza tra Komodo ed Eclipse? perché usare uno e non l'altro?
~FullSyst3m~
21-05-2009, 07:49
Ok, allora continuo poi perfezionerò anche questa parte...
Una volta che ci siamo mi dite la differenza tra Komodo ed Eclipse? perché usare uno e non l'altro?
Non li ho mai usati, però credo proprio che Eclipse sia più completo e con più funzionalità. Ma comunque al momento non farti tutti questi problemi, puoi benissimo usare anche l'IDLE o PyScripter.
cdimauro
21-05-2009, 08:25
Concordo: non è il momento di pensare agli IDE.
Io ho cominciato con la command line e l'interprete Python aperto. E usavo un semplice editor di testo per scrivere le prime applicazioni. ;)
nuvolare
29-05-2009, 21:34
Ciao, sto facendo le pile, ed a pag 170 mi spiega il funzionamento del Push, Pop, EVuota.
Poi mi fa un esempio:
class Pila:
def __init__(self):
self.Lista = []
def Push(self, Prova):
self.Lista.append(Prova)
def Push(self, Prova2):
self.Lista.append(Prova2)
def Push(self, Prova3):
self.Lista.append(Prova3)
def Pop(self):
return self.Lista.pop()
def EVuota(self):
return (self.Lista == [])
Io ci ho aggiunto qualcosa in più per capire, e poi mi porta alla pagina successiva in cui mi dice:
P=Pila()
P.Push(54)
P.Push(45)
P.Push("+")
while not P.EVuota():
print P.pop(),
Il primo esempio è chiaro il secondo, non so come usarlo...
La classe Pila, del primo esempio la devo usare?
~FullSyst3m~
29-05-2009, 22:27
Ciao, sto facendo le pile, ed a pag 170 mi spiega il funzionamento del Push, Pop, EVuota.
Poi mi fa un esempio:
class Pila:
def __init__(self):
self.Lista = []
def Push(self, Prova):
self.Lista.append(Prova)
def Push(self, Prova2):
self.Lista.append(Prova2)
def Push(self, Prova3):
self.Lista.append(Prova3)
def Pop(self):
return self.Lista.pop()
def EVuota(self):
return (self.Lista == [])
Io ci ho aggiunto qualcosa in più per capire, e poi mi porta alla pagina successiva in cui mi dice:
P=Pila()
P.Push(54)
P.Push(45)
P.Push("+")
while not P.EVuota():
print P.pop(),
Il primo esempio è chiaro il secondo, non so come usarlo...
La classe Pila, del primo esempio la devo usare?
Non ho ben capito cosa non capisci.
nuvolare
29-05-2009, 22:37
L'esempio 2 che riporta il libro.
Non so come applicarlo al primo esempio e se non si applica al primo, non capisco come funziona da solo...
nuvolare
30-05-2009, 10:49
Se unisco i due codici creando un unico codice
class Pila:
def __init__(self):
self.Lista = []
def Push(self, Prova):
self.Lista.append(Prova)
def Push(self, Prova2):
self.Lista.append(Prova2)
def Push(self, Prova3):
self.Lista.append(Prova3)
def Pop(self):
return self.Lista.pop()
def EVuota(self):
return (self.Lista == [])
P=Pila()
P.Push(54)
P.Push(45)
P.Push("+")
while not P.EVuota():
print P.Pop
mi viene fuori questo:
<bound method Pila.Pop of <__main__.Pila instance at 0x68508>>
Il computer l'ho scrive continuamente, e se non do stop, scrive righe infinite.
~FullSyst3m~
30-05-2009, 12:09
Se unisco i due codici creando un unico codice
class Pila:
def __init__(self):
self.Lista = []
def Push(self, Prova):
self.Lista.append(Prova)
def Push(self, Prova2):
self.Lista.append(Prova2)
def Push(self, Prova3):
self.Lista.append(Prova3)
def Pop(self):
return self.Lista.pop()
def EVuota(self):
return (self.Lista == [])
P=Pila()
P.Push(54)
P.Push(45)
P.Push("+")
while not P.EVuota():
print P.Pop
mi viene fuori questo:
<bound method Pila.Pop of <__main__.Pila instance at 0x68508>>
Il computer l'ho scrive continuamente, e se non do stop, scrive righe infinite.
Prima di tutto non capisco perchè hai scritto tre metodi Push.
Seconda cosa il problema sta nel fatto che hai dimenticato le parentesiin P.Pop dentro il while. In questo modo non chiami la funzione, ma l'istanza di essa.
class Pila:
def __init__(self):
self.Lista = []
def Push(self, Prova):
self.Lista.append(Prova)
def Pop(self):
return self.Lista.pop()
def EVuota(self):
return self.Lista == []
P = Pila()
P.Push(54)
P.Push(45)
P.Push("+")
while not P.EVuota():
P.Pop()
nuvolare
30-05-2009, 16:46
Infatti non capivo se il secondo esempio, fosse la continuazione del primo, oppure fosse un esempio a se stante, visto che il libro non specifica niengte di tutto questo.
La motivazione del 3 metodi Push è perché così mi riporta l'esempio...
http://www.python.it/doc/Howtothink/Howtothink-html-it/chap18.htm
Ci sono altri metodi più semplici, che non ci sono riportati?
~FullSyst3m~
31-05-2009, 13:26
Infatti non capivo se il secondo esempio, fosse la continuazione del primo, oppure fosse un esempio a se stante, visto che il libro non specifica niengte di tutto questo.
La motivazione del 3 metodi Push è perché così mi riporta l'esempio...
http://www.python.it/doc/Howtothink/Howtothink-html-it/chap18.htm
Ci sono altri metodi più semplici, che non ci sono riportati?
Se ci sono i puntini vuol dire che continua il codice precedente, il libro lo ha detto capitoli prima.
Per il resto io metodo Push ne vedo solo uno (non parlo di quando lo chiami, ma nella dichiarazione e definizione che dai nel codice).
nuvolare
31-05-2009, 13:32
No, non ci sono puntini, ma il codice è unito.
Ho sperimentato più volte ed adesso funziona.
Grazie
~FullSyst3m~
31-05-2009, 14:00
No, non ci sono puntini, ma il codice è unito.
Ho sperimentato più volte ed adesso funziona.
Grazie
Lo dice capitoli indietro che il codice è la continuazione dei precedenti.
nuvolare
02-06-2009, 13:28
Ciao, sto creando qualcosa per mettere in pratica un pò tutto, ma avrei bisogno di un IDE che mi faccia funzionare il raw_imput, cosa che Komodo non fa, oppure non sono riuscito a settarlo in maniera corretta.
In ogni caso mi dite voi cosa usate, così da poter iniziare cnhe io con un IDE definitivo, per favore?
Nei post precedenti parlavate di Eclipse, va bene?
cdimauro
02-06-2009, 13:38
Uso Eclipse e il plugin PyDev, ma non ho mai usato la shell interattiva da quest'IDE: preferisco farlo sempre da command line.
nuvolare
02-06-2009, 13:43
Scusami la shell interattiva è qualcosa come il Terminale?
Ma la funzione raw_imput funziona?
Perché con Komodo mi trovo molto bene, perché è snello e veloce, ma ma non riesco a far funzionare questa funzione, quindi mi serve dell'altro con cui poterla usare.
~FullSyst3m~
02-06-2009, 21:30
Scusami la shell interattiva è qualcosa come il Terminale?
Ma la funzione raw_imput funziona?
Perché con Komodo mi trovo molto bene, perché è snello e veloce, ma ma non riesco a far funzionare questa funzione, quindi mi serve dell'altro con cui poterla usare.
La shell interattiva è l'interprete Python.
Non ho mai usato Komodo, quindi non saprei, ma come ti ho già consigliato al momento inizia anche con l'IDLE, poi troverai l'IDE per le tue esigenze.
cdimauro
02-06-2009, 21:44
Scusami la shell interattiva è qualcosa come il Terminale?
Sì.
Ma la funzione raw_imput funziona?
Sì.
Perché con Komodo mi trovo molto bene, perché è snello e veloce, ma ma non riesco a far funzionare questa funzione, quindi mi serve dell'altro con cui poterla usare.
Dovresti configurare correttamente Komodo. Mi sembra di aver postato il link a una discussione in cui ho spiegato come fare.
nuvolare
02-06-2009, 21:55
Sì.
Dovresti configurare correttamente Komodo. Mi sembra di aver postato il link a una discussione in cui ho spiegato come fare.
Si, il link dovrei cercarlo tra i post precedenti, ma le impostazioni che erano riportate su quel post li avevo fatte tutte, ed infatti è andato bene fino ad ora. Adesso però che devo usare il raw_imput, Komodo ha problemi nella visualizzazione, sempre se non sbaglio io, quindi non lo do per certo visto la mia poca pratica in merito.
La shell interattiva è l'interprete Python.
Non ho mai usato Komodo, quindi non saprei, ma come ti ho già consigliato al momento inizia anche con l'IDLE, poi troverai l'IDE per le tue esigenze.
Per quando riguarda L'IDLE non mi trovo per niente bene, ecco perché sono poi passato ad un IDE, e volevo trovarne uno definitivo da iniziare ad utilizzare e capire il funzionamento, almeno fin quando non arriva ad un buon punto di programmazione e di esperienza. Komodo mi sembrava buono, almeno fino a quando non è spuntato questo problema.
~FullSyst3m~
02-06-2009, 23:54
Si, il link dovrei cercarlo tra i post precedenti, ma le impostazioni che erano riportate su quel post li avevo fatte tutte, ed infatti è andato bene fino ad ora. Adesso però che devo usare il raw_imput, Komodo ha problemi nella visualizzazione, sempre se non sbaglio io, quindi non lo do per certo visto la mia poca pratica in merito.
Per quando riguarda L'IDLE non mi trovo per niente bene, ecco perché sono poi passato ad un IDE, e volevo trovarne uno definitivo da iniziare ad utilizzare e capire il funzionamento, almeno fin quando non arriva ad un buon punto di programmazione e di esperienza. Komodo mi sembrava buono, almeno fino a quando non è spuntato questo problema.
Sei su windows?
Riguardo Komodo fai una ricerca in rete e vede se trovi qualcosa.
cdimauro
03-06-2009, 08:54
Si, il link dovrei cercarlo tra i post precedenti, ma le impostazioni che erano riportate su quel post li avevo fatte tutte, ed infatti è andato bene fino ad ora. Adesso però che devo usare il raw_imput, Komodo ha problemi nella visualizzazione, sempre se non sbaglio io, quindi non lo do per certo visto la mia poca pratica in merito.
Non avendolo mai provato, non ti posso aiutare. Mi spiace.
nuvolare
03-06-2009, 16:53
Ok, mi sono scritto sul forum di Komodo dove ho scritto un post, per avere informazioni su questo problema che Komodo ha, visto che ho letto di altri problemi simili.
Nel frattempo, siccome dovrei andare aventi con il lavoro che sto facendo, ho scaricato SPE, mi potreste dire se c'è qualcosa da settare, oppure lui funziona già così?
Aprendo visualizzo 3 finistre frontali ed una in basso, che come a Komodo riporta, il risultato del codice o gli errori.
Inserendo il comando
nome = raw_input("Quale e il tuo nome?")
print nome
Dove visualizzo la domanda e dove devo inserire la risposta?
Grazie
~FullSyst3m~
03-06-2009, 17:14
Ok, mi sono scritto sul forum di Komodo dove ho scritto un post, per avere informazioni su questo problema che Komodo ha, visto che ho letto di altri problemi simili.
Nel frattempo, siccome dovrei andare aventi con il lavoro che sto facendo, ho scaricato SPE, mi potreste dire se c'è qualcosa da settare, oppure lui funziona già così?
Aprendo visualizzo 3 finistre frontali ed una in basso, che come a Komodo riporta, il risultato del codice o gli errori.
Inserendo il comando
nome = raw_input("Quale e il tuo nome?")
print nome
Dove visualizzo la domanda e dove devo inserire la risposta?
Grazie
Con SPE non so se sia intuitivo usare raw_input. Metti PyScripter.
nuvolare
03-06-2009, 21:08
Ho trovato, mi hanno risposto!!!!
Con Komodo dove si mette il %(python) "%F" che era inserito nel post di cdMauro, va inserito il percorso, e poi dando RUN viene visualizzato il comando che è inserito nel raw_input.
Perfetto, perché con komodo mi trovo benissimo ed adesso lo apprezzo ancora di più!!! :D
~FullSyst3m~
03-06-2009, 21:53
Ho trovato, mi hanno risposto!!!!
Con Komodo dove si mette il %(python) "%F" che era inserito nel post di cdMauro, va inserito il percorso, e poi dando RUN viene visualizzato il comando che è inserito nel raw_input.
Perfetto, perché con komodo mi trovo benissimo ed adesso lo apprezzo ancora di più!!! :D
Sono felice per te :)
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.