View Full Version : [python] pensare da informatico: chiarimenti capitolo 4
by_to_by
11-06-2008, 23:15
ci sono alcune cose in questo capitolo che non capisco e che vorrei sapere, eccole:
1)esercizio 4.6, http://www.python.it/doc/Howtothink/Howtothink-html-it/chap04.htm
def Confronta (x, y):
if x > y:
print x, "è maggiore di", y
elif x < y:
print x, "è minore di", y
else:
print x, "e", y, "sono uguali"
Confronta (2, 5)
def ElaboraScelta (scelta):
if scelta == "prova":
print "scelta esatta"
elif scelta == "prova2":
print "scelta giusta"
else:
print "scelta errata"
ElaboraScelta ("prova")
è giusto?
2) e oltre a quello che è scritto nel messaggio sopra a questo, vorrei spiegata questa parte che si trova nel paragrafo 4.9 sempre del link di prima:
La funzione ContoAllaRovescia che aveva n=1; e poi ritorna.
La funzione ContoAllaRovescia che aveva n=2; e poi ritorna.
E quindi torna in __main__ (questo è un trucco)
ma quando la funzione arriva ad essere x == 0 non dovrebbe terminare? cosa c'entrano queste tre righe che ho quotato?
3)4.12, inserimento da tastiera:
Per evitare questo tipo di errori è generalmente meglio usare la funzione \linebreak raw_input per ottenere una stringa di caratteri e poi usare le funzioni di conversione per ottenere gli altri tipi.
che significa? un esempio?
grazie a chi mi toglierà questi dubbi
khelidan1980
11-06-2008, 23:24
Il primo mi sembra giusto,la ricorsione te l'ha spiegata Daniele nell'altro tuo post e il terzo passo perchè non conosco python
~FullSyst3m~
11-06-2008, 23:28
Forse ti ha spiazzato la scritta \linebreak. Credo che quello molto probabilmente sia un errore di battitura o di impostazione della pagina, leggilo senza quello e ti sarà più chiaro il senso della frase
by_to_by
11-06-2008, 23:32
Forse ti ha spiazzato la scritta \linebreak. Credo che quello molto probabilmente sia un errore di battitura o di impostazione della pagina, leggilo senza quello e ti sarà più chiaro il senso della frase
ho letto quello che ha scritto daniele nell'altro post ma mi sono confuso di più come ha detto ~FullSyst3m~
ho anche letto la frase senza quel \linebreak, però non capisco come dovrei mettere una funzione che converte il tipo dopo che l'utente inserisce l'input visto che esempi non ce ne sono
DanieleC88
12-06-2008, 00:36
Be' non sono stato molto chiaro in effetti. Rispiego.
Dando per assunto che tu sappia il concetto basilare di "funzione", procediamo. Hai una funzione main() da cui prende inizio il tuo programma; da lì dentro chiami una funzione: il controllo viene passato a lei, fa un certo numero di operazioni, poi esce, facendo ritorno alla main(). Semplice, no?
Ora, prendiamo un caso più complicato: dalla main() chiami una funzione1(), che al suo interno chiama funzione2(). Cosa succede? Semplice: main() chiama funzione1(), aspettando che finisca. Nel frattempo, anche funzione1() chiama funzione2() e aspetta che finisca. Quando vengono eseguite tutte e funzione2() termina, restituisce il controllo alla funzione che l'ha chiamata: nel nostro caso si tratta di funzione1(), che riprenderà ad essere eseguita. Quando anche lei finirà, non ci sarà altro da fare che tornare alla main().
La ricorsione funziona più o meno nella stessa maniera; nessuno ti vieta di fare in modo che una funzione chiami se stessa: sarà semplicemente un'istanza di una certa funzione che chiama un'altra particolare funzione. Facciamo l'esempio classico (te lo scrivo in C, perché il Python non lo conosco, ma il concetto è identico):
int fattoriale(int n)
{
if (n <= 1) return 1;
return (n * fattoriale(n - 1));
}
Se tu dalla main() chiami fattoriale(3) che succede? Bene, vediamo: si entra in fattoriale() con n = 3; fattoriale() controlla che n non sia minore o uguale ad 1 (nel qual caso non dovrebbe far altro che interrompere la propria esecuzione e restituire il valore 1). La condizione non è vera, quindi si va avanti: la prossima istruzione, come vedi, chiama di nuovo la stessa funzione, dandole però come parametro un numero decrementato. In particolare, lì non facciamo altro che aspettare che fattoriale() "faccia qualcosa", dandoci poi un risultato che andremo a moltiplicare al numero n ottenuto come parametro.
A questo punto deve essere eseguita la seconda chiamata a fattoriale(), ricevendo n = 2 come parametro; questo è ancora maggiore di 1, quindi verrà effettuata una terza chiamata a fattoriale(), dandole un parametro ancora decrementato.
Terza esecuzione: fattoriale() riceve n = 1, che è la condizione che soddisfa il caso base, quello che leggi nel blocco if: finalmente una cosa facile - dobbiamo solo uscire dalla funzione, restituendo 1.
La terza invocazione è terminata, ora, e il controllo viene restituito alla seconda invocazione, che aveva n = 2 come parametro ed ha ricevuto 1 come risultato dalla chiamata di fattoriale(): ormai non dovrà fare altro che moltiplicare 2 * 1 ed uscire dando tale valore come risultato.
Il controllo viene restituito alla prima invocazione di funzione(), quella con n = 3, che adesso ha ricevuto 2 dalla seconda invocazione di funzione(), e dovrà solo restituire il valore 3 * 2 come suo risultato.
Dopo tutta questa serie di chiamate "annidate" alla stessa funzione, l'esecuzione torna alla main(), che potrà usare il valore del fattoriale di 3 come meglio le pare e piace.
In pratica, lo schema è:
main() > fattoriale(3) = 3 * fattoriale(2) = 3 * (2 * fattoriale(1)) = 3 * (2 * 1)
ciao ;)
DanieleC88
12-06-2008, 00:44
Lo so che non sono stato molto chiaro lo stesso, ma non potendoti fare "vedere" con un disegno quello che succede sullo stack, mi viene difficile farti capire.
Puoi pensare che ad ogni chiamata si stia aggiungendo un anello di una catena, dove ognuno aspetta il prossimo, finché l'ultimo non interrompe questa catena.
by_to_by
12-06-2008, 08:01
Lo so che non sono stato molto chiaro lo stesso, ma non potendoti fare "vedere" con un disegno quello che succede sullo stack, mi viene difficile farti capire.
Puoi pensare che ad ogni chiamata si stia aggiungendo un anello di una catena, dove ognuno aspetta il prossimo, finché l'ultimo non interrompe questa catena.
sei stato più chiaro, grazie. ma da quanto tempo programmi? come mai hai iniziato con un linguaggio difficile come c?
cdimauro
12-06-2008, 08:20
3)4.12, inserimento da tastiera:
che significa? un esempio?
grazie a chi mi toglierà questi dubbi
Il problema è che input e raw_input sono due funzioni MOLTO diverse.
La prima preleva dalla "tastiera" una stringa e la valuta come se fosse un'espressione con la sintassi di Python, e te ne restituisce il risultato.
La seconda semplicemente preleva dalla "tastiera" una stringa e te la restituisce così com'è.
Esempi pratici:
>>> x = input("Dammi un'espressione: ")
Dammi un'espressione: 1 + 2
>>> x
3
>>> y = raw_input("Dammi una stringa: ")
Dammi una stringa: 1 + 2
>>> y
'1 + 2'
Come vedi con input() Python non solo ha prelevato la stringa immessa dall'utente, ma... ha fatto anche i calcoli! :D
Con raw_input(), invece, ha preso la stringa e l'ha semplicemente restituita.
A causa di queste incomprensioni, con Python 3.0 input() sparirà e raw_input() verrà rinominata input().
Sugli altri punti vedo che ti hanno già risposto. :)
~FullSyst3m~
12-06-2008, 08:25
Il problema è che input e raw_input sono due funzioni MOLTO diverse.
La prima preleva dalla "tastiera" una stringa e la valuta come se fosse un'espressione con la sintassi di Python, e te ne restituisce il risultato.
La seconda semplicemente preleva dalla "tastiera" una stringa e te la restituisce così com'è.
Esempi pratici:
>>> x = input("Dammi un'espressione: ")
Dammi un'espressione: 1 + 2
>>> x
3
>>> y = raw_input("Dammi una stringa: ")
Dammi una stringa: 1 + 2
>>> y
'1 + 2'
Come vedi con input() Python non solo ha prelevato la stringa immessa dall'utente, ma... ha fatto anche i calcoli! :D
Con raw_input(), invece, ha preso la stringa e l'ha semplicemente restituita.
A causa di queste incomprensioni, con Python 3.0 input() sparirà e raw_input() verrà rinominata input().
Sugli altri punti vedo che ti hanno già risposto. :)
Ma quando passi un parametro numerico alla funziona raw_input non dovrebbe restituire un errore di tipo non valido?
Comunque dallla 3.0 allora sia per stringhe che per numeri basterà usare solo la funzione input()?
DanieleC88
12-06-2008, 11:29
sei stato più chiaro, grazie.
Alleluia! :D
ma da quanto tempo programmi? come mai hai iniziato con un linguaggio difficile come c?
Da un po' di anni, perché? In realtà non ho iniziato col C, quando ho iniziato ero abbastanza giovane da non preoccuparmi della sua esistenza (e per fortuna: se l'avessi incontrato in quel momento mi sarei demoralizzato del tutto e avrei smesso :asd: ), concentrandomi sul primo linguaggio che mi sono trovato davanti, ovvero il BASIC. Che ho trovato per caso, oltretutto. :D
Visto che mi ci divertivo ho deciso poco dopo di passare al Visual Basic e fare un po' di programmini per divertimento; dopo un po' sono passato al Delphi, e in seguito ho provato anche C e al C++.
Se sei agli inizi pensa a studiare con Python, hai tutto il tempo del mondo per imparare linguaggi di quarant'anni fa... :D
by_to_by
12-06-2008, 12:09
Alleluia! :D
Da un po' di anni, perché? In realtà non ho iniziato col C, quando ho iniziato ero abbastanza giovane da non preoccuparmi della sua esistenza (e per fortuna: se l'avessi incontrato in quel momento mi sarei demoralizzato del tutto e avrei smesso :asd: ), concentrandomi sul primo linguaggio che mi sono trovato davanti, ovvero il BASIC. Che ho trovato per caso, oltretutto. :D
Visto che mi ci divertivo ho deciso poco dopo di passare al Visual Basic e fare un po' di programmini per divertimento; dopo un po' sono passato al Delphi, e in seguito ho provato anche C e al C++.
Se sei agli inizi pensa a studiare con Python, hai tutto il tempo del mondo per imparare linguaggi di quarant'anni fa... :D
cosi per sapere. posso chiederti,se non sono inipportuno,quanti anni avevi quando hai iniziato?io ho 21 anni e sto iniziando ora
DanieleC88
12-06-2008, 12:17
Non ricordo, ne avrò avuti 13, forse. Ma che importa? Ognuno inizia quando gli pare, pensa solo a scrivere programmi e vai tranquillo. ;)
by_to_by
12-06-2008, 12:25
Non ricordo, ne avrò avuti 13, forse. Ma che importa? Ognuno inizia quando gli pare, pensa solo a scrivere programmi e vai tranquillo. ;)
per me importa, sono 8 anni di esperienza che hai sulle spalle. e non sono pochi eh
DanieleC88
12-06-2008, 12:31
Guarda, non sono ancora 7 anni, e comunque ho passato molto tempo pensando solo a divertirmi con gli strumenti che avevo, non ho passato tutto questo tempo a "studiare" sistematicamente. Con un po' di impegno e buona volonta si raggiunge il "mio livello" in molto meno tempo.
ciao ;)
by_to_by
12-06-2008, 13:31
Guarda, non sono ancora 7 anni, e comunque ho passato molto tempo pensando solo a divertirmi con gli strumenti che avevo, non ho passato tutto questo tempo a "studiare" sistematicamente. Con un po' di impegno e buona volonta si raggiunge il "mio livello" in molto meno tempo.
ciao ;)
gli strumenti che avevi?cioè?gli strumenti si possono prendere
DanieleC88
12-06-2008, 14:02
Gli strumenti che avevo intendo il linguaggio e/o l'IDE che usavo. All'epoca ho smanettato per diverso tempo con Visual Basic, che è simpatico per chi inizia, perché il linguaggio è molto semplice (ma poco versatile, dovessi reiniziare adesso sceglierei anch'io Python) e ti fa fare anche applicazioni grafiche con poco sforzo: quindi il principiante vede subito dei risultati, e non si demoralizza. Se fossi partito dal C, probabilmente a quest'ora non sarei qua a risponderti su queste cose. ;)
by_to_by
12-06-2008, 14:57
Gli strumenti che avevo intendo il linguaggio e/o l'IDE che usavo. All'epoca ho smanettato per diverso tempo con Visual Basic, che è simpatico per chi inizia, perché il linguaggio è molto semplice (ma poco versatile, dovessi reiniziare adesso sceglierei anch'io Python) e ti fa fare anche applicazioni grafiche con poco sforzo: quindi il principiante vede subito dei risultati, e non si demoralizza. Se fossi partito dal C, probabilmente a quest'ora non sarei qua a risponderti su queste cose. ;)
ma è davvero cosi facile vb? e cosa intendi per poco versatile?
comunque per questo volevo iniziare con vb, perchè ho visto persone che in pochissimo tempo hanno fatto dei programmi abbastanza complessi, con python prima di vedere risultati concreti chissà quanto deve passare
DanieleC88
12-06-2008, 15:15
Sì, è facile (è un linguaggio pensato per i principianti, BASIC significa Beginner's All-purpose Symbolic Instruction Code), ma la cosa caratteristica del Visual Basic è il fatto di essere fortemente integrato con un designer di interfacce, così anche il principiante può fare subito una finestra con dei pulsantini invece che vedere dei caratteri scritti su una console.
Come linguaggio però ci perde un po'. Ci sono delle cose che possono essere confusionarie, come Option Base con cui puoi specificare se far partire gli indici delle array da 0 o da 1 (immagina se sei abituato a partire da zero e leggi codice scritto da chi parte da 1... :D). Ti evita poi di gestire degli errori, cosa che non è buona per chi inizia a programmare, e cioè chi, al contrario, dovrebbe imparare a gestire queste situazioni. In Visual Basic gli puoi dare un On Error Resume Next e farlo continuare dall'istruzione seguente come se nulla fosse. E poi è proprio la sintassi che non mi piace particolarmente, anche se lì sono gusti.
Non conosco Visual Basic .NET, quindi su quello non mi posso pronunciare.
Sta di fatto che come linguaggio credo che non ci sia confronto con Python: basta appoggiarsi ai giusti strumenti anche qui (un buon IDE e una libreria grafica appropriata) per vedere risultati convincenti in poco tempo, quindi direi di iniziare direttamente da un linguaggio "serio". ;)
by_to_by
12-06-2008, 15:33
in definitiva sto vb è buono o no? e che significa fare partire gli indici degli array da 0 o 1? ma scusami comunque, tutte queste cose come le sai?
mentre vi espongo un piccolo problemino: capitolo 5, paragrafo 5.2, esercizietto del 5.2:
def Confronto (x, y):
a = 0
b = 1
c = -1
if x > y:
return b
if x == y:
return a
elif x < y:
return c
Confronto (5, 6)
ho provato cosi, ma non mi ritorna nessun risultato
a = 0
b = 1
c = -1
def Confronto (x, y):
if x > y:
return b
if x == y:
return a
elif x < y:
return c
Confronto (5, 6)
e cosi nemmeno
ho anche provato a far eseguire gli esempi del capitolo, ma non mi ritorna nemmeno niente. come mai?
il link qua http://www.python.it/doc/Howtothink/Howtothink-html-it/chap05.htm
by_to_by
12-06-2008, 15:45
inserendo questo codice di esempio nella command line mi restituisce il valore, ma sempre positivo, anche se metto ad esempio ValoreAssoluto (-1)
def ValoreAssoluto(x):
if x < 0:
return -x
elif x > 0:
return x
come mai?
variabilepippo
12-06-2008, 15:48
in definitiva sto vb è buono o no?
Se si parla di VB6 allora NON è buono, è un prodotto che risale al 1998 ed è stato abbandonato dalla stessa Microsoft. Senza considerare che è il peggiore degli strumenti RAD, per esempio già nel '98 Delphi (ma non solo) era anni luce avanti. VB6 non favorisce l'apprendimento di tecniche di programmazione moderne e professionali.
ma non mi ritorna nemmeno niente. come mai?
Per "ritornare qualcosa" intendi stampare qualcosa sullo schermo?
by_to_by
12-06-2008, 15:49
comunque ho provato a inserire
def Confronto (x, y):
if x > y:
return 1
if x == y:
return 0
elif x < y:
return -1
(che sarebbe l'esercizio del 5.2) nella command line e funziona tutto, se invece lo scrivo nell'IDE niente da fare. ma perchè?
by_to_by
12-06-2008, 15:51
Se si parla di VB6 allora NON è buono, è un prodotto che risale al 1998 ed è stato abbandonato dalla stessa Microsoft. Senza considerare che è il peggiore degli strumenti RAD, per esempio già nel '98 Delphi (ma non solo) era anni luce avanti. VB6 non favorisce l'apprendimento di tecniche di programmazione moderne e professionali.
Per "ritornare qualcosa" intendi stampare qualcosa sullo schermo?
intendo quello che dice l'esercizio, cioè che deve ritornare un valore. quindi devo usare return, non print. però il programma va solo nella command line, nell'IDE lo eseguo, ma non mi ritorna nessun valore, riga vuota
DanieleC88
12-06-2008, 16:22
in definitiva sto vb è buono o no?
Forse Visual Basic .NET non è malissimo, ma se stai studiando Python continua con quello, ti conviene.
e che significa fare partire gli indici degli array da 0 o 1?
Che se parti da zero il primo elemento è array[0], se parti da uno è array[1].
ma scusami comunque, tutte queste cose come le sai?
Ci sono passato per il VB, le ho incontrate... :D
inserendo questo codice di esempio nella command line mi restituisce il valore, ma sempre positivo, anche se metto ad esempio ValoreAssoluto (-1)
def ValoreAssoluto(x):
if x < 0:
return -x
elif x > 0:
return x
come mai?
Per questo (http://it.wikipedia.org/wiki/Valore_assoluto). È esattamente ciò che deve fare. ;)
by_to_by
12-06-2008, 16:39
Forse Visual Basic .NET non è malissimo, ma se stai studiando Python continua con quello, ti conviene.
Che se parti da zero il primo elemento è array[0], se parti da uno è array[1].
Ci sono passato per il VB, le ho incontrate... :D
Per questo (http://it.wikipedia.org/wiki/Valore_assoluto). È esattamente ciò che deve fare. ;)
e no, se inserisco un numero negativo deve tornare -x, cioè -1 nell'esempio. o no? oppure usa il metodo matematico - * - = +?
DanieleC88
12-06-2008, 16:45
Leggi quanto scritto su Wikipedia: il valore assoluto è dato da quel numero senza il segno, cioè preso sempre positivo. Quindi, se tu hai x = -1, avrai che x < 0 è vera, e quindi ti verrà restituito -x = -(-1) = +1.
banryu79
12-06-2008, 16:58
Non conosco la sintassi di Python però mi sembra che nel codice relativo al confronto tra due numeri ci sia qualcosa che non va nel modo in cui hai strutturato i blocchi if() e if()...elsif(), percui se il primo numero che passi è minore del secondo non ti torna niente.
Prova a rileggere il codice eseguendo mentalmente passo-passo le istruzioni.
Ti facilito la cosa quotando il codice in questo modo:
def Confronto (x, y):
if x > y:
return b
if x == y:
return a
elif x < y:
return c
Confronto (5, 6)
by_to_by
12-06-2008, 16:59
Leggi quanto scritto su Wikipedia: il valore assoluto è dato da quel numero senza il segno, cioè preso sempre positivo. Quindi, se tu hai x = -1, avrai che x < 0 è vera, e quindi ti verrà restituito -x = -(-1) = +1.
quello che ho detto io poco sopra. vorrei sapere le cose che sapete tu, variabilepippo ecc. conoscete un sacco di termini e nozioni a memoria, io nemmeno leggendoli li imparerei..
by_to_by
12-06-2008, 17:01
Non conosco la sintassi di Python però mi sembra che nel codice relativo al confronto tra due numeri ci sia qualcosa che non va nel modo in cui hai strutturato i blocchi if() e if()...elsif(), percui se il primo numero che passi è minore del secondo non ti torna niente.
Prova a rileggere il codice eseguendo mentalmente passo-passo le istruzioni.
Ti facilito la cosa quotando il codice in questo modo:
def Confronto (x, y):
if x > y:
return b
if x == y:
return a
elif x < y:
return c
Confronto (5, 6)
il codice è giusto, infatti nella command line funziona senza problemi e restituisce i risultati corretti. non funziona solo nell'IDE e non capisco perchè. mi sa che devo aspettare cdimauro
banryu79
12-06-2008, 17:04
il codice è giusto, infatti nella command line funziona senza problemi e restituisce i risultati corretti. non funziona solo nell'IDE e non capisco perchè. mi sa che devo aspettare cdimauro
Ehm... sì, scusa ho svarionato io, (ho perso un'occasione per starmene zitto :stordita: )
~FullSyst3m~
12-06-2008, 17:06
Ehm... sì, scusa ho svarionato io, (ho perso un'occasione per starmene zitto :stordita: )
Errare è umano... ma perseverare è diabolico :asd:
DanieleC88
12-06-2008, 17:19
quello che ho detto io poco sopra.
Ah scusa, non avevo notato! :D
vorrei sapere le cose che sapete tu, variabilepippo ecc. conoscete un sacco di termini e nozioni a memoria, io nemmeno leggendoli li imparerei..
Conoscere le cose a memoria non indica niente... tutto verrà col tempo, non farti preoccupazioni simili. ;)
variabilepippo
12-06-2008, 17:32
intendo quello che dice l'esercizio, cioè che deve ritornare un valore. quindi devo usare return, non print. però il programma va solo nella command line, nell'IDE lo eseguo, ma non mi ritorna nessun valore, riga vuota
Il codice "ritorna" un valore, ma ovviamente non produce output.
Cosa accade se esegui questo programma dal prompt
def Confronto (x, y):
if x > y:
return 1
if x == y:
return 0
elif x < y:
return -1
Confronto(5,6)
?
(Quale IDE usi?)
vorrei sapere le cose che sapete tu, variabilepippo ecc. conoscete un sacco di termini e nozioni a memoria, io nemmeno leggendoli li imparerei..
Se dedicherai il tuo tempo alla programmazione certe cose diventeranno automatiche.
by_to_by
12-06-2008, 18:34
Il codice "ritorna" un valore, ma ovviamente non produce output.
Cosa accade se esegui questo programma dal prompt
def Confronto (x, y):
if x > y:
return 1
if x == y:
return 0
elif x < y:
return -1
Confronto(5,6)
?
(Quale IDE usi?)
Se dedicherai il tuo tempo alla programmazione certe cose diventeranno automatiche.
lo spero che diventeranno automatiche. comunque, se non produce nessun output a cosa serve allora questo return? non si fa prima a usare print?
comunque il prompt funziona, quando inserisco ad esempio (5, 7) mi ritorna -1, se inserisco (0,0) mi ritorna 0 e se inserisco (7, 5) mi ritorna 1. come idle uso quello che è integrato nel file di setup scaricabile da sito italiano di python, logcamente nel setup c'è anche il prompt
marko.fatto
12-06-2008, 19:16
lo spero che diventeranno automatiche. comunque, se non produce nessun output a cosa serve allora questo return? non si fa prima a usare print?
comunque il prompt funziona, quando inserisco ad esempio (5, 7) mi ritorna -1, se inserisco (0,0) mi ritorna 0 e se inserisco (7, 5) mi ritorna 1. come idle uso quello che è integrato nel file di setup scaricabile da sito italiano di python, logcamente nel setup c'è anche il prompt
se magari quel valore ti serve per altro e non devi stamparlo direttamente è utile ;)
comunque prova un:print Confronto(5,6)
oppure
risultato=Confronto(5,6)
print risultato
cdimauro
12-06-2008, 20:46
Ma quando passi un parametro numerico alla funziona raw_input non dovrebbe restituire un errore di tipo non valido?
No, perché, come ho detto, raw_input prende tutti i caratteri digitati e ritorna la stringa che li contiene. Non fa nessun controllo.
Comunque dallla 3.0 allora sia per stringhe che per numeri basterà usare solo la funzione input()?
Sì.
x by_to_by: ti ha risposto marko.fatto.
~FullSyst3m~
13-06-2008, 10:02
No, perché, come ho detto, raw_input prende tutti i caratteri digitati e ritorna la stringa che li contiene. Non fa nessun controllo.
Sì.
x by_to_by: ti ha risposto marko.fatto.
Allora dove sta l'utilità di avere due funzioni diverse per ricevere in input un numero o una stringa?
DanieleC88
13-06-2008, 10:06
Se magari vuoi evitare che l'input sia valutato come se fosse un'espressione... ;)
~FullSyst3m~
13-06-2008, 10:16
Se magari vuoi evitare che l'input sia valutato come se fosse un'espressione... ;)
Mhhhh... giusto! Avevo la testa totalmente ad un'altra cosa e mentre parlavo di un'altra... :muro: :muro: :muro:
Mi sono alzato ora che ci vuoi fare... :stordita:
khelidan1980
13-06-2008, 11:03
per me importa, sono 8 anni di esperienza che hai sulle spalle. e non sono pochi eh
No anche tu??Ma è un epidemia....
~FullSyst3m~
13-06-2008, 12:02
No anche tu??Ma è un epidemia....
Ho la sensazione che c'entro io in questa frase. Se è cosi, colgo l'occasione per dire una cosa: la mia intenzione non era nè lamentarmi nè altro, ma soltanto quella di esporre il mio pensiero ad altre persone che hanno esperienza nel campo e parlare di ciò che ho visto riguardo questo campo. Tutto qua. Oltre a questo ho anche passato un momento della mia vita difficile e in ogni caso, visto che ci siete passati tutti, credo che sia normale, vedendo e sentendo certe cose, farsi delle domande e chiedersi delle cose nella propria mente. I momenti difficili li passano tutti credo quando si inizia a programmare ;)
DanieleC88
13-06-2008, 12:23
No anche tu??Ma è un epidemia....
È vero, diamine. Come se poi io fossi chissà chi... :D
@~FullSystem~: non era un'accusa verso di te, è normale che chi sta agli inizi guardi quelli che hanno già fatto qualcosa e si chieda "ma fa per me?"... ma se fosse questo il discorso, un ragazzino che vuole diventare pianista, sentendo quello che hanno fatto Beethoven e Mozart dovrebbe gettare la spugna subito? No: bisogna dire "ok, loro ce l'hanno fatta, perché io no?".
E col tempo e con la passione tutto viene da sé... ;)
~FullSyst3m~
13-06-2008, 12:41
È vero, diamine. Come se poi io fossi chissà chi... :D
@~FullSystem~: non era un'accusa verso di te, è normale che chi sta agli inizi guardi quelli che hanno già fatto qualcosa e si chieda "ma fa per me?"... ma se fosse questo il discorso, un ragazzino che vuole diventare pianista, sentendo quello che hanno fatto Beethoven e Mozart dovrebbe gettare la spugna subito? No: bisogna dire "ok, loro ce l'hanno fatta, perché io no?".
E col tempo e con la passione tutto viene da sé... ;)
Ma certo, io la penso pure cosi. Se però by_to_by adesso ha scritto quella cosa e già gli si dice "è un'epidemia" o cose cosi non credo che gli sia d'aiuto..
DanieleC88
13-06-2008, 12:49
Perché sembra essere diventato un pensiero diffuso, ma non è lo spirito giusto, tutto qui. :)
khelidan1980
13-06-2008, 13:17
Ho la sensazione che c'entro io in questa frase. Se è cosi, colgo l'occasione per dire una cosa: la mia intenzione non era nè lamentarmi nè altro, ma soltanto quella di esporre il mio pensiero ad altre persone che hanno esperienza nel campo e parlare di ciò che ho visto riguardo questo campo. Tutto qua. Oltre a questo ho anche passato un momento della mia vita difficile e in ogni caso, visto che ci siete passati tutti, credo che sia normale, vedendo e sentendo certe cose, farsi delle domande e chiedersi delle cose nella propria mente. I momenti difficili li passano tutti credo quando si inizia a programmare ;)
guarda che mica ho detto epidemia di lamentele! ;) Solo che come dice Daniele sembra esser cosa diffusa,ma appunto non è lo spirito giusto,a mio modo di vedere essere così netti è un aiuto verso chi ha di questi dubbi
~FullSyst3m~
13-06-2008, 15:02
guarda che mica ho detto epidemia di lamentele! ;) Solo che come dice Daniele sembra esser cosa diffusa,ma appunto non è lo spirito giusto,a mio modo di vedere essere così netti è un aiuto verso chi ha di questi dubbi
Io invece credo che questo spirito cosi diffuso sia quello che porta molti ragazzi a iniziare con VB visto che in poco tempo riescono ad ottenere risultati concreti...
khelidan1980
13-06-2008, 15:04
Io invece credo che questo spirito cosi diffuso sia quello che porta molti ragazzi a iniziare con VB visto che in poco tempo riescono ad ottenere risultati concreti...
appunto e questa spirito diffuso non è un bene,bisogna usare atteggiamenti netti per far capire ciò! ;)
~FullSyst3m~
13-06-2008, 15:09
appunto e questa spirito diffuso non è un bene,bisogna usare atteggiamenti netti per far capire ciò! ;)
E anche tu hai ragione... è strano il mondo della programmazione :rolleyes:
khelidan1980
13-06-2008, 15:13
E anche tu hai ragione... è strano il mondo della programmazione :rolleyes:
il mondo della programmazione è talmente vasto che di sicuro ci troverai posto anche te! ;)
~FullSyst3m~
13-06-2008, 15:28
il mondo della programmazione è talmente vasto che di sicuro ci troverai posto anche te! ;)
Magari DIO... sarebbe il sogno di una vita!
by_to_by
13-06-2008, 15:30
altro problema, qua http://www.python.it/doc/Howtothink/Howtothink-html-it/chap05.htm
stavo riscrivendo gli esempi del 5.2 e del 5.3. la distanza tra due punti va, ma quando provo ad eseguire il codice per la composizione non va. ecco il codice che ho scritto:
import math
def DistanzaTraDuePunti (x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
DistQuadrata = dx**2 + dy**2
Risultato = math.sqrt (DistQuadrata)
return Risultato
Raggio = DistanzaTraDuePunti (x1, y1, x2, y2)
Risultato = AreaDelCerchio (Raggio)
def AreaDelCerchio2 (x1, y1, x2, y2):
Raggio = DistanzaTraDuePunti (x1, y1, x2, y2)
Risultato = AreaDelCerchio (Raggio)
print Risultato
return Risultato
AreaDelCerchio2 (2, 4, 6, 8)
ed ecco l'errore dell'ide:
NameError: name 'x1' is not defined
perchè non va?
DanieleC88
13-06-2008, 15:33
Raggio = DistanzaTraDuePunti (x1, y1, x2, y2)
perchè non va?
All'esterno di quella funzione, x1, x2, y1 e y2 non sono definite: fai riferimento ai parametri dalla funzione all'esterno di essa. :D
Mettici dei numeri, funzionerà.
by_to_by
13-06-2008, 15:39
All'esterno di quella funzione, x1, x2, y1 e y2 non sono definite: fai riferimento ai parametri dalla funzione all'esterno di essa. :D
Mettici dei numeri, funzionerà.
ho messo i numeri in Raggio = DistanzaTraDuePunti ho messo i numeri come parametro, ma ora mi dice che AreaDelCerchio non è definito. Non capisco, ho seguito la guida e riscritto semplicemente il codice, perchè non va?
DanieleC88
13-06-2008, 15:41
Perché AreaDelCerchio non è mai definita in quel pezzo di codice, almeno, non la vedo. ;)
khelidan1980
13-06-2008, 15:42
ho messo i numeri in Raggio = DistanzaTraDuePunti ho messo i numeri come parametro, ma ora mi dice che AreaDelCerchio non è definito. Non capisco, ho seguito la guida e riscritto semplicemente il codice, perchè non va?
perchè quando chiami areadelcerchio la prima volta ancora non l'hai definita
edit:vero tra l'altro la seconda funzione è areadelcerchio2,quindi devi definire anche l'altra
by_to_by
13-06-2008, 15:43
Perché AreaDelCerchio non è mai definita in quel pezzo di codice, almeno, non la vedo. ;)
sulla guida c'è scritto cosi. guarda il link. oltretutto devo prima capire dove sta il problema qua, altrimenti non so come fare l'esercizio (anche se non lo so fare a prescindere perchè non so come si trova la pendenza di una retta e nemmeno cosa significa " ritorna il valore delle ordinate quando la retta determinata dagli stessi punti ha X uguale a zero."
non vado forte in matematica
by_to_by
13-06-2008, 15:44
perchè quando chiami areadelcerchio la prima volta ancora non l'hai definita
edit:vero tra l'altro la seconda funzione è areadelcerchio2,quindi devi definire anche l'altra
io ho seguito la guida, nella guida c'era scritto cosi. non l'avevano definita prima. e poi cosa dovrei mettere nella definizione della funzione areadelcerchio?
khelidan1980
13-06-2008, 15:48
io ho seguito la guida, nella guida c'era scritto cosi. non l'avevano definita prima. e poi cosa dovrei mettere nella definizione della funzione areadelcerchio?
magari l'esempio della guida è parziale,per far funzionare il programma devi definire una funzione areadelcerchio che accetti un parametro,double andrebbe bene,che ti calcoli l'area di un cerchio usando il raggio
DanieleC88
13-06-2008, 15:49
Se guardi nel link, AreaDelCerchio è proprio la prima funzione che viene implementata... ;)
La pendenza di una retta è la sua inclinazione, la trovi con (x2 - x1)/(y2 - y1). Le ordinate sono semplicemente le coordinate Y in un piano cartesiano.
by_to_by
13-06-2008, 15:49
magari l'esempio della guida è parziale,per far funzionare il programma devi definire una funzione areadelcerchio che accetti un parametro,double andrebbe bene,che ti calcoli l'area di un cerchio usando il raggio
ho modificato il codice cosi ma quando lo eseguo mi restituisce "none":
import math
def DistanzaTraDuePunti (x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
DistQuadrata = dx**2 + dy**2
Risultato = math.sqrt (DistQuadrata)
return Risultato
def AreaDelCerchio (r):
Raggio**2*3.14
Raggio = DistanzaTraDuePunti (2, 4, 6, 8)
Risultato = AreaDelCerchio (Raggio)
def AreaDelCerchio2 (x1, y1, x2, y2):
Raggio = DistanzaTraDuePunti (x1, y1, x2, y2)
Risultato = AreaDelCerchio (Raggio)
print Risultato
return Risultato
AreaDelCerchio2 (2, 4, 6, 8)
DanieleC88
13-06-2008, 15:51
E il return quando lo dai? :p
;)
by_to_by
13-06-2008, 15:52
Se guardi nel link, AreaDelCerchio è proprio la prima funzione che viene implementata... ;)
La pendenza di una retta è la sua inclinazione, la trovi con (x2 - x1)/(y2 - y1). Le ordinate sono semplicemente le coordinate Y in un piano cartesiano.
e lui vuole che ritorno i valori delle ordinate quando la retta determinata dagli stessi punti ha X uguale a zero. che significa? e dove la devo implementare la funzione pendenza? a cosa mi serve per la funzione intercetta?
by_to_by
13-06-2008, 15:55
E il return quando lo dai? :p
;)
non pensavo che l'area del cerchio era stata definita all'inizio del capitolo, ora è tutto ok. ho problemi però a risolvere l'esercizio posto. odio la geometria
khelidan1980
13-06-2008, 15:57
non pensavo che l'area del cerchio era stata definita all'inizio del capitolo, ora è tutto ok. ho problemi però a risolvere l'esercizio posto. odio la geometria
comunque se davi un return andava bene lo stesso anche la tua,anche se non capisco il ** ma sicuramente sarà la sintassi di python
by_to_by
13-06-2008, 15:57
comunque se davi un return andava bene lo stesso anche la tua,anche se non capisco il ** ma sicuramente sarà la sintassi di python
i due ** significa elevamento a potenza
DanieleC88
13-06-2008, 15:58
e lui vuole che ritorno i valori delle ordinate quando la retta determinata dagli stessi punti ha X uguale a zero. che significa?
Che devi restituire i valori delle Y quando hai le X = 0.
mi serve per la funzione intercetta?
Esatto.
e dove la devo implementare la funzione pendenza?
Dove ti pare, ma prima di IntercettaY.
by_to_by
13-06-2008, 16:03
Che devi restituire i valori delle Y quando hai le X = 0.
Esatto.
Dove ti pare, ma prima di IntercettaY.
nell'esercizio però c'è scritto di usare la funzione pendenza IN un'altra funzione, cioè intercetta. ma non vedo l'utilità di usare la funzione pendenza nella funzione intecetta. capito che ti voglio dire?
DanieleC88
13-06-2008, 16:08
capito che ti voglio dire?
No, non molto in realtà... :stordita:
Se intendi che si può fare tutto in una stessa funzione e allora sarebbe lavoro inutile spezzarla in due funzioni, considera che:
è un esercizio scrivere funzioni di utilizzo generale, che possono essere riciclate anche altrove in un futuro sviluppo del tuo codice, è sempre una buona norma
ciao ;)
by_to_by
13-06-2008, 16:14
ho abbozzato questo codice:
import math
def Pendenza (x1, y1, x2, y2):
dx = x2 - x1
yx =y2 - y1
Risultato = dx / yx
print Risultato
return Risultato
Pendenza (5, 10, 15, 20)
def IntercettaY (x1, y1, x2, y2):
if x1 and x2 == 0:
print y1, y2
return y1, y2
IntercettaY (0, 10, 0, 20)
pendenza funziona, intercettaY no
by_to_by
13-06-2008, 16:16
No, non molto in realtà... :stordita:
Se intendi che si può fare tutto in una stessa funzione e allora sarebbe lavoro inutile spezzarla in due funzioni, considera che:
è un esercizio scrivere funzioni di utilizzo generale, che possono essere riciclate anche altrove in un futuro sviluppo del tuo codice, è sempre una buona norma
ciao ;)
mi spiego meglio. nella funzione area del cerchio2 ci sono implementate altre due funzioni, e cioè area del cerchio e distanza tra due punti. ora, l'esercizio vuole che nella funzione intercetta ci implemento la funziona pendenza, ma a differenza di quella del cerchio che serviva l'area e la distanza, alla funzione intercetta la funzione pendenza non serve a niente. capito ora?
DanieleC88
13-06-2008, 16:21
if x1 and x2 == 0:
Non conosco Python, ma sospetto che questa condizione venga valutata diversamente da quel che tu vuoi, io direi di sostituirla con una bella x1 == 0 and x2 == 0.
alla funzione intercetta la funzione pendenza non serve a niente
Non è detto: se la pendenza è zero, significa che le due X sono uguali a zero. Certo, può significare anche che sono semplicemente uguali tra di loro, però...
by_to_by
13-06-2008, 16:24
Non conosco Python, ma sospetto che questa condizione venga valutata diversamente da quel che tu vuoi, io direi di sostituirla con una bella x1 == 0 and x2 == 0.
Non è detto: se la pendenza è zero, significa che le due X sono uguali a zero. Certo, può significare anche che sono semplicemente uguali tra di loro, però...
avevi ragione, che scemo ignorante. ho messo x1 == 0 and x2 == 0 e ora funziona
uguali tra di loro cosa? e comunque potrebbe essere che è come dici tu, ma con il codice che ho postato funziona lo stesso. però c'è qualcosa che non mi quadra, non so cosa. sembra troppo facile cosi, forse l'esercizio non voleva questo
cmq in definitiva comunque questo return serve per ritornare o passare un valore. perchè prima quando non l'ho scritto non andava poi si (vuol dire che ha passato il valore ottenuto) o sbaglio?
by_to_by
13-06-2008, 16:26
mi sento un ignorante... uff
DanieleC88
13-06-2008, 16:27
Non gli passi dei parametri a quella funzione?
by_to_by
13-06-2008, 16:30
Non gli passi dei parametri a quella funzione?
questa è un'altra modifica al codice:
import math
def Pendenza (x1, y1, x2, y2):
dx = x2 - x1
yx =y2 - y1
Risultato = dx / yx
print Risultato
return Risultato
Pendenza (0, 5, 0, 15)
def IntercettaY (x1, y1, x2, y2):
if Pendenza == 0:
print y1, y2
return y1, y2
IntercettaY (25, 30, 35, 40)
siamo sempre là, non capisco perchè implementare pendenza quando passo i parametri ad intercetta e fanno tutto loro, non ha senso
comunque ora mi prendo 90 minuti di relax e vado a guardare la partita, a dopo
DanieleC88
13-06-2008, 16:49
if Pendenza == 0:
Io intendevo questo. Dovresti mettere Pendenza(x1, y1, x2, y2)... ;)
by_to_by
13-06-2008, 22:26
Io intendevo questo. Dovresti mettere Pendenza(x1, y1, x2, y2)... ;)
facendo cosi mi ritorna 1 e 0 anche se non capisco perchè. 0 è il risultato di pendenza e ci siamo, ma 0? e poi mettendo pendenza (x ecc ecc) == 0 il print che c'è dopo quale valore prende? di pendenza o di intercetta?
import math
def Pendenza (x1, y1, x2, y2):
dx = x2 - x1
yx =y2 - y1
Risultato = dx / yx
print Risultato
return Risultato
Pendenza (0, 5, 0, 15)
def IntercettaY (x1, y1, x2, y2):
if Pendenza (x1, y1, x2, y2) == 0:
print y1, y2
return y1, y2
IntercettaY (25, 30, 35, 40)
DanieleC88
13-06-2008, 22:32
facendo cosi mi ritorna 1 e 0 anche se non capisco perchè.
Per questo:
Pendenza (0, 5, 0, 15)
x1 = 0, x2 = 0... -> (x2 - x1) = 0. Zero diviso qualsiasi cosa è sempre zero.
0 è il risultato di pendenza e ci siamo, ma 0? e poi mettendo pendenza (x ecc ecc) == 0 il print che c'è dopo quale valore prende? di pendenza o di intercetta?
Eh? :D
Intendi le due Y? Sono i parametri che passi ad IntercettaY.
by_to_by
13-06-2008, 22:36
Per questo:
x1 = 0, x2 = 0... -> (x2 - x1) = 0. Zero diviso qualsiasi cosa è sempre zero.
Eh? :D
Intendi le due Y? Sono i parametri che passi ad IntercettaY.
riguardo lo 0 che ritorna pendenza ci siamo. quello che non capisco è l'1 che ritorna intercetta e quale x1, x2 ecc ecc prende la funzione intercetta? quelli suoi o quelli di pendenza che sono scritti sotto?
def IntercettaY (x1, y1, x2, y2):
if Pendenza (x1, y1, x2, y2) == 0:
che poi non capisco perchè mettere i parametri di pendenza nell'if. negli esempi del libro non è cosi. che poi comunque return il valore che ritorna lo assegna automaticamente ad una espressione o ad una variabile? perchè se nella funzione intercetta c'è sia il return di pendenza sia il return "suo" ci sono due return cosi... e perchè allora torna 1?
comunque volevo chiederti una cosa daniele:
Se magari vuoi evitare che l'input sia valutato come se fosse un'espressione...
cosa intendi tu per espressione?
DanieleC88
13-06-2008, 23:02
quello che non capisco è l'1 che ritorna intercetta
Be', ad IntercettaY() passi i valori x1 = 25, x2 = 35, y1 = 30, y2 = 40. Dopo di che, IntercettaY() passa gli stessi valori a Pendenza(), che stampa il suo risultato di ritorno con una print prima di uscire. E come viene valutata? (x2 - x1)/(y2 - y1) = (35 - 25)/(40 - 30) = 10/10 = 1.
quale x1, x2 ecc ecc prende la funzione intercetta? quelli suoi o quelli di pendenza che sono scritti sotto?
Quelli suoi, quelli di Pendenza() sono solo quelli che tu gli passi perché lei possa fare delle valutazioni, in realtà lei non modifica niente, semplicemente riceve gli stessi valori.
che poi non capisco perchè mettere i parametri di pendenza nell'if.
Perché li devi passare alla funzione chiamata, altrimenti lei non li riceve da nessuna parte. :)
negli esempi del libro non è cosi.
Uhm, sei sicuro? Mi sembra strano...
che poi comunque return il valore che ritorna lo assegna automaticamente ad una espressione o ad una variabile?
Non viene assegnato a niente, se non lo specifichi tu, semplicemente viene dato come risultato di quella chiamata.
perchè se nella funzione intercetta c'è sia il return di pendenza sia il return "suo" ci sono due return cosi...
Non ci sono "entrambi" i return, ce n'è solo uno.
cosa intendi tu per espressione?
Una cosa tipo (3 * 2): tu vuoi che sia restituita così com'è o che venga valutata come 6? ;)
by_to_by
13-06-2008, 23:17
Be', ad IntercettaY() passi i valori x1 = 25, x2 = 35, y1 = 30, y2 = 40. Dopo di che, IntercettaY() passa gli stessi valori a Pendenza(), che stampa il suo risultato di ritorno con una print prima di uscire. E come viene valutata? (x2 - x1)/(y2 - y1) = (35 - 25)/(40 - 30) = 10/10 = 1.
quindi, pendenza ritorna prima 0 per i primi valori passati e poi 1 per quelli passati in intercetta. bene, ma che fine ha fatto return y1, y2 nella funzione intercetta?
Non viene assegnato a niente, se non lo specifichi tu, semplicemente viene dato come risultato di quella chiamata.
scusa, ma l'utilità di return quale è? senza un'istruzione di stampa a schermo non si vede niente. il valore che ritorna return dove va a finire?
Non ci sono "entrambi" i return, ce n'è solo uno.
e cioè quale?
DanieleC88
13-06-2008, 23:23
quindi, pendenza ritorna prima 0 per i primi valori passati e poi 1 per quelli passati in intercetta. bene, ma che fine ha fatto return y1, y2 nella funzione intercetta?
Viene restituito come valore della funzione. Però non lo assegni a niente e non lo valuti, quindi non ha effetto nella pratica.
scusa, ma l'utilità di return quale è? senza un'istruzione di stampa a schermo non si vede niente. il valore che ritorna return dove va a finire?
Non esiste mica solo la console! Puoi fare una funzione matematica che valuti qualcosa e ti restituisca il suo valore, così che tu la possa assegnare altrove ad una variabile o valutarla in un'espressione.
e cioè quale?
Quello di IntercettaY(). ;)
by_to_by
13-06-2008, 23:32
Viene restituito come valore della funzione. Però non lo assegni a niente e non lo valuti, quindi non ha effetto nella pratica.
con la prima variante del codice però, senza pendenza ma con l'and, le ordinate mi venivano ritornate. perchè adesso no?
Non esiste mica solo la console! Puoi fare una funzione matematica che valuti qualcosa e ti restituisca il suo valore, così che tu la possa assegnare altrove ad una variabile o valutarla in un'espressione.
è scritto pure cosi nella guida, ma non capisco sinceramente. potresti spiegarti meglio o farmi un esempio? grazie
DanieleC88
13-06-2008, 23:39
con la prima variante del codice però, senza pendenza ma con l'and, le ordinate mi venivano ritornate. perchè adesso no?
Perché con quei valori che gli passi restituisce 1, e non più 0, quindi il confronto fallisce. ;)
è scritto pure cosi nella guida, ma non capisco sinceramente. potresti spiegarti meglio o farmi un esempio? grazie
Be', supponi di avere una funzione con due parametri che fa una semplice somma:
def Somma(x, y):
return (x + y);
Magari vuoi assegnare il valore del suo risultato a qualcos'altro:
temp = Somma(10, 5);
E avrai 15 in temp. ;)
by_to_by
13-06-2008, 23:47
Perché con quei valori che gli passi restituisce 1, e non più 0, quindi il confronto fallisce. ;)
Be', supponi di avere una funzione con due parametri che fa una semplice somma:
def Somma(x, y):
return (x + y);
Magari vuoi assegnare il valore del suo risultato a qualcos'altro:
temp = Somma(10, 5);
E avrai 15 in temp. ;)
quindi con il valore di ritorno si può assegnare a qualsiasi variabile.. ma temporanea o anche fissa? la variabile deve essere dentro la funzione o va bene anche fuori?
ad esempio temp, deve essere dentro la funzione o può essere anche fuori? e la variabile può essere fissa o deve essere temporanea
soltanto?
P.S. anche se non conosci python comunque non hai nessun problema vedo. sei quasi mio coetaneo e sai un sacco di cose. ho visto per caso qualche tuo messaggio in altri post. io sto impazzendo per fare queste 4 cose e mi sento un idiota..azz... :muro:
DanieleC88
13-06-2008, 23:54
quindi con il valore di ritorno si può assegnare a qualsiasi variabile.. ma temporanea o anche fissa? la variabile deve essere dentro la funzione o va bene anche fuori?
In realtà no, non è un'assegnazione. Semplicemente, fai in modo che quella funzione non faccia solo una serie di operazioni, ma che al termine di queste dia un risultato a chi l'ha chiamata: poi da dove è stata chiamata puoi fare quello che vuoi: confrontarla con altra roba all'interno di un if, o assegnarla ad una variabile, etc... :)
ad esempio temp, deve essere dentro la funzione o può essere anche fuori? e la variabile può essere fissa o deve essere temporanea
soltanto?
La puoi assegnare a quel che vuoi tu, ho risposto sopra. ;)
P.S. anche se non conosci python comunque non hai nessun problema vedo. sei quasi mio coetaneo e sai un sacco di cose. ho visto per caso qualche tuo messaggio in altri post. io sto impazzendo per fare queste 4 cose e mi sento un idiota..azz... :muro:
Perché Python ha il pregio di essere un linguaggio con una sintassi molto umana, altri linguaggi avrei dovuto "decifrarli" molto di più. E comunque tranquillo, vedessi le cose che scrivevo io agli inizi... terrificante. :D
by_to_by
13-06-2008, 23:59
Perché Python ha il pregio di essere un linguaggio con una sintassi molto umana, altri linguaggi avrei dovuto "decifrarli" molto di più. E comunque tranquillo, vedessi le cose che scrivevo io agli inizi... terrificante. :D
si però è pure sempre un linguaggio che non conosci e almeno tu scrivevi qualcosa. e i tuoi inizia quando sono stai? 12/13 anni? i miei sono ora, quindi pensa
Penso che una cosa interessante, per capire la "potenza" dello strumento che le funzioni ti mettono a disposizione, è nelle prime righe di questa pagine (http://it.wikipedia.org/wiki/Funzione_(matematica)).
Infatti il concetto di "funzione che ritorna un valore" è quanto mai vicino al concetto di funzione matematica.
Hai un insieme che è rappresentato dagli elementi che puoi passare come parametri, ed un altro rappresentato dai possibili valori in uscita.
Prendiamo come esempio la funzione di somma: i due insiemi coincidono e sono rappresentati dall'insieme dei "numeri" (numeri reali, ad esempio).
L'associazione realizzata è quella di restituire, "in cambio" dei due numeri che "le passi", il numero che rappresenta la loro somma.
Capirai che allora scrivere Somma(2,3) è esattamente la stessa cosa che scrivere 5, e potrai usare questo valore OVUNQUE, sia per assegnazioni semplici, ma anche in espressioni più complesse, come
mediaAnni = Somma(annimiei, annimamma, annipapà)/3
Fighe no stè funzioni? :cool:
P.S. ovviamente mi sono permesso la libertà di usare una funzione di somma a 3 addendi, che potrebbe essere sintetizzata come:
def Somma3(x, y, z):
return x + y + z
Spero di non aver fatto errori con la sintassi di Python ;)
DanieleC88
14-06-2008, 00:04
e i tuoi inizia quando sono stai? 12/13 anni? i miei sono ora, quindi pensa
Sì, all'incirca 13 anni, te l'ho già detto. Ma non c'entra niente il momento in cui inizi a programmare, in poco tempo, se ti applicherai, capirai bene le cose che ti servono, e potrai entrare nel vivo della programmazione. :cool:
ciao ;)
~FullSyst3m~
14-06-2008, 00:19
Penso che una cosa interessante, per capire la "potenza" dello strumento che le funzioni ti mettono a disposizione, è nelle prime righe di questa pagine (http://it.wikipedia.org/wiki/Funzione_(matematica)).
Infatti il concetto di "funzione che ritorna un valore" è quanto mai vicino al concetto di funzione matematica.
Hai un insieme che è rappresentato dagli elementi che puoi passare come parametri, ed un altro rappresentato dai possibili valori in uscita.
Prendiamo come esempio la funzione di somma: i due insiemi coincidono e sono rappresentati dall'insieme dei "numeri" (numeri reali, ad esempio).
L'associazione realizzata è quella di restituire, "in cambio" dei due numeri che "le passi", il numero che rappresenta la loro somma.
Capirai che allora scrivere Somma(2,3) è esattamente la stessa cosa che scrivere 5, e potrai usare questo valore OVUNQUE, sia per assegnazioni semplici, ma anche in espressioni più complesse, come
mediaAnni = Somma(annimiei, annimamma, annipapà)/3
Fighe no stè funzioni? :cool:
P.S. ovviamente mi sono permesso la libertà di usare una funzione di somma a 3 addendi, che potrebbe essere sintetizzata come:
def Somma3(x, y, z):
return x + y + z
Spero di non aver fatto errori con la sintassi di Python ;)
Per essere da meno di un anno che studi e programmi sei molto bravo a spiegare e ad esprimerti. Si vede che studi con passione e tanto impegno. ;)
Per essere da meno di un anno che studi e programmi sei molto bravo a spiegare e ad esprimerti. Si vede che studi con passione e tanto impegno. ;)
Facciamo che i complimenti si riinviano a dopo questa tornata d'esami: non vorrei dover scappare con la coda tra le gambe :sofico:
by_to_by
14-06-2008, 00:35
qualcuno mi dice che significa questo esercizio nel capitolo 5. più precisamente paragrafo 5.4:
Esercizio: scrivi una funzione CompresoTra(x,y,z) che ritorna 1 se yle xle z, altrimenti ritorna 0.
che sono ste yle xle...??
DanieleC88
14-06-2008, 00:39
La butto lì: è un errore di formattazione, probabilmente avresti dovuto riceverlo come y <= x <= z (non posso farti il simbolo matematico preciso), e cioè significa che x è compreso tra y e z, al più uguale a loro.
EDIT: ehm, sì, avevo ragione, non avevo letto il nome della funzione, ma "CompresoTra()" è chiarificante. ;)
by_to_by
14-06-2008, 00:45
La butto lì: è un errore di formattazione, probabilmente avresti dovuto riceverlo come y <= x <= z (non posso farti il simbolo matematico preciso), e cioè significa che x è compreso tra y e z, al più uguale a loro.
EDIT: ehm, sì, avevo ragione, non avevo letto il nome della funzione, ma "CompresoTra()" è chiarificante. ;)
è il secondo errore che trovo. ma quel "le" allora significa <= o >=? come lo sai?
e comunque compreso in che senso? tipo "5 è compreso tra 1 e 10?"
DanieleC88
14-06-2008, 00:49
tipo "5 è compreso tra 1 e 10?"
Precisamente. Come lo so? Be', ho incontrato quel tipo di scrittura in matematica, e quei "le" mi suonavano invece molto da svista di formattazione. ;)
è il secondo errore che trovo. ma quel "le" allora significa <= o >=? come lo sai?
e comunque compreso in che senso? tipo "5 è compreso tra 1 e 10?"
le significherà sicuramente Less or Equal: minore o uguale ;)
by_to_by
14-06-2008, 00:56
Precisamente. Come lo so? Be', ho incontrato quel tipo di scrittura in matematica, e quei "le" mi suonavano invece molto da svista di formattazione. ;)
tra suonare da svista e capire pure cosa significavano c'è differenza.
e se dovessi scrivere 5 compreso tra 0 e 10 dovrei scrivere 0 < 5 > 10? l'uguale che c'entra? se un numero deve essere compreso tra altri due non deve essere uguale a uno dei due numeri tra i quali è compreso
tra suonare da svista e capire pure cosa significavano c'è differenza.
e se dovessi scrivere 5 compreso tra 0 e 10 dovrei scrivere 0 < 5 > 10? l'uguale che c'entra? se un numero deve essere compreso tra altri due non deve essere uguale a uno dei due numeri tra i quali è compreso
Sarebbe 0 < 5 < 10, perchè 5 è nel contempo maggiore di 0 (0 < 5) e minore di 10 (5 < 10).
La questione dell'uguaglianza... beh a rigore non basta dire "è compreso tra 5 e 10" per capire se si considerano inclusi gli estremi o meno... quindi è opportuno che nel testo sia spiegato meglio.
In questo caso ci hanno tenuto a precisare con quel "le" che i valori devono essere less or equal, dunque conta 0 <= 5 <= 10.
DanieleC88
14-06-2008, 01:03
tra suonare da svista e capire pure cosa significavano c'è differenza.
Perché è una sequenza mnemonica che si usa spesso. Ad esempio, sono reduce da pochi giorni da un esame universitario di assembly MIPS: esiste un'istruzione che si chiama BLE (Branch if Less then or Equal), come vedi la sequenza "LE" c'è ancora. ;)
Volevo evitarmi di entrare così nello specifico per un minore o uguale. :D
e se dovessi scrivere 5 compreso tra 0 e 10 dovrei scrivere 0 < 5 > 10? l'uguale che c'entra? se un numero deve essere compreso tra altri due non deve essere uguale a uno dei due numeri tra i quali è compreso
Non è detto, puoi anche voler sapere se è compreso tra gli estremi o, al limite, uguale agli estremi. Comunque, in "matematichese" dovresti scrivere 0 < 5 < 10 (ovvero 0 è minore di 5 che a sua volta è minore di 10). Non conosco Python, ma dubito che accetti una tale sintassi, comunque, sono pochi gli operatori con tre operandi... Se ci pensi un po' c'è un modo semplice di aggirare il problema, però. ;)
DanieleC88
14-06-2008, 01:04
Azz sono stato lento! :D
Perché è una sequenza mnemonica che si usa spesso. Ad esempio, sono reduce da pochi giorni da un esame universitario di assembly MIPS: esiste un'istruzione che si chiama BLE (Branch if Less then or Equal), come vedi la sequenza "LE" c'è ancora. ;)
Volevo evitarmi di entrare così nello specifico per un minore o uguale. :D
Argh anche tu alle prese con Calcolatori Elettronici? Io mi sono divertito col 68000... :fagiano:
P.S. si vede che oggi abbiamo esagerato coi caffè, eh? :ciapet:
DanieleC88
14-06-2008, 01:09
Argh anche tu alle prese con Calcolatori Elettronici? Io mi sono divertito col 68000... :fagiano:
Eh sì, anche se da noi la chiamano Architettura degli elaboratori... Ma è quella, in sostanza. :D
P.S. si vede che oggi abbiamo esagerato coi caffè, eh? :ciapet:
No, no è quello il problema. Non ho preso alcun caffé stasera. Comincio a pensare di essere un animale notturno... La mattina invece sto come uno zombie all'uni... :D
by_to_by
14-06-2008, 01:24
Perché è una sequenza mnemonica che si usa spesso. Ad esempio, sono reduce da pochi giorni da un esame universitario di assembly MIPS: esiste un'istruzione che si chiama BLE (Branch if Less then or Equal), come vedi la sequenza "LE" c'è ancora.
Volevo evitarmi di entrare così nello specifico per un minore o uguale.
ma sei in ingegneria informatica?
puoi anche voler sapere se è compreso tra gli estremi
e non è quello che ho detto?
Argh anche tu alle prese con Calcolatori Elettronici? Io mi sono divertito col 68000...
il 68000 sarebbe quello dove cdimauro ha programmato un intero gioco tutto in assembly? cmq non sapevo che all'uni facevano fare assembly, è difficilissimo. e cmq anche cdimauro ha detto che è favoloso programmare in assembly su un 68000.. che avrà di bello? :boh:
DanieleC88
14-06-2008, 01:31
ma sei in ingegneria informatica?
No, informatica. :)
e non è quello che ho detto?
No, prima avevi detto che se è compreso tra, allora non deve essere uguale a. Questo non è vero in generale, dipende da ciò che intendi sapere, cioè dalla definizione che ti interessa di "compreso tra": potrebbe interessarti una definizione più allargata in cui contempli anche il caso dell'uguaglianza.
il 68000 sarebbe quello dove cdimauro ha programmato un intero gioco tutto in assembly? cmq non sapevo che all'uni facevano fare assembly, è difficilissimo. e cmq anche cdimauro ha detto che è favoloso programmare in assembly su un 68000.. che avrà di bello? :boh:
L'assembly che ti fanno fare di solito non è tantissimo; più che altro lo fanno studiare per farti capire come si parte dal "basso" per arrivare a linguaggi di alto livello, come il Python. Giusto per avere un'idea di cosa succede dentro la macchina. :)
Insomma, non aspettarti che io adesso ci scriva un gioco! :D
by_to_by
14-06-2008, 01:42
No, informatica. :)
No, prima avevi detto che se è compreso tra, allora non deve essere uguale a. Questo non è vero in generale, dipende da ciò che intendi sapere, cioè dalla definizione che ti interessa di "compreso tra": potrebbe interessarti una definizione più allargata in cui contempli anche il caso dell'uguaglianza.
L'assembly che ti fanno fare di solito non è tantissimo; più che altro lo fanno studiare per farti capire come si parte dal "basso" per arrivare a linguaggi di alto livello, come il Python. Giusto per avere un'idea di cosa succede dentro la macchina. :)
Insomma, non aspettarti che io adesso ci scriva un gioco! :D
adesso no, ma magari un giorno... comunque mi chiedo sempre se nell'ambito lavorativo si imparano tante cose anche grazie al fatto che magari fano dei corisl e aziende ecc. perchè ad esempio sviluppare un giorno in assembly non deve essre facile. uno che lavora per un'azienda e deve fare questo come fa se non conosce il linguaggio?
DanieleC88
14-06-2008, 01:48
Il linguaggio assembly è una cosa molto legata alla macchina per la quale scrivi un programma: diverse macchine hanno diverse istruzioni. Quindi, se ti dovesse capitare di impararlo per un particolare scopo, di solito sai anche su cosa girerà. Ci sono in giro diversi tutorial per capire le basi dell'assembly, una volta familiarizzato con il suo modo di pensare, non è così tanto diverso da altri linguaggi, solo molto più scomodo e poco produttivo.
Per fare riferimento alle istruzioni specifiche di una macchina o di una famiglia di macchine ci sono i manuali delle case produttrici, con la lista di tutte le istruzioni supportate, gli operandi che ricevono, le modifiche che effettuano, etc... :)
by_to_by
14-06-2008, 01:53
Il linguaggio assembly è una cosa molto legata alla macchina per la quale scrivi un programma: diverse macchine hanno diverse istruzioni. Quindi, se ti dovesse capitare di impararlo per un particolare scopo, di solito sai anche su cosa girerà. Ci sono in giro diversi tutorial per capire le basi dell'assembly, una volta familiarizzato con il suo modo di pensare, non è così tanto diverso da altri linguaggi, solo molto più scomodo e poco produttivo.
Per fare riferimento alle istruzioni specifiche di una macchina o di una famiglia di macchine ci sono i manuali delle case produttrici, con la lista di tutte le istruzioni supportate, gli operandi che ricevono, le modifiche che effettuano, etc... :)
non lo sapevo, troppo bello. affascinante. adesso dovrei essere al secondo anni di uni e invece devo prendere ancora il diploma. che scemo, ho buttato anni della mia vita cosi, senza studiare e imparare niente.adesso dovrei avere qualche conoscenza in più visto che sarei dovuto essere all'università e invece..
cdimauro
14-06-2008, 05:28
Non è detto, puoi anche voler sapere se è compreso tra gli estremi o, al limite, uguale agli estremi. Comunque, in "matematichese" dovresti scrivere 0 < 5 < 10 (ovvero 0 è minore di 5 che a sua volta è minore di 10). Non conosco Python, ma dubito che accetti una tale sintassi, comunque, sono pochi gli operatori con tre operandi... Se ci pensi un po' c'è un modo semplice di aggirare il problema, però. ;)
Togliti pure il dubbio: l'accetta, eccome. :D
>>> print 0 < 5 < 10
True
Che poi è equivalente a questo:
>>> print 0 < 5 and 5 < 10
True
Il vantaggio, a parte il ritrovarsi con un'espressione tipicamente matematica (che male non fa :p), è che con espressioni più complesse il numero "centrale" viene valutato una sola volta.
Quindi questo:
print 0 < Somma(x, y, z) < 10
è equivalente a questo:
s = Somma(x, y, z)
print 0 < s and s < 10
Puoi anche usare a catena gli operatori, più di 2 volte.
Questo:
print w < x < y < z
è equivalente a questo:
print w < x and x < y and y < z
Fico, vero? :cool:
Sull'assembly... lasciate perdere, che è meglio. ;)
DanieleC88
14-06-2008, 11:14
Togliti pure il dubbio: l'accetta,
Che forza! :D
eccome. :DSull'assembly... lasciate perdere, che è meglio. ;)
Ma infatti... chi glielo fa fare di pensare all'assembly adesso... :)
by_to_by
14-06-2008, 11:17
mi piace solo capire le cose e come funziona questo mondo. tu cdimauro avevi iniziato a studiare assembly all'epoca del gioco oppure lo hai studiato dopo per necessità visto che dovevi sviluppare quel gioco?
DanieleC88
14-06-2008, 11:26
mi piace solo capire le cose e come funziona questo mondo.
Questo è lo spirito giusto! Però l'assembly puoi tranquillamente rimandarlo. Per ora non ti è affatto indispensabile conoscerlo, anzi... finisce per distoglierti dal tuo obiettivo principale: programmare.
Più avanti potrai indagare per sapere cosa succede "sotto" quando tu fai un'addizione. ;)
by_to_by
14-06-2008, 11:29
Togliti pure il dubbio: l'accetta, eccome. :D
>>> print 0 < 5 < 10
True
Che poi è equivalente a questo:
>>> print 0 < 5 and 5 < 10
True
Il vantaggio, a parte il ritrovarsi con un'espressione tipicamente matematica (che male non fa :p), è che con espressioni più complesse il numero "centrale" viene valutato una sola volta.
Quindi questo:
print 0 < Somma(x, y, z) < 10
è equivalente a questo:
s = Somma(x, y, z)
print 0 < s and s < 10
Puoi anche usare a catena gli operatori, più di 2 volte.
Questo:
print w < x < y < z
è equivalente a questo:
print w < x and x < y and y < z
Fico, vero? :cool:
Sull'assembly... lasciate perdere, che è meglio. ;)
interessante, spero di aver capito
by_to_by
14-06-2008, 11:42
ho risolto l'esercizio del confonto cosi:
def CompresoTra (x, y, z):
if x <= z <= y:
print 1
return 1
else:
print 0
return 0
CompresoTra (10, 25, 30)
DanieleC88
14-06-2008, 11:47
Uhm, l'esercizio è giusto, ma mi sa che hai cambiato un po' l'ordine dei parametri (rileggi la traccia ;)).
Un consiglio: ora che conosci i valori di ritorno delle funzioni e la loro utilità, non scrivere:
print 1
return 1
dentro una funzione: lascia solo il return, e poi da dove la chiami usi:
print CompresoTra(5, 0, 10)
;)
by_to_by
14-06-2008, 11:49
Uhm, l'esercizio è giusto, ma mi sa che hai cambiato un po' l'ordine dei parametri (rileggi la traccia ;)).
Un consiglio: ora che conosci i valori di ritorno delle funzioni e la loro utilità, non scrivere:
print 1
return 1
dentro una funzione: lascia solo il return, e poi da dove la chiami usi:
print CompresoTra(5, 0, 10)
;)
hai ragione, l'ho fatto cosi per provare subito. se dovessi scriverla giusta la scriverei. comunque la traccia dice con la y. ho invertito, è la stessa cosa comunque
~FullSyst3m~
14-06-2008, 11:51
Uhm, l'esercizio è giusto, ma mi sa che hai cambiato un po' l'ordine dei parametri (rileggi la traccia ;)).
Un consiglio: ora che conosci i valori di ritorno delle funzioni e la loro utilità, non scrivere:
print 1
return 1
dentro una funzione: lascia solo il return, e poi da dove la chiami usi:
print CompresoTra(5, 0, 10)
;)
Quoto!! ;)
khelidan1980
14-06-2008, 13:10
mi piace solo capire le cose e come funziona questo mondo. tu cdimauro avevi iniziato a studiare assembly all'epoca del gioco oppure lo hai studiato dopo per necessità visto che dovevi sviluppare quel gioco?
il problema è che qualche anno fa non c'erano mega su mega di ram,cache del processore hard disk ecc ecc,e quindi si doveva fare tutto in assembly per utilizzare anche l'ultimo kb di memoria,era la norma,come adesso la norma è utilizzare un linguaggio di alto livello!
Comunque come già detto all'uni se ne fa pochino io ad esempio ho fatto il mips come architettura ed il progetto in assembly di solito è implementare una funziona matematica ricorsiva,nel mio caso era il qFattoriale,poca roba
by_to_by
14-06-2008, 14:08
il problema è che qualche anno fa non c'erano mega su mega di ram,cache del processore hard disk ecc ecc,e quindi si doveva fare tutto in assembly per utilizzare anche l'ultimo kb di memoria,era la norma,come adesso la norma è utilizzare un linguaggio di alto livello!
Comunque come già detto all'uni se ne fa pochino io ad esempio ho fatto il mips come architettura ed il progetto in assembly di solito è implementare una funziona matematica ricorsiva,nel mio caso era il qFattoriale,poca roba
hai imparato all'uni ad implementare una funzione matematica ricorsiva?
by_to_by
14-06-2008, 16:56
verso la fine del capitolo che sto facendo c'è messo:
possiamo generalizzare la funzione Fattoriale per farla lavorare anche nel caso di numeri in virgola mobile, o possiamo far controllare alla funzione dopo la sua chiamata se il parametro passato è del tipo corretto. La prima possibilità è chiamata in matematica funzione gamma (il fattoriale definito nei numeri reali) ed è decisamente al di là degli scopi di questo libro, così sceglieremo la seconda alternativa.
perchè non la potevano mettere nel libro? è cosi difficile?
DanieleC88
14-06-2008, 17:01
http://it.wikipedia.org/wiki/Funzione_gamma
by_to_by
14-06-2008, 17:07
guardando di nuovo l'esempio del fattoriale non capisco una cosa. nel diagramma del paragrafo 5.5 http://www.python.it/doc/Howtothink/Howtothink-html-it/chap05.htm alla fine c'è messo n--> 1 fattorialemenouno -->1. ma non dovrebbe essere zero il fattoriale meno 1? 1 -1 = 0. o no?
poi inserendo 4 come parametro mi ritorna 24 invece di 12... 4 * (4-1) fa 12 perchè allora mi restituisce 24?
khelidan1980
14-06-2008, 17:23
no scusa li vuol dire che richiama ricorsivamente la funzione fattoriale con parametro n-1 e quindi verrebbe 4*fattoriale(3) il fattoriale di 3 è 6 da qui il valore di 24
~FullSyst3m~
14-06-2008, 18:10
guardando di nuovo l'esempio del fattoriale non capisco una cosa. nel diagramma del paragrafo 5.5 http://www.python.it/doc/Howtothink/...-it/chap05.htm alla fine c'è messo n--> 1 fattorialemenouno -->1. ma non dovrebbe essere zero il fattoriale meno 1? 1 -1 = 0. o no?
Se leggi bene c'è anche scritto:
Così 3! è 3 moltiplicato 2!, che a sua volta è 2 moltiplicato 1!, che a sua volta è 1 moltiplicato 0!, che per definizione è 1.
by_to_by
14-06-2008, 18:27
no scusa li vuol dire che richiama ricorsivamente la funzione fattoriale con parametro n-1 e quindi verrebbe 4*fattoriale(3) il fattoriale di 3 è 6 da qui il valore di 24
si ma poi diventa 3 * fattoriale (2) e cosi via fino a 0, quindi non capisco
inoltre, casualmente, nel capitolo 3 ho letto questa cosa:
Cosa succede se chiami una funzione e non fai niente con il risultato che viene restituito (per esempio non lo assegni ad una variabile e non lo usi come parte di una espressione)?
La risposta è niente? anche perchè nel capitolo 3 ancora non si parlava di return, quindi non capisco cosa c'entri questa domanda
DanieleC88
14-06-2008, 18:39
si ma poi diventa 3 * fattoriale (2) e cosi via fino a 0, quindi non capisco
Ecco, appunto: fattoriale(4) = 4 * fattoriale(3) = 4 * 3 * fattoriale(2) = 4 * 3 * 2 * fattoriale(1) = 4 * 3 * 2 * 1.
Se rileggi, te l'avevo già spiegato io nelle mie prime risposte, quando ti ho spiegato la ricorsione (avevo fatto proprio l'esempio del fattoriale).
La risposta è niente?
Esatto.
by_to_by
14-06-2008, 18:51
Se rileggi, te l'avevo già spiegato io nelle mie prime risposte, quando ti ho spiegato la ricorsione (avevo fatto proprio l'esempio del fattoriale).
non trovo il messaggio, quale era?
Esatto.
però nel capitolo 3 ancora non si parlava di return, quindi non capisco cosa c'entri questa domanda visto che tra parentesi il testo dice "per esempio non lo assegni ad una variabile e non lo usi come parte di una espressione"
DanieleC88
14-06-2008, 18:53
http://www.hwupgrade.it/forum/showpost.php?p=22860228&postcount=5
Per il fatto del return, non so, non avendo letto nel link... Chiedilo agli autori. :D
khelidan1980
14-06-2008, 18:53
devi sforzarti di capire la ricorsione,te lo detto prima ed anche altri se no non li capisci questi esercizi,è una cosa importante per la programmazione!
DanieleC88
14-06-2008, 18:55
Ehm, già che c'ero stavo rileggendo un po', e c'è da correggere la funzione Pendenza() di prima... La si ha con (y2 - y1)/(x2 - x1). Scusami, avevo risposto distrattamente. :(
by_to_by
14-06-2008, 18:56
devi sforzarti di capire la ricorsione,te lo detto prima ed anche altri se no non li capisci questi esercizi,è una cosa importante per la programmazione!
cavolo lo so, ma come faccio? quando penso di averla capita poi mi capitano ste cose. uff. forse sono stupido o non fa per me la programmazione
by_to_by
14-06-2008, 18:58
Ehm, già che c'ero stavo rileggendo un po', e c'è da correggere la funzione Pendenza() di prima... La si ha con (y2 - y1)/(x2 - x1). Scusami, avevo risposto distrattamente. :(
perchè come l'ho scritta io?
DanieleC88
14-06-2008, 19:05
perchè come l'ho scritta io?
Prima ti avevo erroneamente detto (x2 - x1)/(y2 - y1)...
by_to_by
14-06-2008, 19:09
Prima ti avevo erroneamente detto (x2 - x1)/(y2 - y1)...
si invertono le incognite quindi. ok, grazie. io ho cercato ma non avevo trovato come calcolarla
DanieleC88
14-06-2008, 19:13
cavolo lo so, ma come faccio? quando penso di averla capita poi mi capitano ste cose. uff. forse sono stupido o non fa per me la programmazione
Non è difficile, devi solo entrare nella mentalità. Per fare ricorsione, hai bisogno di uno o più casi base, in cui interrompere il processo di ricorsione, e poi per tutti gli altri ti basterà ragionare come ti spiegherò fra poco.
Volendo, ad esempio, sommare tutti i numeri tra 1 e un generico numero n, puoi scrivere una funzione che riceva come parametro l'intero n. A questo punto, volendola implementare ricorsivamente, sai che una serie di operazioni verranno ripetute, finché non le dirai di smettere. Quando farlo? Se parti da n, devi scendere fino a 1, dunque uscirai quando avrai n == 1.
Che operazioni devi effettuare? Be', devi sommare dei numeri, partendo da n. Allora, la tua funzione Sommatoria(n) può semplicemente dare per scontato di saper sommare i primi (n - 1) numeri, e poi aggiungere n al risultato.
Tradotto in codice:
def Sommatoria(n):
if (n == 1):
return 1
return n + Sommatoria(n - 1)
Basta fare una cosa alla volta, e lasciare che le successive chiamate gestiscano i restanti casi. ;)
by_to_by
14-06-2008, 19:25
Allora, la tua funzione Sommatoria(n) può semplicemente dare per scontato di saper sommare i primi (n - 1) numeri, e poi aggiungere n al risultato.
perche n-1? e poi quale n deve aggiungere al risultato? se metto ad esempio 4 come parametro l'n è 4. quale n deve aggiungere? n-1 per caso, cioè 3 nell'esempio?
lasciare che le successive chiamate gestiscano i restanti casi
le chiamate se le fa in automtico però no?
DanieleC88
14-06-2008, 19:31
perche n-1? e poi quale n deve aggiungere al risultato? se metto ad esempio 4 come parametro l'n è 4. quale n deve aggiungere? n-1 per caso, cioè 3 nell'esempio?
Uso (n - 1) perché in questo caso bisogna scendere fino ad 1, altrimenti avrei usato qualcosa di diverso. No, sono tutte chiamate successive alla stessa funzione: tu la chiami con n = 4, poi lei si chiamerà di volta in volta diminuendo n, fino ad 1. In pratica, "rientri" nella funzione: prova ad immaginare cosa succede ad ogni chiamata, leggendo quelle tre righe di codice, all'inizio non capirai, forse, ma dopo ti sarà tutto chiaro. ;)
le chiamate se le fa in automtico però no?
Be', devi chiamarla tu la funzione all'interno del corpo di codice, ma come vedi dal mio esempio sono tre righe di codice e fa tutto.
by_to_by
14-06-2008, 19:33
ho già provato ad immaginare cosa succede
cdimauro
14-06-2008, 21:35
mi piace solo capire le cose e come funziona questo mondo. tu cdimauro avevi iniziato a studiare assembly all'epoca del gioco oppure lo hai studiato dopo per necessità visto che dovevi sviluppare quel gioco?
L'avevo studiato prima, per hobby / smanettamento.
Comunque... in principio era il linguaggio macchina (con la tabella degli opcode esadecimali del 6510). :cool:
by_to_by
14-06-2008, 21:37
L'avevo studiato prima, per hobby / smanettamento.
Comunque... in principio era il linguaggio macchina (con la tabella degli opcode esadecimali del 6510). :cool:
in principio quando hai iniziato a studiarlo tu? ma poi hai approfondito le tue conoscenze o hai fatto qualche corso quando hai iniziato a lavorare per l'azienda che produceva quel gioco?
Se hai problemi a scrivere una funzione ricorsiva fermati un attimo e prova a rispondere a tre domande.
1. Per quali valori in ingresso devo continuare con la ricorsione?
2. Come mi devo comportare se la ricorsione non è ancora terminata?
3. Quando il punto uno mi dice che la ricorsione è finita cosa devo fare?
In genere questi tre punto sono chiamati invariante, progressione e terminazione della funzione ricorsiva.
Quando hai ben chiare le risposte a quelle domande scrivere il codice diventa molto facile.
cdimauro
14-06-2008, 23:15
in principio quando hai iniziato a studiarlo tu?A 11 anni.
ma poi hai approfondito le tue conoscenze o hai fatto qualche corso quando hai iniziato a lavorare per l'azienda che produceva quel gioco?
Ho approfondito le conoscenze per i fatti miei.
Prima di iniziare a lavorare a quei giochi avevo già sviluppato un buon know-how su quegli argomenti, ma ovviamente lavorandoci tutti i giorni ho approfondito e migliorato notevolmente le mie conoscenze.
A 11 anni.
:eek: complimenti
by_to_by
15-06-2008, 18:42
A 11 anni.
Ho approfondito le conoscenze per i fatti miei.
Prima di iniziare a lavorare a quei giochi avevo già sviluppato un buon know-how su quegli argomenti, ma ovviamente lavorandoci tutti i giorni ho approfondito e migliorato notevolmente le mie conoscenze.
a 11 anni hai iniziato con assembly, uno dei più difficili, come mai? a quei tempi si trovavano le guide in rete? e cosa è un know-how?
Se hai problemi a scrivere una funzione ricorsiva fermati un attimo e prova a rispondere a tre domande.
1. Per quali valori in ingresso devo continuare con la ricorsione?
2. Come mi devo comportare se la ricorsione non è ancora terminata?
3. Quando il punto uno mi dice che la ricorsione è finita cosa devo fare?
In genere questi tre punto sono chiamati invariante, progressione e terminazione della funzione ricorsiva.
Quando hai ben chiare le risposte a quelle domande scrivere il codice diventa molto facile.
grazie del consiglio, un esempio di possibili risposte a queste domande?
a quei tempi si trovavano le guide in rete? e cosa è un know-how?
Seee, a quei tempi non avevamo nemmeno la rete :D
Ps: la prima rete utilizzabile in Italia l'abbiamo avuta fra il 1994 e il 1995. Ed era a costi molto alti, altro che flat e abbonamento gratuito.
by_to_by
15-06-2008, 18:45
Seee, a quei tempi non avevamo nemmeno la rete :D
Ps: la prima rete utilizzabile in Italia l'abbiamo avuta fra il 1994 e il 1995. Ed era a costi molto alti, altro che flat e abbonamento gratuito.
allora dove si studiava a quei tempi?
^TiGeRShArK^
15-06-2008, 18:46
Seee, a quei tempi non avevamo nemmeno la rete :D
Ps: la prima rete utilizzabile in Italia l'abbiamo avuta fra il 1994 e il 1995. Ed era a costi molto alti, altro che flat e abbonamento gratuito.
quoto :O
^TiGeRShArK^
15-06-2008, 18:48
allora dove si studiava a quei tempi?
io tutti manuali che avevo a casa del dos, del basic e la guida del quickbasic.
Poi leggevo qualche rivista e ho comprato un libro di C.
E per l'assembly ho iniziato a studiarlo su un libro di algortimi per l'elaborazione delle immagini CCD astronomiche... :fagiano:
allora dove si studiava a quei tempi?
Guarda solo per dirti che grado d'ignoranza c'era, ti dico che a fine anni '80 da ragazzino ho scoperto con il mio primo pc (un olivetti con Nec V40 come cpu) i comandi base del DOS, e incuriosito dal format mi sono rastrellato tutti i dischetti con i giochi. Se ancora ci penso mi prende un nervoso :rotfl:
by_to_by
15-06-2008, 18:50
io tutti manuali che avevo a casa del dos, del basic e la guida del quickbasic.
Poi leggevo qualche rivista e ho comprato un libro di C.
E per l'assembly ho iniziato a studiarlo su un libro di algortimi per l'elaborazione delle immagini CCD astronomiche... :fagiano:
scioccante..
Guarda solo per dirti che grado d'ignoranza c'era, ti dico che a fine anni '80 da ragazzino ho scoperto con il mio primo pc (un olivetti con Nec V40 come cpu) i comandi base del DOS, e incuriosito dal format mi sono rastrellato tutti i dischetti con i giochi. Se ancora ci penso mi prende un nervoso
e scusa, i comandi li hai scoperti cosi per caso? oppure anche tu avevi i manuali?
io tutti manuali che avevo a casa del dos, del basic e la guida del quickbasic.
Poi leggevo qualche rivista e ho comprato un libro di C.
E per l'assembly ho iniziato a studiarlo su un libro di algortimi per l'elaborazione delle immagini CCD astronomiche... :fagiano:
Si.. ma devi dire pure che tempi erano. Negli anni '80 non c'era nulla!
Nel mio paesino poi non ne parliamo, quei due rivenditori disonesti che c'erano erano considerati dei guru.
La prima macchina che ho utilizzato era un Bell con sistema operativo Unix che francamente non ricordo manco quale fosse. C'era un gestionale per la compatibilità e lavorando ogni tanto nel magazzino di mio zio ci mettevo su le mie mani pacioccose. Altro che manuali, che bei tempi :cry:
e scusa, i comandi li hai scoperti cosi per caso? oppure anche tu avevi i manuali?
A dirti il vero furono qualche parola strappata qui e la di un tecnico di laboratorio. Capisco che il mio caso sia limite, ma in realtà la conoscenza non era roba per tutti.
I manuali arrivarono dopo, quando feci un corso, che non solo fu una presa in giro (truffa magari è troppo, ma rende l'idea) ma che mi fecero capire che l'autodidatta che ha voglia di fare conclude prima e meglio il suo percorso.
Quello che mi sento di consigliare a chi ha voglia di fare, è di imparare solo gli schemi mentali per poter acquisire le conoscenze, ma poi di far da se.
by_to_by
15-06-2008, 18:54
Si.. ma devi dire pure che tempi erano. Negli anni '80 non c'era nulla!
Nel mio paesino poi non ne parliamo, quei due rivenditori disonesti che c'erano erano considerati dei guru.
La prima macchina che ho utilizzato era un Bell con sistema operativo Unix che francamente non ricordo manco quale fosse. C'era un gestionale per la compatibilità e lavorando ogni tanto nel magazzino di mio zio ci mettevo su le mie mani pacioccose. Altro che manuali, che bei tempi :cry:
quindi tu facevi le cose senza manuali? e da dove hai iniziato se non conoscevi i comandi?
by_to_by
15-06-2008, 18:55
A dirti il vero furono qualche parola strappata qui e la di un tecnico di laboratorio. Capisco che il mio caso sia limite, ma in realtà la conoscenza non era roba per tutti.
in che senso il tuo caso è limite?
Guarda solo per dirti che grado d'ignoranza c'era, ti dico che a fine anni '80 da ragazzino ho scoperto con il mio primo pc (un olivetti con Nec V40 come cpu) i comandi base del DOS, e incuriosito dal format mi sono rastrellato tutti i dischetti con i giochi. Se ancora ci penso mi prende un nervoso :rotfl:
Che ricordi fantastici... nel '92 usciva in edicola "PC Subito", corso ipersuperconcentrato di pc, hardware e nozioncine di basic.
Poi col mitico manuale di Ms-Dos (prima il 5 e poi il 6.22) a studiare tutto quello che si poteva fare... con il comando prompt ed un comandozzo che ora non ricordo si giochiacchiava a cambiare colori e prompt, per non parlare della orrida "dosshell"... e quanto tempo perso a creare quei bruttissimi menu coi file batch...
:cry:
P.S. per non parlare di quando nel '96 prendemmo il primo abbonamento a Internet, che stava tipo 300.000 lirette l'anno telefonate escluse... e ci si sentiva strafighi, con l'internet :fagiano:
quindi tu facevi le cose senza manuali? e da dove hai iniziato se non conoscevi i comandi?
L'ho detto più su, ti basta rileggere ;)
Aggiungo che in programmazione, prima Basic, poi Pascal (versione Borland) c'erano le guide allegate, spesso file .txt con i comandi.
Comunque ho cominciato acquistando fra le altre MC microcomputer. Una rivista molto in voga a quei tempi, molto tecnica e ricca di informazioni, dall'hardware ai primi approcci ai sistemi object oriented. Comunque cose che allora mi sembravano di una difficoltà assurda, adesso mi fanno ridere (magari un giorno lo sarà anche l'Analisi :p). Era l'alba dei personal computer.
in che senso il tuo caso è limite?
Che vivendo in un piccolo paesino del sud italia non avevo la possibilità di avere il materiale che mi serviva. Anche un semplice e stupido libro ad esempio.
Considera che ero anche molto piccolo. Quando il mio amico Pietro (si trasferì poco dopo in un'altra città) mi passo il C++ (rigorosamente su dischetti 3-1/2 single side :D) cominciai a studiarmelo con difficoltà. Lui già era molto bravo, adesso immagino farà il programmatore per qualche grossa azienda.
Che ricordi fantastici... nel '92 usciva in edicola
Ma scusa, ma se sei dell'89 come fai a ricordare certe cose? :D
^TiGeRShArK^
15-06-2008, 19:10
Ma scusa, ma se sei dell'89 come fai a ricordare certe cose? :D
...vero:eh:
grazie del consiglio, un esempio di possibili risposte a queste domande?
L'algoritmo per il calcolo del mcd di Euclide è ricorsivo e veramente semplice da scrivere. È quello che ci hanno insegnato alle elementari con le frazioni che fa uso delle sottrazioni tra i due numeri per arrivare al risultato.
1. Quando si deve continuare? (invariante)
Finche A e B non sono uguali la ricorsione deve continuare.
a != b
2. Come si deve procedere? (progressione)
Se A è maggiore di B allora A deve diventare A - B mentre B rimane invariato
Se B è maggiore di A allora B deve diventare B - A mentre A rimane invariato
a > b -> mcd (a-b, b)
a < b -> mcd (a, b-a)
3. Quando deve terminare la ricorsione? (terminazione)
Se A e B sono uguali abbiamo trovato l'mcd tra i due quindi dobbiamo uscire. Visto che sono uguali non ha importanza quale ritornare.
a == b
Il mio python è un po' arrugginito ma dovrebbe venire fuori qualcosa di simile. Prova a vedere se funziona :)
def mcd(a,b):
if (a == b):
return a
else:
if (a > b):
return mcd(a-b,b)
else:
return mcd(a,b-a)
by_to_by
15-06-2008, 19:50
...vero:eh:
quello che mi chiedo pure io
Quando il mio amico Pietro (si trasferì poco dopo in un'altra città) mi passo il C++ (rigorosamente su dischetti 3-1/2 single side ) cominciai a studiarmelo con difficoltà. Lui già era molto bravo, adesso immagino farà il programmatore per qualche grossa azienda.
che dischetti erano? mai sentiti. comunque poi hai perso rapporti con quel tuo amico? ma il c++ te lo ha passato quando lui ormai lo sapeva a memoria eh :asd:
^TiGeRShArK^
15-06-2008, 20:00
quello che mi chiedo pure io
che dischetti erano? mai sentiti. comunque poi hai perso rapporti con quel tuo amico? ma il c++ te lo ha passato quando lui ormai lo sapeva a memoria eh :asd:
quelli single side/High Density da 720 KB mentre i + comuni, in epoca + moderna, erano i double side / high density da 1,44 MB.
Io sul 386 avevo anche i floppy veri e propri da 5 e 1/4" da 1,2 MB :D
cdimauro
15-06-2008, 20:02
a 11 anni hai iniziato con assembly, uno dei più difficili, come mai?
No, ho iniziato col linguaggio macchina (e un po' di BASIC).
a quei tempi si trovavano le guide in rete? e cosa è un know-how?
Know-how = "sapere", bagaglio di conoscenza.
Seee, a quei tempi non avevamo nemmeno la rete :D
Ps: la prima rete utilizzabile in Italia l'abbiamo avuta fra il 1994 e il 1995. Ed era a costi molto alti, altro che flat e abbonamento gratuito.
Fidonet. :cool: Mi sono dissanguato per anni pur di frequentarla. :muro:
quindi tu facevi le cose senza manuali? e da dove hai iniziato se non conoscevi i comandi?
Manuali? Cosa sono i manuali? http://www-personal.edfac.usyd.edu.au/staff/souters/Humour/Real.Programmer.Stories.html
Real programmers don't read manuals. Reliance on a reference is a hallmark of the novice and the coward.
:cool:
L'ho detto più su, ti basta rileggere ;)
Aggiungo che in programmazione, prima Basic, poi Pascal (versione Borland) c'erano le guide allegate, spesso file .txt con i comandi.
Comunque ho cominciato acquistando fra le altre MC microcomputer. Una rivista molto in voga a quei tempi, molto tecnica e ricca di informazioni, dall'hardware ai primi approcci ai sistemi object oriented. Comunque cose che allora mi sembravano di una difficoltà assurda, adesso mi fanno ridere (magari un giorno lo sarà anche l'Analisi :p). Era l'alba dei personal computer.
Che vivendo in un piccolo paesino del sud italia non avevo la possibilità di avere il materiale che mi serviva. Anche un semplice e stupido libro ad esempio.
:eek: Sembra la mia storia. :p
by_to_by
15-06-2008, 20:11
No, ho iniziato col linguaggio macchina (e un po' di BASIC).
Know-how = "sapere", bagaglio di conoscenza.
Fidonet. :cool: Mi sono dissanguato per anni pur di frequentarla. :muro:
Manuali? Cosa sono i manuali? http://www-personal.edfac.usyd.edu.au/staff/souters/Humour/Real.Programmer.Stories.html
Real programmers don't read manuals. Reliance on a reference is a hallmark of the novice and the coward.
:cool:
:eek: Sembra la mia storia. :p
traduzione? comunque se non leggevano i manuali, come imparavano se non conoscevano il linguaggio?
ma il linguaggio macchina non è l'assembly?
DanieleC88
15-06-2008, 20:12
Real programmers don't read manuals. Reliance on a reference is a hallmark of the novice and the coward.
Verissimo, io di solito imparo per esempi e per tentativi.
:stordita:
by_to_by
15-06-2008, 20:12
Verissimo, io di solito imparo per esempi e per tentativi.
:stordita:
come si imapara cosi scusa? se non conosci un linguaggio devi sapere la sintassi e anche i comandi ecc, se non leggi i manuali come li sai?
Verissimo, io di solito imparo per esempi e per tentativi.
:stordita:
Ed è per questo che sei poco serio :p
DanieleC88
15-06-2008, 20:22
Ed è per questo che sei poco serio :p
E anche questo è vero... :D
come si imapara cosi scusa? se non conosci un linguaggio devi sapere la sintassi e anche i comandi ecc, se non leggi i manuali come li sai?
Leggendo di qua e di là, vedendo come si fa dagli esempi pratici. Dopo mi documento. :D
Ho imparato più o meno così i linguaggi che conosco. E si vede, devo dire. :stordita:
Poi questo forum mi è stato utilissimo per imparare, e grazie ad internet in generale ho fatto un po' d'esperienza. Ma è anche per questo che c'ho messo così tanto, per i prossimi linguaggi voglio un bel manualone cartaceo. ;)
~FullSyst3m~
15-06-2008, 20:22
L'algoritmo per il calcolo del mcd di Euclide è ricorsivo e veramente semplice da scrivere. È quello che ci hanno insegnato alle elementari con le frazioni che fa uso delle sottrazioni tra i due numeri per arrivare al risultato.
1. Quando si deve continuare? (invariante)
Finche A e B non sono uguali la ricorsione deve continuare.
a != b
2. Come si deve procedere? (progressione)
Se A è maggiore di B allora A deve diventare A - B mentre B rimane invariato
Se B è maggiore di A allora B deve diventare B - A mentre A rimane invariato
a > b -> mcd (a-b, b)
a < b -> mcd (a, b-a)
3. Quando deve terminare la ricorsione? (terminazione)
Se A e B sono uguali abbiamo trovato l'mcd tra i due quindi dobbiamo uscire. Visto che sono uguali non ha importanza quale ritornare.
a == b
Il mio python è un po' arrugginito ma dovrebbe venire fuori qualcosa di simile. Prova a vedere se funziona :)
def mcd(a,b):
if (a == b):
return a
else:
if (a > b):
return mcd(a-b,b)
else:
return mcd(a,b-a)
Il codice funziona, però è bruttissimo come è impostato. Io lo avrei scritto cosi:
def mcd (a,b):
if a == b:
return a
elif a > b:
return mcd (a-b, b)
else:
return mcd (a, b-a)
Il codice funziona, però è bruttissimo come è impostato. Io lo avrei scritto cosi:
Python non mi piace. Già mi stupisco che sia riuscito a scrivere qualcosa che compila :D
Se ci fosse un operatore ternario si potrebbe riscrivere tutto su una sola linea ma poi non sarebbe il massimo della chiarezza e già mi immagino le facce che avrebbe fatto by_to_by dall'altra parte del monitor.
by_to_by
15-06-2008, 20:35
E anche questo è vero... :D
Leggendo di qua e di là, vedendo come si fa dagli esempi pratici. Dopo mi documento. :D
Ho imparato più o meno così i linguaggi che conosco. E si vede, devo dire. :stordita:
Poi questo forum mi è stato utilissimo per imparare, e grazie ad internet in generale ho fatto un po' d'esperienza. Ma è anche per questo che c'ho messo così tanto, per i prossimi linguaggi voglio un bel manualone cartaceo. ;)
scusami, ma gli esempi non dovevi leggerli da qualche parte? e poi se non conosci un linguaggio non puoi programmare se non leggi su un manuale la sintassi ecc quindi non mi spiego come sia possibile. allora solo le persone che non usano manuali sono vrei programmatori?
Manuali? Cosa sono i manuali? http://www-personal.edfac.usyd.edu.a...r.Stories.html
Real programmers don't read manuals. Reliance on a reference is a hallmark of the novice and the coward.
riquoto ciò che ho scritto sotto:
"traduzione? comunque se non leggevano i manuali, come imparavano se non conoscevano il linguaggio?
ma il linguaggio macchina non è l'assembly?"
cioè, che facevano: ora mi siedo, e inizio a scrivere comandi che non ho mai sentito e non conosco e programmo senza leggere nessun manuale. proprio non capisco
DanieleC88
15-06-2008, 21:02
scusami, ma gli esempi non dovevi leggerli da qualche parte? e poi se non conosci un linguaggio non puoi programmare se non leggi su un manuale la sintassi ecc quindi non mi spiego come sia possibile. allora solo le persone che non usano manuali sono vrei programmatori?
Infatti ho imparato grazie ad internet, altrimenti avrei dovuto comprare comunque qualcosa che mi introducesse a qualche linguaggio. Agli inizi ricordo che mi aiutò mio zio, che già si dilettava da anni programmando in Visual Basic. :)
Il fatto dei "veri programmatori" era una battuta, comunque... :D
ma il linguaggio macchina non è l'assembly?
Non esattamente, il linguaggio macchina è dato dall'insieme di istruzioni decodificabili dalla tua CPU, l'assembly è un insieme di codici mnemonici che ti permette di far riferimento in modo "umano" a particolari istruzioni della macchina o specificare modi di indirizzamento.
cioè, che facevano: ora mi siedo, e inizio a scrivere comandi che non ho mai sentito e non conosco e programmo senza leggere nessun manuale. proprio non capisco
Non ci crederai, ma la prima volta che mi sono imbattuto nel mondo della programmazione, ho cominciato proprio così: all'epoca usavo spesso il DOS, e conoscevo Edit come editor di testo. Sul mio PC era installato, ho notato in seguito, un certo "QBASIC", che all'epoca nemmeno sapevo cosa fosse. L'ho aperto, mi sembrava simile ad Edit e ho provato a scrivere cose a caso. Lui ha cominciato subito a correggermi sulla sintassi che ovviamente era errata, dicendomi "Expected: <qualcosa>" ad ogni parola. Poi mi sono documentato, e ho scoperto che "quell'editor stupido" non era un editor... :D
^TiGeRShArK^
15-06-2008, 21:05
scusami, ma gli esempi non dovevi leggerli da qualche parte? e poi se non conosci un linguaggio non puoi programmare se non leggi su un manuale la sintassi ecc quindi non mi spiego come sia possibile. allora solo le persone che non usano manuali sono vrei programmatori?
riquoto ciò che ho scritto sotto:
"traduzione? comunque se non leggevano i manuali, come imparavano se non conoscevano il linguaggio?
andando ad orecchio direi: "I veri programmatori non leggono manuali. Affidarsi alle guide ufficiali è un segno distintivo del niubbo e del codardo"
ma il linguaggio macchina non è l'assembly?"
no...:fagiano:
l'assembly è la traduzione mediante operatori mnemonici degli opcode del codice macchina.
cioè, che facevano: ora mi siedo, e inizio a scrivere comandi che non ho mai sentito e non conosco e programmo senza leggere nessun manuale. proprio non capisco
...era ovviamente un'estremizzazione quella di cesare... :stordita:
chiedigli come avrebbe programmato in linguaggio macchina senza la sua fida tabella degli opcode :asd:
Ma scusa, ma se sei dell'89 come fai a ricordare certe cose? :D
Avevo 4 anni eh, non è che fossi neonato :fagiano:
Comunque nel '92 è arrivato il primo pc in famiglia... per questo associo anche i fascicoli in edicola a quella data, ma magari sono usciti 1 annetto dopo.
Non è che a 4 anni fossi in grado di usare il computer a pieno, però avevo imparato quelle poche cose fondamentali, cd, dir e poco altro per lanciare i giochini (Commander Keen, Wolf3d...).
Penso che anche al giorno d'oggi un ragazzo inizia a familiarizzare con il pc verso i 6, 7 anni, quindi non ci vedo molto di strano.
^TiGeRShArK^
15-06-2008, 21:17
Avevo 4 anni eh, non è che fossi neonato :fagiano:
Comunque nel '92 è arrivato il primo pc in famiglia... per questo associo anche i fascicoli in edicola a quella data, ma magari sono usciti 1 annetto dopo.
Non è che a 4 anni fossi in grado di usare il computer a pieno, però avevo imparato quelle poche cose fondamentali, cd, dir e poco altro per lanciare i giochini (Commander Keen, Wolf3d...).
Penso che anche al giorno d'oggi un ragazzo inizia a familiarizzare con il pc verso i 6, 7 anni, quindi non ci vedo molto di strano.
:asd:
si pure io avevo iniziato verso i 3 ani e mezzo vedendo mio padre che lanciava il mitico "alley cat" (un bacio in fronte a chi lo ricorda :asd: ), e, volendoci giocare, ho imparato questi comandi :D
cdimauro
15-06-2008, 21:50
Python non mi piace. Già mi stupisco che sia riuscito a scrivere qualcosa che compila :D
Se ci fosse un operatore ternario si potrebbe riscrivere tutto su una sola linea ma poi non sarebbe il massimo della chiarezza e già mi immagino le facce che avrebbe fatto by_to_by dall'altra parte del monitor.
Esiste, esiste (introdotto con Python 2.5). :cool:
def mcd (a, b):
if a == b:
return a
else:
return mcd (a - b, b) if a > b else mcd (a, b - a)
Si potrebbe anche scrivere su una sola riga:
def mcd (a, b):
return a if a == b else (mcd (a - b, b) if a > b else mcd (a, b - a))
ma non mi piace.
L'operatore ternario, quando serve, preferisco usarlo UNA sola volta all'interno di un'espressione.
Ciò non toglie che è di gran lunga più leggibile di quella porcata di ? usata da C & derivati or ispirati. :cool:
...era ovviamente un'estremizzazione quella di cesare... :stordita:
chiedigli come avrebbe programmato in linguaggio macchina senza la sua fida tabella degli opcode :asd:
Infatti, senza di quella non sarei diventato un informatico, ma avrei continuato a coltivare la passione per la chimica. :D
:asd:
si pure io avevo iniziato verso i 3 ani e mezzo vedendo mio padre che lanciava il mitico "alley cat" (un bacio in fronte a chi lo ricorda :asd: ), e, volendoci giocare, ho imparato questi comandi :D
Il gioco del gatto per DOS, che funzionava a 320x200 a 4 colori sulla CGA? Se è quello... MI-TI-CO! E' stato uno dei primi giochi (forse il primo) che ho visto girare su DOS (a parte nibbler scritto in gwbasic :p).
^TiGeRShArK^
15-06-2008, 23:41
scusami, ma gli esempi non dovevi leggerli da qualche parte? e poi se non conosci un linguaggio non puoi programmare se non leggi su un manuale la sintassi ecc quindi non mi spiego come sia possibile.
...dimenticavo..
io ho scritto un programa commerciale in C# senza conoscere assolutamente nulla della sua sintassi (vabbè che venivo da java in effetti... :asd: )comunque il senso è: una volta che impari a programmare il linguaggio è solo uno strumento :p
by_to_by
16-06-2008, 07:30
...dimenticavo..
io ho scritto un programa commerciale in C# senza conoscere assolutamente nulla della sua sintassi (vabbè che venivo da java in effetti... :asd: )comunque il senso è: una volta che impari a programmare il linguaggio è solo uno strumento :p
però scusami, se non conosci la sintassi come fai a scrivere un programma, per giunta commerciale, anche se sai programmare? C# e Java sono diversi credo, anche se sai programmare almeno la sintassi del programma la devi studiare
e come se io che sto facendo python so che un hello world lo posso scrivere:
print hello world
se passo ad un altro linguaggio, non saprei come farlo se non vado a studiarmi come è il linguaggio
capito che voglio dire? comqunque, per curiosità, che programma era?
Non ci crederai, ma la prima volta che mi sono imbattuto nel mondo della programmazione, ho cominciato proprio così: all'epoca usavo spesso il DOS, e conoscevo Edit come editor di testo. Sul mio PC era installato, ho notato in seguito, un certo "QBASIC", che all'epoca nemmeno sapevo cosa fosse. L'ho aperto, mi sembrava simile ad Edit e ho provato a scrivere cose a caso. Lui ha cominciato subito a correggermi sulla sintassi che ovviamente era errata, dicendomi "Expected: <qualcosa>" ad ogni parola. Poi mi sono documentato, e ho scoperto che "quell'editor stupido" non era un editor...
si, ma questo è il modo in cui hai scoperto il linguaggio, poi per impararlo ti sei andato a documentare
Avevo 4 anni eh, non è che fossi neonato
Comunque nel '92 è arrivato il primo pc in famiglia... per questo associo anche i fascicoli in edicola a quella data, ma magari sono usciti 1 annetto dopo.
Non è che a 4 anni fossi in grado di usare il computer a pieno, però avevo imparato quelle poche cose fondamentali, cd, dir e poco altro per lanciare i giochini (Commander Keen, Wolf3d...).
Penso che anche al giorno d'oggi un ragazzo inizia a familiarizzare con il pc verso i 6, 7 anni, quindi non ci vedo molto di strano.
guarda, io non riesco ad immaginare bambini a 3 - 4 anni o 7/8 anni che scrivono comandi in una shell perchè credo che non abbiano ancora il cervello abbastanza sviluppato. conosco un sacco di bambini, e anche se qualcuno gli spiegase di inserire help nel prompt non credo che lo saprebbero fare o che poi se lo ricorderebbero o che incuriositi iniziano a digitare comandi a caso e iniziano cosi a buttarsi nel mondo della programmazione
~FullSyst3m~
16-06-2008, 07:43
L'ho detto più su, ti basta rileggere ;)
Aggiungo che in programmazione, prima Basic, poi Pascal (versione Borland) c'erano le guide allegate, spesso file .txt con i comandi.
Comunque ho cominciato acquistando fra le altre MC microcomputer. Una rivista molto in voga a quei tempi, molto tecnica e ricca di informazioni, dall'hardware ai primi approcci ai sistemi object oriented. Comunque cose che allora mi sembravano di una difficoltà assurda, adesso mi fanno ridere (magari un giorno lo sarà anche l'Analisi :p). Era l'alba dei personal computer.
Che vivendo in un piccolo paesino del sud italia non avevo la possibilità di avere il materiale che mi serviva. Anche un semplice e stupido libro ad esempio.
Considera che ero anche molto piccolo. Quando il mio amico Pietro (si trasferì poco dopo in un'altra città) mi passo il C++ (rigorosamente su dischetti 3-1/2 single side :D) cominciai a studiarmelo con difficoltà. Lui già era molto bravo, adesso immagino farà il programmatore per qualche grossa azienda.
Ma scusa, ma se sei dell'89 come fai a ricordare certe cose? :D
Il mio stesso caso. Abito in un paesino disperso della Sicilia, con una connessione 56K. Avere internet qua quando avevo 11/12 anni era un lusso e oltretutto costava soldini. Quando lo misi mi si aprì un mondo, ma stavo troppo poco collegato per poter scoprire il vero mondo informatico. Riviste che potevano aiutarmi non c'è n'erano, solo riviste alla Win Magazine o alla Computer Week, quindi niente programmazione o simili. La programmazione l'ho scoperta da grande, 15 anni circa, grazie un mio amico che me ne ha parlato, che era da un anno che aveva un pc ma conosceva ad uno che fa il programmatore in un'azienda. Però non mi aveva attirato più di tanto forse perchè se non vedo non credo, forse perchè vista la situazione sono sempre stato convinto che la programmazione si iniziasse a fare all'uni e prima non si poteva fare, forse perchè da come ne parlava non mi ha suscitato interesse, non so. Fattostà che essendo che potevo collegarmi poco tempo al giorno, invece di documentarmi su una cosa che non mi aveva suscitato nessun interesse, in quel poco tempo scaricavo programmini, giocavo con un gioco di formula 1 in dos e qualche sito qua e là. Poi, 1 o 2 anni dopo un ragioniere che lavorava al comune (che alle volte mi chiamava per andare a sistemare qualche pc al comune) mi aveva detto, non so come, di un comando dir da mettere nel prompt che ti faceva vedere i file. Quando l'ho visto mi è piaciuto un sacco vedere quelle scritte e ogni volta aprivo il DOS e lo inserivo. Cosi quando ho avuto un collegamento decente ho iniziato a documentarmi, ma non sulla programmazione, ma su altre cose che faccio ancora ora. Poi però la programmazione era ovunque andassi, cosi mi sono appassionato ed eccomi qua. Mi dispiace solo non avere avuto motivazioni per potermi appassionare prima :(
by_to_by
16-06-2008, 08:01
volevo fare un programmino che chiedeva due numeri e faceva la somma. dopodichè non doveva uscire dal programma, ma dopo che faceva la somma, chiedere di nuovo i due numeri.
ho scritto questo, ma mi chiede sempre i due numeri e non fa nessuna somma
somma = raw_input ("inserisci il primo numero")
somma2 = raw_input ("inserisci il secondo numero")
risultato = somma + somma2
oltretutto quando lo faccio partire dall'ide prima di chiedere i numeri devo premere un pulsante altrimenti c'è il cursore che lampeggia senza chiedere niente
invece cosi funziona:
def somma (a,b):
print a+b
somma (5,6)
devo definire per forza una funzione per fare questo? io volevo farlo chiedendo i dati all'utente
marko.fatto
16-06-2008, 10:06
..cuttone..
come ti avevo già detto da qualche altra parte mi pare il risultato devi anche stamparlo :stordita:
somma = raw_input ("inserisci il primo numero")
somma2 = raw_input ("inserisci il secondo numero")
print risultato = somma + somma2
se poi vuoi farlo ripetere metti tutto dentro ad un ciclo
^TiGeRShArK^
16-06-2008, 11:07
Il gioco del gatto per DOS, che funzionava a 320x200 a 4 colori sulla CGA? Se è quello... MI-TI-CO! E' stato uno dei primi giochi (forse il primo) che ho visto girare su DOS (a parte nibbler scritto in gwbasic :p).
si era proprio lui :D
che spettacolo ai tempi :asd:
^TiGeRShArK^
16-06-2008, 11:09
però scusami, se non conosci la sintassi come fai a scrivere un programma, per giunta commerciale, anche se sai programmare? C# e Java sono diversi credo, anche se sai programmare almeno la sintassi del programma la devi studiare
La studiavo mentre scrivevo il codice, e a mano a mano che scoprivo costrutti nuovi li utilizzavo...
Imparare un nuovo linguaggio di programmazione è sostanzialmente una cavolata...
Il difficile è imparare a programmare :p
marko.fatto
16-06-2008, 11:16
si era proprio lui :D
che spettacolo ai tempi :asd:
ma quello che lo facevi arrampicare sugli steccati ecc? :eek:
c'ho ancora il floppettone gigante con quel gioco.. quasi quasi ritiro fuori lo schneider (o come diavolo si scrive) con lo schermo giallo e nero e lo riprovo :eek:
^TiGeRShArK^
16-06-2008, 11:45
ma quello che lo facevi arrampicare sugli steccati ecc? :eek:
c'ho ancora il floppettone gigante con quel gioco.. quasi quasi ritiro fuori lo schneider (o come diavolo si scrive) con lo schermo giallo e nero e lo riprovo :eek:
si si, è lui :p
devi prima saltare sui bidoni, poi sullo steccato e quindi sulle finestre dove scegli le varie stanze :p
marko.fatto
16-06-2008, 11:57
si si, è lui :p
devi prima saltare sui bidoni, poi sullo steccato e quindi sulle finestre dove scegli le varie stanze :p
quello era il mio gioco preferito assieme a quello dell'idraulico :D
poi sono passato alla sottospecie di indiana jones :asd:
by_to_by
16-06-2008, 12:16
come ti avevo già detto da qualche altra parte mi pare il risultato devi anche stamparlo :stordita:
somma = raw_input ("inserisci il primo numero")
somma2 = raw_input ("inserisci il secondo numero")
print risultato = somma + somma2
se poi vuoi farlo ripetere metti tutto dentro ad un ciclo
come hai scritto tu risultato= somma + somm2 mi dice che c'è un errore di sintassi, cioè =. dovrebbe essere ==. invece scrivendo cosi:
somma = raw_input ("inserisci il primo numero")
somma2 = raw_input ("inserisci il secondo numero")
risultato = somma + somma2
print risultato
funziona, ma se ad esempio metto 2 e 3 come numeri mi restituisce 23 e non 5. perchè?
comunque il ciclo l'ho fatto cosi:
while 0 == 0:
somma = raw_input ("inserisci il primo numero")
somma2 = raw_input ("inserisci il secondo numero")
risultato = somma + somma2
print risultato
ma mi continua all'infinito, se volessi mettere un'opzione per farlo uscire ad esempio scrivendo exit come dovrei fare?
DanieleC88
16-06-2008, 12:24
Il fatto che ti stampi 23 suppongo sia dovuto al fatto che raw_input() restituisce stringhe di input (qualcuno mi corregga se sbaglio), e stampa... '2' e poi '3': '23'. Penso che ci sia bisogno di dirgli di interpretarli come numeri.
Per la terminazione del ciclo invece... a parte che io avrei messo while True: come condizione, per uscire da quel pensa che devi reagire a degli input, e terminare quando ricevi un certo input... Suggerimento: pensa ad un particolare valore che faccia al caso tuo. ;)
by_to_by
16-06-2008, 12:29
Il fatto che ti stampi 23 suppongo sia dovuto al fatto che raw_input() restituisce stringhe di input (qualcuno mi corregga se sbaglio), e stampa... '2' e poi '3': '23'. Penso che ci sia bisogno di dirgli di interpretarli come numeri.
Per la terminazione del ciclo invece... a parte che io avrei messo while True: come condizione, per uscire da quel pensa che devi reagire a degli input, e terminare quando ricevi un certo input... Suggerimento: pensa ad un particolare valore che faccia al caso tuo. ;)
hai ragione, dovevo mettere input, non raw_input. per il resto io posso mettere true, ma perchè quello che scrivo è vero? non potrei mettere fals? e come un valore che fa al caso mio potrei creare solo una variabile con una stringa e quando inserisco il nome della stringa esce. oppure tu con quel "particolare valore che fa al caso tuo" intendi false?
by_to_by
16-06-2008, 12:33
ho scritto sta cosa, ma mi si bloccano tutti gli ide quando lo eseguo
uscita = "exit"
while 0 == 0:
if uscita == "exit" :
pass
else:
somma = input ("inserisci il primo numero")
somma2 = input ("inserisci il secondo numero")
risultato = somma + somma2
print risultato
al posto di pass ho provato a mettere return ma mi dà un errore quando provo a d eseguirlo
marko.fatto
16-06-2008, 12:41
'uscita' dovresti anche leggerlo...
DanieleC88
16-06-2008, 12:42
Esatto, in quel modo hai definito un ciclo infinito! :D
Io ti suggerivo, siccome ti stava arrivando un valore in input dalla tastiera, di uscire appena uno dei due input era uguale ad EOF... ;)
by_to_by
16-06-2008, 13:47
Esatto, in quel modo hai definito un ciclo infinito! :D
Io ti suggerivo, siccome ti stava arrivando un valore in input dalla tastiera, di uscire appena uno dei due input era uguale ad EOF... ;)
scusa, ma cosa è EOF? me lo ha dato poco fa la shell, ma è un errore di tipo errato? ad esempio se inserisco stringhe invece che numeri?
comunque, ho scritto questo, funziona, però mi chiede pure i due numeri e poi esce dopo che scrivo "Esci". Io vorrei invece che terminasse subito senza chiedere i due numeri:
Uscita = "Ok"
while Uscita != "Esci":
Uscita = raw_input ('Digita "Esci" per uscire oppure premi invio per cont.')
Primo = input ("Inserisci il primo numero: ")
Secondo = input ("Inserisci il secondo numero: ")
print "La somma dei due numeri è: ", Primo + Secondo
print "Ciao e alla prossima!"
e poi di questo che mi dici?
marko.fatto
16-06-2008, 13:50
leggi 'Uscita' alla fine del ciclo e non all'inizio..
EOF (http://en.wikipedia.org/wiki/End-of-file)
DanieleC88
16-06-2008, 13:56
Esatto: tu stai facendo questo:
controlli Uscita leggi Uscita ricevi e sommi i due numeri ripeti il ciclo
Come vedi, controlli Uscita prima di leggerlo, la prossima volta che lo controllerai sarà alla prossima esecuzione del ciclo.
Ti conviene fare un ciclo infinito, leggere l'input come prima cosa, confrontarlo e, nel caso, uscire.
L'EOF è solo un valore che ti dice che un certo file è finito. Nel tuo caso sta ad indicare che nell'input da tastiera è stato dato il segnale di "fine dell'input", che puoi sfruttare proprio per un'occasione come questa.
by_to_by
16-06-2008, 13:56
leggi 'Uscita' alla fine del ciclo e non all'inizio..
EOF (http://en.wikipedia.org/wiki/End-of-file)
non capisco cosa c'è scritto riguardo l'eof.puoi spiegare? e comunque dove è alla fine? la leggo all'inizio uscita non alla fine del ciclo
by_to_by
16-06-2008, 13:59
Esatto: tu stai facendo questo:
controlli Uscita leggi Uscita ricevi e sommi i due numeri ripeti il ciclo
Come vedi, controlli Uscita prima di leggerlo, la prossima volta che lo controllerai sarà alla prossima esecuzione del ciclo.
Ti conviene fare un ciclo infinito, leggere l'input come prima cosa, confrontarlo e, nel caso, uscire.
L'EOF è solo un valore che ti dice che un certo file è finito. Nel tuo caso sta ad indicare che nell'input da tastiera è stato dato il segnale di "fine dell'input", che puoi sfruttare proprio per un'occasione come questa.
e come esco da un ciclo infinito? come uso questo eof? e poi mi spieghi perfavore il while = true che avresti fatto tu cosa significa? mi quoto:
per il resto io posso mettere true, ma perchè quello che scrivo è vero? non potrei mettere false?
DanieleC88
16-06-2008, 14:11
e come esco da un ciclo infinito?
Ci sono istruzioni apposite che permettano di "spezzare" questa catena infinita, suppongo che ci sia un'istruzione chiamata break o qualcosa di simile. ;)
come uso questo eof?
Dipende, non so com'è definito in Python, ma supponendo che tu abbia appena ricevuto un certo input, quasi di sicuro potrai fare:
if (in == EOF): return
e poi mi spieghi perfavore il while = true che avresti fatto tu cosa significa?
Non è "while = true", è "while True" (che poi sarebbe una forma di invariante, come te la accennava VICIUS).
Praticamente, con while <condizione>, stai dicendo che il tuo ciclo deve continuare ad andare avanti finché la condizione è soddisfatta. Se, come condizione, tu usassi True, andrebbe avanti all'infinito, perché True è evidentemente vera, e quindi già "soddisfatta".
Se tu hai un ciclo infinito, e puoi usare un break, allora chi ti vieta di fare questo?
while True:
in = input()
if (in == EOF): break
by_to_by
16-06-2008, 21:43
Ci sono istruzioni apposite che permettano di "spezzare" questa catena infinita, suppongo che ci sia un'istruzione chiamata break o qualcosa di simile.
if (in == EOF): return
while True:
in = input()
if (in == EOF): break
mai incontrato nulla del genere
(che poi sarebbe una forma di invariante, come te la accennava VICIUS)
invariante?
tu usassi True, andrebbe avanti all'infinito, perché True è evidentemente vera, e quindi già "soddisfatta".
e se usassi false?
DanieleC88
16-06-2008, 21:51
mai incontrato nulla del genere
Non conosco Python, ma sono certo che istruzioni per spezzare i cicli esistano. Magari si chiamano solo diversamente (ad esempio tu prima hai usato pass: in C sarebbe continue, ma sono identiche)... ;)
invariante?
Lascia stare, è una definizione che per adesso non ti serve conoscere... è solo la condizione che è sempre vera finché si è dentro alla funzione (quando diventa falsa, si esce, diciamo così).
e se usassi false?
Non eseguirebbe per niente il ciclo, perché la condizione da verificare non sarebbe mai True. ;)
by_to_by
16-06-2008, 21:54
Esatto: tu stai facendo questo:
controlli Uscita leggi Uscita ricevi e sommi i due numeri ripeti il ciclo
Come vedi, controlli Uscita prima di leggerlo, la prossima volta che lo controllerai sarà alla prossima esecuzione del ciclo.
Ti conviene fare un ciclo infinito, leggere l'input come prima cosa, confrontarlo e, nel caso, uscire.
L'EOF è solo un valore che ti dice che un certo file è finito. Nel tuo caso sta ad indicare che nell'input da tastiera è stato dato il segnale di "fine dell'input", che puoi sfruttare proprio per un'occasione come questa.
e comunque dove è che controllo uscita??
by_to_by
16-06-2008, 21:56
on conosco Python, ma sono certo che istruzioni per spezzare i cicli esistano. Magari si chiamano solo diversamente (ad esempio tu prima hai usato pass: in C sarebbe continue, ma sono identiche)...
non ci sono ancora arrivato allora e comunque pass è la prima volta che lo usavo ma non ha funzionato
Lascia stare, è una definizione che per adesso non ti serve conoscere... è solo la condizione che è sempre vera finché si è dentro alla funzione (quando diventa falsa, si esce, diciamo così).
se lo dici tu
Non eseguirebbe per niente il ciclo, perché la condizione da verificare non sarebbe mai True.
non capisco, sono stupido e vi siete rotti lo so
~FullSyst3m~
16-06-2008, 22:01
ho scritto sta cosa, ma mi si bloccano tutti gli ide quando lo eseguo
uscita = "exit"
while 0 == 0:
if uscita == "exit" :
pass
else:
somma = input ("inserisci il primo numero")
somma2 = input ("inserisci il secondo numero")
risultato = somma + somma2
print risultato
al posto di pass ho provato a mettere return ma mi dà un errore quando provo a d eseguirlo
Guarda questo codice e cerca di capire dove hai commesso l'errore nel tuo:
prova = 3
while prova > 0:
uscita = raw_input ("Scrivi 'exit' per uscire o premi invio per continuare: ")
if uscita == "exit" :
prova = 0
else:
somma = input ("Inserisci il primo numero: ")
somma2 = input ("Inserisci il secondo numero: ")
risultato = somma + somma2
print risultato
print "Arrivederci!!"
DanieleC88
16-06-2008, 22:01
e comunque dove è che controllo uscita??
Quando fai questo:
while Uscita != "Esci":
La condizione di un ciclo while è la prima cosa che viene valutata, e viene valutata per prima ad ogni esecuzione del blocco. :)
non ci sono ancora arrivato allora e comunque pass è la prima volta che lo usavo ma non ha funzionato
Be' non ti saprei dire quali sono, ma di sicuro ci sono. :)
se lo dici tu
Fidati... sapere che si chiama "invariante" o chiamarla in altro modo non ti aiuta né ti affossa.
non capisco, sono stupido e vi siete rotti lo so
Il fatto che ti stia ancora rispondendo mi sembra sia contrario a questa tua interpretazione. :D
cdimauro
17-06-2008, 22:29
Dipende, non so com'è definito in Python, ma supponendo che tu abbia appena ricevuto un certo input, quasi di sicuro potrai fare:
if (in == EOF): return
In Python semplicemente non viene restituito nulla se... non c'è più nulla da leggere. :p
Comunque raw_input restituisce una stringa, quindi male che vada restituisce una stringa vuota.
Non conosco Python, ma sono certo che istruzioni per spezzare i cicli esistano. Magari si chiamano solo diversamente (ad esempio tu prima hai usato pass: in C sarebbe continue, ma sono identiche)... ;)
Si chiamano allo stesso modo: break, continue e return. :)
pass ha un significato diverso: è un'istruzione "nulla". Necessaria quando un blocco non deve eseguire nulla.
Comunque per il programmino in oggetto io avrei risolto così:
while True: #N.B. 0 == 0 è ORRIBILE!!!
somma = raw_input ("inserisci il primo numero")
somma2 = raw_input ("inserisci il secondo numero")
if somma and somma2:
risultato = somma + somma2
print risultato
else:
break
:cool:
DanieleC88
17-06-2008, 22:34
In Python semplicemente non viene restituito nulla se... non c'è più nulla da leggere. :p
Ancora meglio! :)
by_to_by
18-06-2008, 08:33
In Python semplicemente non viene restituito nulla se... non c'è più nulla da leggere.
Comunque raw_input restituisce una stringa, quindi male che vada restituisce una stringa vuota.
Quote:
cioè? basta non scrivere niente e dare invio ad esempio?
while True: #N.B. 0 == 0 è ORRIBILE!!!
somma = raw_input ("inserisci il primo numero")
somma2 = raw_input ("inserisci il secondo numero")
if somma and somma2:
risultato = somma + somma2
print risultato
else:
break
perchè 0 == 0 è orribile? e se volessi mettere una parola per uscire dal ciclo tipo come ha fatto fullsyst3m nel suo codice?
cdimauro
18-06-2008, 13:15
cioè? basta non scrivere niente e dare invio ad esempio?
Sì, prova. :)
perchè 0 == 0 è orribile?
Perché è la stessa cosa che scrivere True. Tanto vale scrivere True e non complicarsi la vita. ;)
e se volessi mettere una parola per uscire dal ciclo tipo come ha fatto fullsyst3m nel suo codice?
Te lo lascio come esercizio, dandoti un'indicazione: è sufficiente fare una banale modifica all'if del codice che ho scritto prima. ;)
by_to_by
18-06-2008, 14:10
Sì, prova. :)
Perché è la stessa cosa che scrivere True. Tanto vale scrivere True e non complicarsi la vita. ;)
Te lo lascio come esercizio, dandoti un'indicazione: è sufficiente fare una banale modifica all'if del codice che ho scritto prima. ;)
dovrei aggiungere un altra if, modificando solo quello che hai scritto tu come si fa?
cdimauro
18-06-2008, 21:44
Ecco qui:
if 'uscita' not in (somma + somma2):
by_to_by
18-06-2008, 21:47
Ecco qui:
if 'uscita' not in (somma + somma2):
non sapevo nemmeno che si poteva fare. nella guida che mi hai detto ho visto il not ecc ma non è stato spiegato ampiamente e non c'era nessun esempio
cdimauro
18-06-2008, 21:59
Può darsi che sia scritto più avanti.
Sopra t'ho scritto semplicemente come l'avrei fatto io. :)
by_to_by
18-06-2008, 23:07
Può darsi che sia scritto più avanti.
Sopra t'ho scritto semplicemente come l'avrei fatto io. :)
mi sento un ignorante qua in mezzo (forse perchè lo sono). uff:muro: :muro: :muro:
P.S:oggi ho visto un programma, che si chiama mini lite, per gestire gli archivi dei clienti e dei magazzini e avviandolo si visualizzava una finestra in stile dos con le finestre in una specie di schermata dos solo colorate, senza grafica. una "interfaccia grafica" del genere come si fa?
DanieleC88
18-06-2008, 23:11
http://en.wikipedia.org/wiki/Text_user_interface#TUI_under_MS-DOS_and_Microsoft_Windows
http://en.wikipedia.org/wiki/Command-line_interface
by_to_by
19-06-2008, 08:30
http://en.wikipedia.org/wiki/Text_user_interface#TUI_under_MS-DOS_and_Microsoft_Windows
http://en.wikipedia.org/wiki/Command-line_interface
non lo so cosi bene l'inglese
DanieleC88
19-06-2008, 09:30
Si tratta semplicemente di interfaccia testuale, in alcuni casi ci sono anche librerie pronte per lo scopo (su sistemi Unix, vedi ncurses).
by_to_by
19-06-2008, 10:14
Si tratta semplicemente di interfaccia testuale, in alcuni casi ci sono anche librerie pronte per lo scopo (su sistemi Unix, vedi ncurses).
sai tantissime cose. ma programmi pure su linux?
DanieleC88
19-06-2008, 10:17
Ho iniziato su Windows, ma poi mi sono spostato prevalentemente su Linux. Ora purtroppo sono bloccato su Windows perché su Linux ho inavvertitamente riempito la partizione (d'oh, mi sono rimasti 40kb liberi! :D), e quindi ne sto approfittando per rinfrescarmi la memoria su quelle cose che avevo imparato all'epoca. Poi sto provando Visual Studio e devo dire che non mi dispiace affatto... :eek:
by_to_by
19-06-2008, 10:21
Ho iniziato su Windows, ma poi mi sono spostato prevalentemente su Linux. Ora purtroppo sono bloccato su Windows perché su Linux ho inavvertitamente riempito la partizione (d'oh, mi sono rimasti 40kb liberi! :D), e quindi ne sto approfittando per rinfrescarmi la memoria su quelle cose che avevo imparato all'epoca. Poi sto provando Visual Studio e devo dire che non mi dispiace affatto... :eek:
come mai ha ideciso di spostarti su linux? e anche con la partizione piena non lo puoi usare? comunque pensavo non programmassi più in vb. dicono tutti che non è buono per preparare la mentalità per poter programmare, e scusa se chiedo, ma su cosa stai rinfrescando la memoria?
DanieleC88
19-06-2008, 10:31
come mai ha ideciso di spostarti su linux?
Perché:
volevo provarlo aveva già gli strumenti che mi servivano per sviluppare un piccolo kernel (che poi si è concluso in un macello immondo e fallimentare :stordita: ) Windows XP non mi leggeva più nessuna partizione, esclusa la propria :D
e anche con la partizione piena non lo puoi usare?
Le applicazioni non hanno nemmeno più lo spazio di creare un file temporaneo, vedi tu! :D
Comunque mi basterebbe cancellare un po' di cose, ma per adesso non mi interessa, sono impegnato con gli esami universitari, che per ora hanno la priorità massima, su Windows ho già quello che mi serve: quando potrò tornerò su Linux. :D
comunque pensavo non programmassi più in vb.
Dove ho detto che lo faccio? :p
ma su cosa stai rinfrescando la memoria?
Ecco, questa è la domanda giusta. Be', mi sono abituato a lavorare su Linux: dopo anni, delle API di Windows non ricordo più granché. :)
by_to_by
19-06-2008, 11:48
Perché:
volevo provarlo aveva già gli strumenti che mi servivano per sviluppare un piccolo kernel (che poi si è concluso in un macello immondo e fallimentare :stordita: ) Windows XP non mi leggeva più nessuna partizione, esclusa la propria :D
Le applicazioni non hanno nemmeno più lo spazio di creare un file temporaneo, vedi tu! :D
Comunque mi basterebbe cancellare un po' di cose, ma per adesso non mi interessa, sono impegnato con gli esami universitari, che per ora hanno la priorità massima, su Windows ho già quello che mi serve: quando potrò tornerò su Linux. :D
Dove ho detto che lo faccio? :p
Ecco, questa è la domanda giusta. Be', mi sono abituato a lavorare su Linux: dopo anni, delle API di Windows non ricordo più granché. :)
mamma mia sai un sacco di cose, sai programmare dovunque e per giunta pure un kernel (e sono curioso di sapere di quali strumenti parli) avevi iniziato a fare. e scommetto che se riprovi con le conoscenze che apprendi ogni giorno riuscirai nell'impresa e magari potrai anche sviluppare il kernel di linux.hai solo 20 anni e sai un mare di cose capisci, sarai un grande programmatore e farai grandi cose.
cmq ho pensato che programmavi in vb perchè dici che stai usando visual studio
DanieleC88
19-06-2008, 12:17
e per giunta pure un kernel (e sono curioso di sapere di quali strumenti parli) avevi iniziato a fare.
Andiamoci piano, per farti capire a che livello fosse ti dico solo come l'avevo chiamato:
...CAOS. :D
Gli strumenti? Be', VIM, GCC, Bochs, dd e un modo veloce di montare loop devices dalla linea di comando.
cmq ho pensato che programmavi in vb perchè dici che stai usando visual studio
No no, Visual Studio non è Visual Basic. :D
DanieleC88
19-06-2008, 12:17
(doppione)
^TiGeRShArK^
19-06-2008, 13:27
No no, Visual Studio non è Visual Basic. :D
Per l'amor di dio :asd:
Io pure sto usando principalmente Visual Studio, ma non certo con il Visual Basic :asd:
Il C# mi piace MOLTO di +, oltre ad essere il linguaggio first class della MS del momento :p
by_to_by
19-06-2008, 20:22
Andiamoci piano, per farti capire a che livello fosse ti dico solo come l'avevo chiamato:
...CAOS. :D
Gli strumenti? Be', VIM, GCC, Bochs, dd e un modo veloce di montare loop devices dalla linea di comando.
No no, Visual Studio non è Visual Basic. :D
come mai tutti questi strumenti? e un modo veloce per montare loop in che senso? una programma che fa tutto in automatico?
DanieleC88
19-06-2008, 20:25
come mai tutti questi strumenti?
Perché servono! :D
e un modo veloce per montare loop in che senso?
Loop devices, immagini di dischi montate come se fossero periferiche fisiche.
by_to_by
19-06-2008, 21:19
Perché servono! :D
Loop devices, immagini di dischi montate come se fossero periferiche fisiche.
ogni strumento serve per cosa? con quelli che hai elencato ad esempio a cosa ti servono? e il loop device come lo implementi?
DanieleC88
19-06-2008, 21:30
Vediamo, con GCC potevo compilare seguendo dei tutorial che avevo trovato in rete, con dd potevo scrivere il bootloader nelle immagini su disco senza troncare i file, Bochs mi serviva per emulare un PC ed evitarmi ogni volta il riavvio; VIM non mi serviva, a dire il vero, è un editor di testo come gli altri, ma mi ci trovavo comodo. :p
Non dovevo implementarli, è quello il punto, su Linux mi bastava dare un comando per avere l'immagine montata. Faccio lo stesso quando mi serve di montare un CD (senza bisogno di Daemon Tools e compagnia bella). ;)
~FullSyst3m~
19-06-2008, 21:43
Vediamo, con GCC potevo compilare seguendo dei tutorial che avevo trovato in rete, con dd potevo scrivere il bootloader nelle immagini su disco senza troncare i file, Bochs mi serviva per emulare un PC ed evitarmi ogni volta il riavvio; VIM non mi serviva, a dire il vero, è un editor di testo come gli altri, ma mi ci trovavo comodo. :p
Non dovevo implementarli, è quello il punto, su Linux mi bastava dare un comando per avere l'immagine montata. Faccio lo stesso quando mi serve di montare un CD (senza bisogno di Daemon Tools e compagnia bella). ;)
Eh si, il buon vecchio mount!
DanieleC88
19-06-2008, 21:45
Sìsì, per la precisione un bel:
mount -o ro,loop file.img /mnt/destinazione
:D
~FullSyst3m~
19-06-2008, 21:58
Sìsì, per la precisione un bel:
mount -o ro,loop file.img /mnt/destinazione
:D
Io ho evitato di scriverlo tutto per non andare troppo OT (già siamo parecchio fuori binario :asd:) e arrivi tu e fai lo spaccone.. ;)
DanieleC88
19-06-2008, 22:01
Lui è così avido di sapere, ed io ho solo precisato. :O
:p
~FullSyst3m~
19-06-2008, 23:49
Lui è così avido di sapere, ed io ho solo precisato. :O
:p
Non ti arrampicare sugli specchi...spaccone :mc:
:asd:
by_to_by
21-06-2008, 00:29
allora, sono qua http://www.python.it/doc/Howtothink/Howtothink-html-it/chap06.htm paragrafo 6.3
Esercizio: modifica questo programma per fare in modo che esso produca le potenze di due fino a 65536 (cioè 216). Poi stampale e imparale a memoria!
l'ho svolto cosi
x = 1.0
import math
while x < 65536.0:
print x, '\t', math.log(x)/math.log (2.0)
x = x * 2.0
giusto? l'unica cosa è che gli ultimi due valori mi vengono fuori colonna:
1.0 0.0
2.0 1.0
4.0 2.0
8.0 3.0
16.0 4.0
32.0 5.0
64.0 6.0
128.0 7.0
256.0 8.0
512.0 9.0
1024.0 10.0
2048.0 11.0
4096.0 12.0
8192.0 13.0
16384.0 14.0
32768.0 15.0
Esercizio: scrivi una stringa singola che quando stampata
produca
questo
risultato.
l'ho svolto cosi:
print "produca"
print '\t' "questo"
print '\t' '\t' "risultato"
giusto?
l'unica cosa che non ho capito (ho provato a mettere " '\' ", ma mi stampa le virgolette vuote) è questa:
Secondo te, com'è possibile rappresentare un carattere di backslash in una stringa?
DanieleC88
21-06-2008, 00:39
Dovresti ripetere il ciclo fino a x <= 65536 per stampare anche l'ultimo. Per scendere ad una nuova linea, devi usare il carattere di escape \ seguito da n (che indica appunto newline), quindi il \t non va bene, perché è una tabulazione.
Per l'ultima domanda invece ti ripeto solo che il backslash (\) è il carattere di escape... Indovina la risposta allora! :D
^TiGeRShArK^
21-06-2008, 03:55
Perché servono! :D
no, VIM è superfluo...
e anche se ti serve fisicamente vuol dire che hai tendenze masochistiche :O
:asd:
Loop devices, immagini di dischi montate come se fossero periferiche fisiche.
mmm...
*montate*... :oink:
non fare il maialone... :oink:
:asd:
by_to_by
21-06-2008, 08:53
Dovresti ripetere il ciclo fino a x <= 65536 per stampare anche l'ultimo. Per scendere ad una nuova linea, devi usare il carattere di escape \ seguito da n (che indica appunto newline), quindi il \t non va bene, perché è una tabulazione.
Per l'ultima domanda invece ti ripeto solo che il backslash (\) è il carattere di escape... Indovina la risposta allora! :D
si lo so, ma mettendo l'uguale il risultato è sempre quello. il 16.0 non me lo stampa
che significa scendere ad una nuova linea? io devo metterli in colonna, come una tabella, ma gli ultimi due lo hai visto come mi sono venuti
allora il \ non si può stampare?
AGGIORNAMENTO: mentre sono andato un pò avanti e sono alle tabelle bidimensionali e all'icapsulamento. vorrei chiedere solo due cose:
nell'esempio delle tabelle bidimensionali ci sono due ' ' che lasciano tre spazi, nell'incapsulamento invece hanno messo '\t', ma il risultato è sempre quello. sono sulla stessa linea con 3 spazi. come mai?
e poi, ho modificato questo codice:
def StampaMultipli (n):
i = 1
while i <= 6:
print n*i, '\t',
i = i + 1
i = 1
while i <= 10:
StampaMultipli (i)
i = i + 1
ma, mettendo al primo while 6 e al secondo 10 mi stampa questo:
1 2 3 4 5 6 2 4 6 8 10 12 3 6 9 12 15 18 4 8 12 16 20 24 5 10 15 20 25 30 6 12 18 24 30 36 7 14 21 28 35 42 8 16 24 32 40 48 9 18 27 36 45 54 10 20 30 40 50 60
mettendo al primo while 10 e al secondo 6 mi stampa normalmente le tabelline fino al 6, mettendo 10 e 10 mi stampa le tabelline fino al 10 e togliendo al secondo while la i = i + 1 mi stampa all'inifinito questo:
1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6 1 2 3 4 5 6
potreste spiegarmi perchè? non posso andare avanti se non capisco questo.. azzo:muro:
by_to_by
21-06-2008, 10:09
Le colonne non si inseriscono bene, provate a scrivere il codice cmq e vedete cosa vi restituisce
cdimauro
21-06-2008, 10:21
no, VIM è superfluo...
e anche se ti serve fisicamente vuol dire che hai tendenze masochistiche :O
:asd:
Concordo. Infatti su tutte le macchine di piattaforma ho fatto installare joe, che è decisamente più umano come editor. :D
si lo so, ma mettendo l'uguale il risultato è sempre quello. il 16.0 non me lo stampa
>>> x = 1.0
>>> while x <= 65536.0:
... print x, '\t', math.log(x)/math.log (2.0)
... x = x * 2.0
...
1.0 0.0
2.0 1.0
4.0 2.0
8.0 3.0
16.0 4.0
32.0 5.0
64.0 6.0
128.0 7.0
256.0 8.0
512.0 9.0
1024.0 10.0
2048.0 11.0
4096.0 12.0
8192.0 13.0
16384.0 14.0
32768.0 15.0
65536.0 16.0
:cool:
che significa scendere ad una nuova linea? io devo metterli in colonna, come una tabella, ma gli ultimi due lo hai visto come mi sono venuti
allora il \ non si può stampare?
Se vuoi stampare il \ devi replicarlo due volte: \\
AGGIORNAMENTO: mentre sono andato un pò avanti e sono alle tabelle bidimensionali e all'icapsulamento. vorrei chiedere solo due cose:
nell'esempio delle tabelle bidimensionali ci sono due ' ' che lasciano tre spazi, nell'incapsulamento invece hanno messo '\t', ma il risultato è sempre quello. sono sulla stessa linea con 3 spazi. come mai?
Non ho capito: potresti essere più chiaro?
e poi, ho modificato questo codice:
def StampaMultipli (n):
i = 1
while i <= 6:
print n*i, '\t',
i = i + 1
i = 1
while i <= 10:
StampaMultipli (i)
i = i + 1
ma, mettendo al primo while 6 e al secondo 10 mi stampa questo:
mettendo al primo while 10 e al secondo 6 mi stampa normalmente le tabelline fino al 6, mettendo 10 e 10 mi stampa le tabelline fino al 10 e togliendo al secondo while la i = i + 1 mi stampa all'inifinito questo:
potreste spiegarmi perchè? non posso andare avanti se non capisco questo.. azzo:muro:
Nel primo while metti <= 10 e nel secondo <= 6.
by_to_by
21-06-2008, 10:37
perchè 65536? era 65535
Se vuoi stampare il \ devi replicarlo due volte: \\
ok, grazie
Non ho capito: potresti essere più chiaro?
i = 1
while i <= 6:
print 2*i, ' ',
i = i + 1
print
def StampaMultipli(n):
i = 1
while i <= 6:
print n*i, '\t',
i = i + 1
print
perchè questi due caratteri di escape? inoltre se al '\t' affianco '\n' mi stampa tutto uno sotto l'altro
Nel primo while metti <= 10 e nel secondo <= 6.
già fatto, mi dà le tabelline fino al sei. io volevo sapere perchè mettendo 6 al primo e 10 al secondo e poi perchè togliendo i = i + 1 dal secondo while mi dà quei due risultati
DanieleC88
21-06-2008, 10:38
no, VIM è superfluo...
E l'ho specificato, se vedi... :p
e anche se ti serve fisicamente vuol dire che hai tendenze masochistiche :O
:asd:
Un po' sì, in effetti! :D
mmm...
*montate*... :oink:
non fare il maialone... :oink:
:asd:
:doh:
DanieleC88
21-06-2008, 10:45
perchè 65536? era 65535
Perché 2^16 è 65536, quindi se tu arrivi a quel numero e controlli che sia minore o uguale a 65535 (2^16 - 1), il confronto fallisce. ;)
perchè questi due caratteri di escape? inoltre se al '\t' affianco '\n' mi stampa tutto uno sotto l'altro
Gli spazi non sono caratteri di escape, e \t è una sequenza di escape: \t inserisce un carattere di tabulazione, \n va a capo sulla prossima riga (ecco perché stampa uno sotto l'altro).
~FullSyst3m~
21-06-2008, 10:48
Perché 2^16 è 65536, quindi se tu arrivi a quel numero e controlli che sia minore o uguale a 65535 (2^16 - 1), il confronto fallisce. ;)
Gli spazi non sono caratteri di escape, e \t è una sequenza di escape: \t inserisce un carattere di tabulazione, \n va a capo sulla prossima riga (ecco perché stampa uno sotto l'altro).
Il carattere di escape è il backslash (\) e ti stampa tutto uno sotto l'altro perchè '\n' "annulla" la tabulazione di '\t'
;)
DanieleC88
21-06-2008, 10:52
'\n' "annulla" la tabulazione di '\t'
;)
Non proprio, la tabulazione la fa, solo che poi ritorna ad inizio linea e scende verticalmente sulla prossima. È una cosa simile ad una macchina da scrivere. Infatti, su Windows il ritorno a capo è indicato da due caratteri ASCII, il carattere 10, carriage return (CR), che riporta il cursore alla colonna 0, e il carattere 13, line feed (LF), che scende sulla riga successiva. ;)
cdimauro
21-06-2008, 10:56
già fatto, mi dà le tabelline fino al sei.
Mettili a 10 entrambi e hai le tabelline al completo. :)
io volevo sapere perchè mettendo 6 al primo e 10 al secondo
Perché il primo deve calcolare la tabellina per un determinato numero, e devi fare 10 cicli e non 6, altrimenti ti calcola soltanto i primi 6 elementi della tabellina.
e poi perchè togliendo i = i + 1 dal secondo while mi dà quei due risultati
i = i + 1 ti serve per "andare avanti al numero successivo". Se lo togli il programma ti gira all'infinito, perché non ti esce più dal ciclo.
~FullSyst3m~
21-06-2008, 10:59
Non proprio, la tabulazione la fa, solo che poi ritorna ad inizio linea e scende verticalmente sulla prossima. È una cosa simile ad una macchina da scrivere. Infatti, su Windows il ritorno a capo è indicato da due caratteri ASCII, il carattere 10, carriage return (CR), che riporta il cursore alla colonna 0, e il carattere 13, line feed (LF), che scende sulla riga successiva. ;)
La tabulazione non si vede, perchè c'è '\n' che porta tutto in verticale, per questo ho scritto "annulla" tra virgolette, non ho mica detto che \n uccide \t eh! ;)
DanieleC88
21-06-2008, 11:01
Vabbe', che non si veda siamo d'accordo, ma da come avevi scritto si capiva altro, perciò preciso. ;)
by_to_by
21-06-2008, 11:04
Mettili a 10 entrambi e hai le tabelline al completo. :)
Perché il primo deve calcolare la tabellina per un determinato numero, e devi fare 10 cicli e non 6, altrimenti ti calcola soltanto i primi 6 elementi della tabellina.
i = i + 1 ti serve per "andare avanti al numero successivo". Se lo togli il programma ti gira all'infinito, perché non ti esce più dal ciclo.
avevo già messo entrambi a 10, quello che volevo sapere erano quei due risultatui che non capivo modificando i while in quel modo
Perché il primo deve calcolare la tabellina per un determinato numero, e devi fare 10 cicli e non 6, altrimenti ti calcola soltanto i primi 6 elementi della tabellina.
non ho capito, il risultato che mi dà questa combinazione è strano e non lo capisco
i = i + 1 ti serve per "andare avanti al numero successivo". Se lo togli il programma ti gira all'infinito, perché non ti esce più dal ciclo.
ma non c'è già la funzione che va avanti? cioè io non capisco la funzione ha i = 1 e i = i + 1 e il cilco che chiama la funzione pure. cosi però ci ritorviamo con due i = xxx e i = i + 1. quale esegue python? quelle dell funzione o quelle che stamapno la tabella della moltiplicazione?
~FullSyst3m~
21-06-2008, 11:08
Vabbe', che non si veda siamo d'accordo, ma da come avevi scritto si capiva altro, perciò preciso. ;)
Ho messo le virgolette apposta per non fare capire altro ;)
DanieleC88
21-06-2008, 11:10
Ho messo le virgolette apposta per non fare capire altro ;)
Sono BallBreaker non a caso... :D
cdimauro
21-06-2008, 11:21
avevo già messo entrambi a 10, quello che volevo sapere erano quei due risultatui che non capivo modificando i while in quel modo
non ho capito, il risultato che mi dà questa combinazione è strano e non lo capisco
Allora, il primo ciclo si occupa di calcolare la tabellina per un certo numero. Quindi è ovvio che debba arrivare fino a 10, altrimenti non completi la tabellina, e infatti ottieni 1 2 3 4 5 6 2 4 6 8 10 12.... Insomma sono delle tabelline "tronche". Non complete.
Se questo lo lasci a 10, l'altro ciclo si occupa di tirare fuori i numero di cui calcolare la rispettiva tabellina. Qui se lo metti a 6 ti calcola le prime 10 tabelline, e poi si ferma. Quindi è corretto, ma soltanto per i primi 6 numeri.
Conseguenza di tutto ciò, è che se vuoi le tabelline di tutti e 10 i numeri devi mettere 10 a entrambi. Se vuoi le tabelline dei numeri fino a 20, devi mettere 20 nel secondo, ecc.
ma non c'è già la funzione che va avanti?
No, si deve "costruire" col while e le istruzioni che manipolano i.
cioè io non capisco la funzione ha i = 1
Questa serve a definire il numero di partenza.
e i = i + 1
Questa serve a passare al numero successivo, una volta che si è completato il lavoro con quello attuale.
e il cilco che chiama la funzione pure.
Perché i cicli funzionano "bene o male tutti così". :D
cosi però ci ritorviamo con due i = xxx e i = i + 1. quale esegue python?
Tutti e due. Ma il codice lo devi leggere in seguenza.
All'inizio esegue i = 1, per cui parte con 1.
Poi entra nel while e controlla: "possiamo lavorare con questo numero o abbiamo già finito?"
Poiché non ha finito, entra nel while, ed esegue il lavoro.
Poi esegue i = i + 1 e, quindi, passa al numero successivo.
Infine, torna al while e Python si pone la domanda fatale.
Il tutto finché non ha finito.
quelle dell funzione o quelle che stamapno la tabella della moltiplicazione?
La funzione ha una SUA variabile i che è definita "locale" e che non ha nulla a che vedere con l'altra i, che è "globale".
Ecco il perché della tua confusione. Considera che ogni volta che dichiari variabili dentro una funzione, anche se esistono delle variabili globali che hanno lo stesso nome, queste ultime rimangono "nascoste" e la funziona userà sempre e soltanto quelle sue locali.
by_to_by
21-06-2008, 12:09
Allora, il primo ciclo si occupa di calcolare la tabellina per un certo numero. Quindi è ovvio che debba arrivare fino a 10, altrimenti non completi la tabellina, e infatti ottieni 1 2 3 4 5 6 2 4 6 8 10 12.... Insomma sono delle tabelline "tronche". Non complete.
Se questo lo lasci a 10, l'altro ciclo si occupa di tirare fuori i numero di cui calcolare la rispettiva tabellina. Qui se lo metti a 6 ti calcola le prime 10 tabelline, e poi si ferma. Quindi è corretto, ma soltanto per i primi 6 numeri.
Conseguenza di tutto ciò, è che se vuoi le tabelline di tutti e 10 i numeri devi mettere 10 a entrambi. Se vuoi le tabelline dei numeri fino a 20, devi mettere 20 nel secondo, ecc.
No, si deve "costruire" col while e le istruzioni che manipolano i.
Questa serve a definire il numero di partenza.
Questa serve a passare al numero successivo, una volta che si è completato il lavoro con quello attuale.
Perché i cicli funzionano "bene o male tutti così". :D
Tutti e due. Ma il codice lo devi leggere in seguenza.
All'inizio esegue i = 1, per cui parte con 1.
Poi entra nel while e controlla: "possiamo lavorare con questo numero o abbiamo già finito?"
Poiché non ha finito, entra nel while, ed esegue il lavoro.
Poi esegue i = i + 1 e, quindi, passa al numero successivo.
Infine, torna al while e Python si pone la domanda fatale.
Il tutto finché non ha finito.
La funzione ha una SUA variabile i che è definita "locale" e che non ha nulla a che vedere con l'altra i, che è "globale".
Ecco il perché della tua confusione. Considera che ogni volta che dichiari variabili dentro una funzione, anche se esistono delle variabili globali che hanno lo stesso nome, queste ultime rimangono "nascoste" e la funziona userà sempre e soltanto quelle sue locali.
uff, però se io metto 6 al primo while e 10 al secondo, quando si arriva a 6 dovrebbe uscire dal ciclo della funzione, perchè allora invece il programma continua? io non capisco. e poi se volessi scegliere ogni volta il numero del quale voglio le tabelline? devo mettere un input?
per il resto non c'ho capito niente, perchè ci sono due cicli qua che si chiamano a vicenda, con variabili e incrementi uguali e non capisco chi esegue chi
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.