Quote:
Sì, perché si riferisce alla variabile Unione.
|
O magari alla variabile messaggio, ma visto il contesto è più probabile che si riferisca ad unione
Quote:
Potrebbe anche essere, ma comunque la sostanza è la stessa: l'eccezione sollevata è sempre la NameError. Quella tua ti dà molte più informazioni, ma è sempre la stessa.
Quindi o prima Python riportava meno cose, o nel libro hanno preferito semplificare (un po' troppo) l'output.
|
Io credo che sia una questione di versione di software. Comunque tu che usi python da un pò dovresti saperlo no??
Quote:
Vuol dire che la funzione elabora i dati, e a chi l'ha chiamata restituisce poi qualcosa che magari gli serve.
Ad esempio se crei la funzione che calcola il fattoriale di un numero n, questa prende in input il numero n, fa tutti i suoi conti e ricava il fattoriale di questo numero. Lo prende e lo ritorna a chi l'ha chiamato che deciderà poi come utilizzarlo (stamparlo a video o farci altro).
Gli operatori classici (+, -, *, /, ecc.) li puoi pensare come funzioni che prendono in input dei valori e restituisco poi il risultato dell'operazione. Con le funzioni è esattamente la stessa cosa.
|
Capito!
Quote:
No, non ritorna niente. Al suo interno provvede soltanto a stampare a video quello che le è stato passato, ma poi a chi l'ha chiamato non torna "nulla" (lo metto tra virgolette perché più avanti capirai meglio).
|
Ok, aspetterò più avanti! Comunque capito tutto il resto!
Quote:
Per farti capire meglio, prova a stampare il risultato di Stampa2Volte e di questa funzione
|
Adesso sono fuori, quando torno a casa provo
Quote:
Perché si tratta dell'operazione di resto del risultato di una divisione. x % 10 divide x per 10 e ne ritorna il resto, che sarà un valore compreso fra 0 e 9 (quindi 1 cifra).
x % 100 divide x per 100 e ritorna il resto, che stavolta sarà compreso fra 0 e 99 (2 cifre).
|
Capito!
Quote:
Infatti termina. Il concetto è il seguente. Tu passi a questa funzione un valore intero che supponiamo essere 3, come nell'esempio.
Appena entrati nella funzione, n avrà valore 3. Poiché c'è subito un controllo per vedere se per caso n è arrivato a 0, il sistema passa a eseguire il blocco dell'else che provvede come prima cosa a stampare n e poi a richiamare la funzione stessa, ma questa volta passandogli n - 1.
Il concetto che devi capire è che a questo punto l'esecuzione della funzione e il valore della variabile n vengono "congelati". Fatto questo, il computer crea una nuova variabile n e gli associa il valore 2 (cioé il valore della variabile n che è stata congelata, meno 1). A questo punto richiama nuovamente la funzione passandogli questa NUOVA variabile n, e sulla quale essa lavorerà.
E così via, fino a quando non verrà richiamata la funzione ma con n = 0. A questo punto la funzione stamperà quella scritta, e ritornerà indietro andando a "scongelare" le precedenti esecuzioni della funzione, fino ad arrivare alla prima esecuzione "congelata" che comporterà poi l'uscita "definitiva" dalla funzione e il ritorno al programma principale.
|
Tutto chiaro! Grazie
Quote:
Il libro è corretto se ci fai caso. Sei tu che hai aggiunto una riga vuota prima dell'else. In questo caso con IDLE o con il prompt dei comandi Python ti dà errore, perché non ci possono essere spazi in quanto viene considerato come terminazione del blocco.
Gli spazi li puoi lasciare soltanto se scrivi quel codice in un file e poi lo esegui
|
Ma io infatti oltre a scrivere nella command line l'ho scritto nel file e l'ho eseguito dall'idle, ma mi dà lo stesso errore. E poi perchè viene considerata come un'interruzione del blocco? Non sono in una funzione. E poi non si dovrebbe poter usare un solo else? Inoltre, un else senza un altra istruzione condizionale prima non si può usare?
Quote:
Nella command line l'interprete è predisposto per stampare eventuali risultati delle espressioni.
Quindi se scrivi ad esempio 3 * 5 ti stamperà 15.
|
Questo lo sapevo, ma non sapeva che era predisposto anche per i return (che scemo!)
Quote:
Perché non torni nulla, appunto. In Python affinché una funzione ritorni un valore devi utilizzare sempre l'istruzione return. Quindi così:
|
Chiaro
Quote:
Con quel codice sbagliato deve tornarti None e stampartelo pure a video.
|
Questo perchè ho inserito il print in AreaCerchio (mi riferisco all'idle)?
Quote:
Perché viene omesso dalla command line.
|
Perchè viene omesso? Comunque io queste prove le ho fatte nell'idle, non nella command line
Quote:
Il primo None lo stampa perché lo fa AreaCerchio2. Il secondo perché gliel'hai chiesto esplicitamente tu.
Questo perché tu stai usando Python dalla command line, che è una speciale modalità utile per "smanettare", provando al volo pezzi di codice.
|
Come ho detto in questo caso lo uso dall'idle. Se lo fa AreaCerchio2, allora perchè quando ho tolto il print mi dà il risultato senza None? E dove gliel'ho chiesto esplicitamente io?
Quote:
In attesa di risposta, Valerio Staffeli, hwupgrade forum, a voi la linea
|
In attesa di risposta, Valerio Staffeli, hwupgrade forum, a voi la linea