View Full Version : iniziare con python
Th3 Kn0wl3dg3
26-01-2007, 15:17
dopo tanto pensare ho deciso di iniziare con python dato ke non ho mai scritto una riga di codice. chi mi consiglia un'ottima guida ma che comincia proprio dalle basi e mi faccia capire come si programma?grazie
se mi cosigliate un altro linguaggio che credete sia migliore per uno ke non ha mai programmato non esitate a scriverlo, l'importante che ci sia un link ad un'ottima guida ke parata dalla basi e ke mi faccia capire il linguaggio e come si programma
qui parti dalle basi della programmazione
http://www.ibiblio.org/obp/thinkCSpy/
Th3 Kn0wl3dg3
26-01-2007, 16:01
in italiano non c'è?
eccoti accontentato
http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm
Th3 Kn0wl3dg3
26-01-2007, 16:23
grazie
Th3 Kn0wl3dg3
08-02-2007, 14:55
ho cominciato a leggere la guida in italiano ke mi ha linkato wisher e devo dire che per una persona come me ke deve partire da zero è molto chiara.ma vorrei sapere due cose:
1)dove trovo python?praticamente la shell dove scrivere il codice sorgente
2)come supero il problema della divisione dei numeri interi?praticamente nella guida c'è messo che se divido 59 con 60 non mi da 0,98ecc ma 0 perchè python restituisce un numero intero quando ci sono questo tipo di divisioni.grazie per l'aiuto anticipatamente
scaricalo da qui
http://www.python.org/download/
per le divisioni basta che tu utilizzi una variabile di tipo float
per esempio
risultato = (float)59/60
ti da il risultato desiderato
Th3 Kn0wl3dg3
08-02-2007, 19:01
la sintassi deve essere proprio come l'hai scritta tu?cioè con float tra parentesi dopo l'uguale?
P.S sai ho letto della variabile float nei primi capitoli, ma ancora ho tanto da leggere!a primo impatto mi sembra buono come linguaggio, ora vediamo cosa succede!
Th3 Kn0wl3dg3
08-02-2007, 23:37
scusami wisher, ma nel link ke mi hai dato ci sono un sacco di cose e non capisco quale devo scaricare.potresti darmi il link preciso?ho windows xp professional.grazie
la sintassi deve essere proprio come l'hai scritta tu?cioè con float tra parentesi dopo l'uguale?
quell'operazione è chiamata casting e serve per specificare il tipo di quello che viene dopo (variabile, funzione o espressione che essa sia)
a te serve questo file
http://www.python.org/ftp/python/2.5/python-2.5.msi
Th3 Kn0wl3dg3
09-02-2007, 08:46
quindi io potevo scrivere tipo nome= (string) Paolo?
cmq grazie del link
quindi io potevo scrivere tipo nome= (string) Paolo?
cmq grazie del link
Python è un linguaggio con tipizzazione debole, quindi al momento in cui tu inizializzi la variabile se non specificato esplicitamente tramite un cast sceglie sa se un tipo.
In genere sceglie il tipo che occupa meno memoria, quindi quando tu fai
variabile = 5
l'interprete vede che 5 è un intero e quindi assegna il tipo int alla variabile, ovviamente se tu vuoi dire esplicitamente che il tuo 5 non è un intero ma altro lo puoi fare con un cast.
In genere in python le stringhe si indicano tra "", quindi nel tuo caso basta mettere
nome = "Paolo"
ti faccio notare che se non metti le "" Paolo sarà interpretato come una variabile, non come una stringa
http://it.wikipedia.org/wiki/Tipo_di_dato
Th3 Kn0wl3dg3
09-02-2007, 15:55
wisher so che la stringa si mette tra virgolette, sono io che ho sbagliato a scrivere nel post precedente.volevo scrivere nome=(int)paolo. se faccio cosi python lo vede come un intero?cmq grazie per le tue risposte esaurienti
wisher so che la stringa si mette tra virgolette, sono io che ho sbagliato a scrivere nel post precedente.volevo scrivere nome=(int)paolo. se faccio cosi python lo vede come un intero?cmq grazie per le tue risposte esaurienti
no, ti restituisce un errore.
Anche perchè io non saprei immaginare che risultato dovrebbe avere questa operazione...
Ti segnalo che prima avevo detto di fare il cast con (TIPO), mentre mi accorgo ora che questo è valido per C, ma non per python che invece vuole
TIPO(valore)
quindi per fare un cast a int della variabil a non devi fare (int)a ma int(a)
Th3 Kn0wl3dg3
09-02-2007, 16:13
quindi l'esempio di float era sbagliato?dovrebbe essre cosi allora
risultato=59/60(float) o no?
p.s. anche se non è il post giusto vorei chiederti se potresti postarmi una guida che comincia dalle basi come questa di python ma sul C++.oppure mi consigli di cominciare con il C e poi il C++?voglio imparare questo linguaggio(dopo il python)per programmare per psp ma è meglio ke trovo adesso una guida dato ke devo farmela stampare da qualcuno perchè la mia stampante è rotta
spero ke potrai aiutarmi anche su questo
quindi l'esempio di float era sbagliato?dovrebbe essre cosi allora
risultato=59/60(float) o no?
no, è:
risultato=float (59/60)
p.s. anche se non è il post giusto vorei chiederti se potresti postarmi una guida che comincia dalle basi come questa di python ma sul C++.oppure mi consigli di cominciare con il C e poi il C++?voglio imparare questo linguaggio(dopo il python)per programmare per psp ma è meglio ke trovo adesso una guida dato ke devo farmela stampare da qualcuno perchè la mia stampante è rotta
spero ke potrai aiutarmi anche su questo
questo è detto anche crossposting ;)
edit: comunque con simili difficoltà nei concetti di tipo, espressione e casting (senza offesa, eh :) ) ti consiglio di evitare di iniziare studiando un linguaggio debolmente tipato, altrimenti rischi di portarti dietro lacune inammissibili..
Ziosilvio
09-02-2007, 20:04
no, è:
risultato=float (59/60)
Ah, è 0.0?
Scherzi a parte: per specificare che una costante rappresenta un numero in virgola mobile e non un intero, basta farla terminare con un punto.
Quindi, invece di float(59)/60 si può scrivere 59./60.
Th3 Kn0wl3dg3
09-02-2007, 21:01
questa del punto non la sapevo.nella guida mi sembra di non averla vista.
cmq loris io volevo scrivere risultato=float (59/60).cmq cosa intendi quando dici che studiando un linguaggio debolmente tipato
rischio di portarmi dietro lacune inammissibili?ke lacune?e poi ci devi mettere che non avevo mai programmato quindi all'inizio non è una cosa automatica capire il funzionamento!io vorrei la guida del C o C++ solo per averla e ogni tanto per leggerla dato che alle volte vedo del codice in C e C++.so che devo studiare prima un linguaggio e non ho intenzione di mettermi confusione in testa!
intendo semplicemente dire che secondo me sbattere un po' la testa ( :muro: ) sui tipi può aiutare molto a capire alcuni dei fondamenti del linguaggio in questione..fondamenti che magari "crescendo" con un linguaggio debolmente tipato possono in futuro risultare un po' più ostici da capire, tutto qui :)
in altri termini: meglio sputare un po' più sangue all'inizio che trovarsi incagliati poi..e questo proprio quando non si ha mai programmato prima..
tutto questo, naturalmente, imho :)
Th3 Kn0wl3dg3
09-02-2007, 21:25
e in questo caso il linguaggio debolmente tipato è python o C/C++?
beh secondo la definizione di tipazione forte (un linguaggio è fortemente tipato se non presentando errori sui tipi non vi saranno errori a runtime) python rientra tra i linguaggi fortemente tipati, ma permettendo la tipazione dinamica secondo me è un po' meno rigoroso di C (il quale è tipato molto più debolmente ma obbliga il programmatore ad essere più accorto nella dichiarazione ed uso dei tipi)
personalmente penso che il "permessivismo" di alcuni linguaggi sia un po' controproducente ai fini didattici..correggetemi se sbaglio..
Th3 Kn0wl3dg3
09-02-2007, 22:04
in definitiva faccio bene a cominciare con il python dato che è fortemente tipato giusto?
in definitiva faccio bene a cominciare con il python dato che è fortemente tipato giusto?
loris_p ti consiglia di segliere un altro linguaggio (ad esempio C) perchè a differenza del python il tipo di una variabile deve essere definito al momento della dichiarazione della variabile stessa e poi non può più essere modificato.
Con python invece il tipo è dinamico, questo vuol dire che un oggetto pò cambiare il suo tipo durante l'esecuzione del programma.
Se non si fanno le cose per bene dal punto di vista didattico questa dinamicità può essere controproducente in quanto porta a un caos tra variabili e tipi di dato che se non controllato puà portare problemi di codice.
Un piccolo esempio:
prendi un intero
a=5
prendi un numero come carattere
c='5'
se non hai in mente bene la tipizzazione dei dati sei portato a pensare che la somma dia 10, quando in realtà con tipi di dati diversi non è possibile e quindi a+c da errore.
uhm..no :D
devo essermi espresso male in precedenza :)
intendevo dire questo: in python puoi, come detto anche da whisher, dichiarare una stringa semplicemente assegnandola, il che rende la programmazione veloce e scorrevole mascherando però problematiche che, a mio avviso, un programmatore dovrebbe conoscere..
in C, ad esempio, una variabile va dichiarata del tipo corretto, ne va eventualmente allocato lo spazio dinamicamente, ecc..tutte cose che magari ti fanno perdere un po' più tempo, ma che ti fanno imparare concetti importanti come quello di tipo, di puntatore, ecc..
quello che quindi io ti consiglierei sarebbe quindi di farti le ossa con C :)
diciamo che è un po' come quando prendi la patente: se inizi a guidare con una macchina senzi troppi comfort ed aiuti alla guida poi le saprai guidare tutte, mentre non è detto il viceversa ;)
loris_p ti consiglia di segliere un altro linguaggio (ad esempio C) perchè a differenza del python il tipo di una variabile deve essere definito al momento della dichiarazione della variabile stessa e poi non può più essere modificato.
Con python invece il tipo è dinamico, questo vuol dire che un oggetto pò cambiare il suo tipo durante l'esecuzione del programma.
Se non si fanno le cose per bene dal punto di vista didattico questa dinamicità può essere controproducente in quanto porta a un caos tra variabili e tipi di dato che se non controllato puà portare problemi di codice.
Un piccolo esempio:
prendi un intero
a=5
prendi un numero come carattere
c='5'
se non hai in mente bene la tipizzazione dei dati sei portato a pensare che la somma dia 10, quando in realtà con tipi di dati diversi non è possibile e quindi a+c da errore.
abbiamo risposto nello stesso istante :)
intendevo proprio dire questo..grazie whisher :D
Ti sta dicendo che in python ti puoi permettere molte più libertà nella scrittura del codice, cosa che non puoi fare in C, appunto per questo è meglio iniziare dal C perché è molto più rigorso, ed essendo rigoroso ci sono molti più dettagli che ti permetteranno di programmare in futuro con altri linguaggi.
pumppkin
09-02-2007, 22:30
potresti cominciare anche con java...è un linguaggio semplice nella sintassi...è fortemente tipizzato ed è diffusissimo (anche se python e C non sono da meno..soprattutto C..)...
Th3 Kn0wl3dg3
09-02-2007, 22:45
wisher io ho capito come funziona in python questo procedimento infatti so che facendo a+c con quei valori assegnati alle variabili darebbe errore.io ho scelto python perchè non avendo mai programmato è più semplice da imparare.ma se voi che avete esperienza consigliate di iniziare con il C lascio stare python e inizio con il C
Th3 Kn0wl3dg3
09-02-2007, 22:56
loris_p ti consiglia di segliere un altro linguaggio (ad esempio C) perchè a differenza del python il tipo di una variabile deve essere definito al momento della dichiarazione della variabile stessa e poi non può più essere modificato.
Con python invece il tipo è dinamico, questo vuol dire che un oggetto pò cambiare il suo tipo durante l'esecuzione del programma.
Se non si fanno le cose per bene dal punto di vista didattico questa dinamicità può essere controproducente in quanto porta a un caos tra variabili e tipi di dato che se non controllato puà portare problemi di codice.
Un piccolo esempio:
prendi un intero
a=5
prendi un numero come carattere
c='5'
se non hai in mente bene la tipizzazione dei dati sei portato a pensare che la somma dia 10, quando in realtà con tipi di dati diversi non è possibile e quindi a+c da errore.
questo ke vuoi dire tu l'ho capito infatti so ke a="5" è una stringa e a=5 è un intero.per quanto riguarda capire i puntatori(come ha detto loris)credo che si possano capire anche in python, basta stare attenti, ma dato che dovevo cominciare a studiare anche il C e il pyhon mi attira molto come linguaggio, li studierò tutte e due(dopo ke ne capisco uno però!)il fatto è ke a primo impatto il python per uno come me ke non ha mai programmato mi sembra il paradiso in confronto al C, ma se capisco i tipi e le altre cose in python penso ke mi abituerò subito alle differenze del nuovo linguaggio!
voi ke dite?sbaglio ragionamento?
wisher io ho capito come funziona in python questo procedimento infatti so che facendo a+c con quei valori assegnati alle variabili darebbe errore.io ho scelto python perchè non avendo mai programmato è più semplice da imparare.ma se voi che avete esperienza consigliate di iniziare con il C lascio stare python e inizio con il C
veramente essendo il C più rigoroso dovrebbe essere più facile comprendere il C del python...
difficile dirlo..ognuno ha i propri tempi e modi di apprendimento..magari dedicandoti ad un linguaggio più "soft" come python riuscirai comunque ad ottenere ottimi risultati..
quella di partire da un linguaggio a prima vista meno "goloso" come può essere C sarebbe un metodo per forzare la propria attenzione a concentrarsi su cose un po' più delicate..
ad ogni modo piuttosto di costringersi ad imparare qualcosa non molto volentieri e magari arrendersi per mancanza di motivazione è comunque meglio dedicarsi a qualcosa di più incentivante :)
veramente essendo il C più rigoroso dovrebbe essere più facile comprendere il C del python...
in effetti io personalmente concordo con te..inoltre ha anche molti meno fronzoli :)
Th3 Kn0wl3dg3
09-02-2007, 23:49
loris se io mi concentrassi su cose più delicate dopo aver studiato python pensi ke potrei avere problemi(sempre tenendo conto di studiare bene i tipi e il resto in python?)e in che senso C è un linguaggio senza fronzoli?
può darsi..dipende da te :)
io posso dirti che personalmente penso avrei fatto parecchia fatica ad iniziare da un linguaggio come python e poi riuscire a studiare ciò che sta alle basi imparando ad esempio C poiché trovo didatticamente più corretto un approccio che si incentri dapprima sulle problematiche dei linguaggi un po' più rigorosi..
per "senza fronzoli" intendo che non possiede particolari artifici sintattici ne costrutti che tutelino il programmatore da certi errori..questo si traduce in enorme potenza per chi sa sfruttare la grande libertà ed il grande controllo lasciato allo sviluppatore oppure in errori che sarebbero evitabili usando altri linguaggi per chi deve imparare..ed è proprio su questi errori ottenibili solo con un linguaggio poco tutelante e molto rigoroso che imho il programmatore novizio dovrebbe andare a sbattere da subito :)
Th3 Kn0wl3dg3
10-02-2007, 00:15
appunto perchè non tutelano il programmatore da certi errori dovrebbe essere peggio.io penso ke ogni linguaggio dovrebbe tutelare il programmatori da certi errori e non capisco come questo si possa tradurre in un enorme potenza per lo sviluppatore.potresti spiegarmi meglio questa cosa?su questi errori che sarebbero evitabili si può andare a sbattere anche dopo aver imparato un altro linguaggio, in questo caso python.se imparo bene i tipi, le assegnazioni e il resto non dovrei avere molti problemi a passare al C poi.
appunto perchè non tutelano il programmatore da certi errori dovrebbe essere peggio.io penso ke ogni linguaggio dovrebbe tutelare il programmatori da certi errori e non capisco come questo si possa tradurre in un enorme potenza per lo sviluppatore.potresti spiegarmi meglio questa cosa?su questi errori che sarebbero evitabili si può andare a sbattere anche dopo aver imparato un altro linguaggio, in questo caso python.se imparo bene i tipi, le assegnazioni e il resto non dovrei avere molti problemi a passare al C poi.
Ascolta, un computer è un computer, funziona con i 0 e con gli 1, nulla è lasciato al caso. Non per questo c'è bisogno di programmare in binario, ma in C ogni cosa va fatta in un determinato modo, non puoi lasciare nulla al caso, per esempio i tipi vanno dichiarati, e già tra scegliere fra int e float comporta delle sostanziali differenze.
In python non è così, c'è il casting automatico e così via.
Intendiamoci, è una buona cosa, ma è una buona cosa per chi sa già cosa significa programmare.
Tu hai detto che devi imparare il C++ per degli homebrew per la psp giusto? Bene, il fatto che il python tuteli molto l'aspetto "errori del programmatore" farà sì che tu quando programmerai in C++ farai dei programmi del ciufolo.
Poi io sono uno di quelli che ha studiato prima il C++, non penso che studiare il python e poi il C++ dia lo stesso effetto per quanto riguarda migliorare le capacità di programmatore.
Th3 Kn0wl3dg3
10-02-2007, 00:57
ma anche in python devi scegliere fra int o float.cioè io penso ke stia tutto nel modo di apprendimento.se apprendo bene e non mi faccio "viziare" dal python poi non dovrei avre troppi problemi su C dato ke so ke è diverso da python.io penso ke non tutti nel mondo abbiamo cominciato dal C o C++ ma abbiano cominciato da altri linguaggi e poi sono passati al C o C++.non riesco a capire come mai cominciare dal python o qualche altro linguaggio è cosi svantaggiante.credo ke basti sapere ke il linguaggio è diverso e comportarsi di conseguenza, ma almeno non ci arrivo da zero ma avendo già studiato un(per me ottimo)linguaggio di programmazione.
ma anche in python devi scegliere fra int o float.cioè io penso ke stia tutto nel modo di apprendimento.se apprendo bene e non mi faccio "viziare" dal python poi non dovrei avre troppi problemi su C dato ke so ke è diverso da python.io penso ke non tutti nel mondo abbiamo cominciato dal C o C++ ma abbiano cominciato da altri linguaggi e poi sono passati al C o C++.non riesco a capire come mai cominciare dal python o qualche altro linguaggio è cosi svantaggiante.credo ke basti sapere ke il linguaggio è diverso e comportarsi di conseguenza, ma almeno non ci arrivo da zero ma avendo già studiato un(per me ottimo)linguaggio di programmazione.
Guarda, mi permetti un appunto? E' giusto che tu abbia un tuo modo di vedere la cosa, però mi sembra che il tuo modo di vedere sia più per partito preso invece che con una motivazione tecnica a sostegno. O meglio, tu stesso ammetti di non avere esperienza in programmazione, quindi io mi fido :asd:
Noi non ti stiam dicendo python=merda, tutt'altro, a me piace usarlo. Però è un dato di fatto, il C++ è IL linguaggio, per dirti una scemenza, da noi a l'aquila, e non solo, si insegna come primo linguaggio.
Poi tu mi dici "beh ma non tutti avran iniziato col C nel mondo", hai ragione, ma temporalmente parlando "nessuno ha iniziato col python in tutto il mondo" e chi ha iniziato col pascal o il visual basic, per citarne due, ti dirà: "studiati direttamente il C++".
Per finire poi vado a ninna, tu puoi anche iniziare col python e poi passare al C++, se vuoi, quello che ti stiam dicendo noi è: "Beh sì, potresti anche farlo, io però conoscendoli entrambi, sono quasi sicuro che la mia preparazione, chiamala come vuoi, sarebbe diversa, forse minore, se avessi fatto il percorso che tu vuoi fare".
Anzi, volendo, come dici tu, potresti anche farti viziare dal C++, sarebbe tutto di guadagnato.
Poi magari se domani ho tempo posso scendere più nel dettaglio.
Guarda, il culo vuole che ho ritrovato una guida molto buona in italiano di python.
http://www.gentoo.it/Programmazione/byteofpython/
Leggendola ti renderai conto che ad alcuni fine argomento ci saranno delle note, soprattutto per programmatori che vengono del C/C++.
Queste note generalmente iniziano con "Non è necessario fare questo o quello", cioè richiede delle cose in meno rispetto al C++, alcune volte son banalità di forma, altre volte sono delle vere e proprie "sintesi di linguaggio".
maulattu
10-02-2007, 08:37
se vai su www.programmazione.it
nella pagina principale c'è un articolo relativo ad una breve guida a python :read:
In ogni caso se tu vuoi programmare per la psp ti consiglio di guardare questo sito:
http://www.psp-programming.com/
Dato che con la psp dovresti poi programmare in C o C++ io ti consiglio di iniziare subito da uno di questi. I concetti base sono gli stessi ma dato che li dovresti mettere in pratica poi con questi ultimi linguaggi penso sia meglio che tu ti abitui subito.
Per quanto riguarda la diatriba C/ptyhon, io dico che si può anche iniziare da python (io l'ho fatto) e poi passare al C. In ogni caso se si vuole creare qualcosa di funzionante i tipi devono essere corretti in entrambi i linguaggi. Però è certamente più facile all'inizio evitare di fare confusione con un linguaggio più rigoroso come il C.
Th3 Kn0wl3dg3
10-02-2007, 13:44
la guida è già stata postata da wisher ed è la più chiare fra quelle postate.come seconda cosa non sto parlando per partito preso, ma solo dal punto di vista di una persona che non ha mai programmato.detto questo studio il c e il python.spero che la guida postata da loris nell'altro post parta da zero e sia chiara.dierre la tua guida è difficile perchè parla di scrivere i programmi in un editor e poi farli partire da shell, invece quella di wisher dice di scriverli direttamente nella riga di comando, in modo che ogni riga di codice che scrivi viene controllata "in diretta".
se conoscete però altre guide più approfondite di quella di wisher linkatele cosi io quando finisco di leggere quella studierò le altre.
ora vorrei chiedere una cosa a chi conosce python:nel capitolo 3.4 dove parla delle funzioni matematiche c'è scritto che per convertire i gradi in radianti si deve dividere 360 e moltiplicare per 2pi.alloraa perchè nell'esempio c'è messo angolo=gradi*2* math.pi / 360?non dovrebbe essere con un solo asterisco?
wisher:la tua guida per la programmazione in psp è molto buona ma purtroppo è in inglese.al momento credo sia buona una guida in italiano dato ke non conosco il C
cut
gli asetischi sono corretti in quanto python non ha la costante due pigreco ma solo pigreco.
Quindi è come se facessi 2*pi*gradi/360
Ti ricordo che non è possibile "dimenticarsi" il segno per come a volte si fa in matematica, devi mettere per forza tutti i segni per.
[...]dierre la tua guida è difficile perchè parla di scrivere i programmi in un editor e poi farli partire da shell, invece quella di wisher dice di scriverli direttamente nella riga di comando, in modo che ogni riga di codice che scrivi viene controllata "in diretta".
[...]
credo di non aver capito il problema O_o
Th3 Kn0wl3dg3
10-02-2007, 16:41
in che senso non è possibile dimenticarsi il segno come in matematica?comunque scrivendo gradi*2*pi è come se in matematica scrivessi scrivessi gradi*2pi?
sapete alle volte vorrei mollare semplicemente il fatto che ogni programma che vedo penso che se lo dovessi fare io non riuscirei mai a farlo, nemmeno una cosa banale come un programma che calcola la somma di due numeri.
p.s.ho scaricato python e ho provato a mettere in pratica quello che ho studiato fino ad ora, ma non so quale compilatore usare.se vado su file mi fa soltanto salvare il codice.un'altra cosa:ho notato che andando su path browser cè questo percorso(tra i tanti che ci sono): C:\WINDOWS\system32\python25.zip.sono andato a guardare ma c'è solo la dll di python.come mai?
infine vorrei fare un annuncio:come ormai sapete non ho mai programmato prima e forse una cosa buona sarebbe che qualcuno mi seguisse e mi lasciasse degli esercizi che poi dovrebbe controllare.se c'è qualcuno disponibile io lo tengo aggiornato sui miei studi e mi lascia qualche esercizio ke poi corredderà.ve ne sarei grato.logicamente non nel forum ma tramite chat(tipo msn)
grazie a tutti voi per la pazienza
in che senso non è possibile dimenticarsi il segno come in matematica?comunque scrivendo gradi*2*pi è come se in matematica scrivessi scrivessi gradi*2pi?[...]
no, quelle sono convenzioni, in un linguaggio di programmazione come python o C, ci vanno tutti i segni della situazione. quindi gradi*2*pi giusto, gradi*2pi sbagliato.
Th3 Kn0wl3dg3
11-02-2007, 01:54
volevo dire che gradi*2*pi è come se in matematica scrivessi gradi X 2pi giusto?
Th3 Kn0wl3dg3
11-02-2007, 10:22
up
Th3 Kn0wl3dg3
11-02-2007, 14:22
ok
Th3 Kn0wl3dg3
14-02-2007, 16:17
sto andando avanti nello studio del python e nella "lettura" del C e per il momento va tutto bene, ma come ho scritto poco sopra, quando uso un qualsiasi programma penso ke non riuscirò mai a farne uno, nemmeno un programmino con due righe di codice e pensando ke l'interfaccia grafica deve essere pure scritta e non si crea tipo il visual basic mi sento ancora più demoralizzato!
Vai avanti tranquillo. E' come imparare a leggere una lingua straniera. All'inizio arranchi su ogni parola ma col tempo e la pazienza scorrerai intere frasi senza neppure accorgertene. Sempre che lo scrittore dimostri un minimo di compassione per i suoi lettori, ovviamente :D.
Th3 Kn0wl3dg3
15-02-2007, 01:21
eheh!speriamo almeno ke è come dici tu!!
Th3 Kn0wl3dg3
23-02-2007, 16:48
c'è una cosa che non capisco, nel capitolo 4 c'è scritto questo:
ogni valore diverso da zero viene considerato vero e lo zero è considerato falso.
>>> x = 5
>>> x and 1
1
>>> y = 0
>>> y and 1
0
come mai x and 1 restituisce 1 e y and 1 restituisce 0?so che sarebbe molto più comodo scrivere x != 0 ma vorrei capire perchè quelle righe si scrivono cosi
and ha questa tabella di verità:
Vero,Vero->Vero
qualsiasi altra combinazione->Falso
quindi
x!=0->Vero
1!=0->Vero
l'and ha come risultato vero
y=0->Falso
l'and ha come risultato falso
Th3 Kn0wl3dg3
23-02-2007, 17:11
ok, chiarissimo!sei sempre d'aiuto wisher!
ah, prima che dimentico...potresti spiegarmi questo "gioco" di parole che c'è in questo testo(sempre proveniente dalla guida postata da te!):
"Come nel caso di altre istruzioni composte, l'istruzione if è costituita da un'intestazione e da un blocco di istruzioni:
INTESTAZIONE:
PRIMA RIGA DI ISTRUZIONI
...
ULTIMA RIGA DI ISTRUZIONI
L'intestazione inizia su di una nuova riga e termina con il segno di due punti. La serie di istruzioni indentate che seguono sono chiamate blocco di istruzioni. La prima riga di istruzioni non indentata marca la fine del blocco di istruzioni e non ne fa parte. Un blocco di istruzioni all'interno di un'istruzione composta è anche chiamato corpo dell'istruzione.
Non c'è un limite al numero di istruzioni che possono comparire nel corpo di un'istruzione if ma deve sempre essercene almeno una"
grazie
CUT
Scusa, ma non ho capito la tua domanda.
vediamo come si crea un IF:
if condizione:
istruzioniTrue
else
istruzioniFalse
La condizione è una condizione logica, che può derivare da una variabile (come visto prima) o da una funzione logica (ad esempio la AND, ma anche e da funzioni più complesse)
Al verificarsi della condizione (ovvero se assume il valore logico VERO) il tuo programma eseguirà le istruzioni che io ho chiamato istruzioniTrue.
Nota che fanno parte di istruzioni true tutte le linee di codice che tu scrivi dopo l'if che hanno un livello di indentazione superiore a quello dell'if.
if condizione:
A
B
In questo caso la A sarà eseguita solo se la condizione è verificata, mentre B sarà eseguita in ogni caso
if condizione:
A
B
In questo esemio invece tutte e due le istruzioni saranno eseguite solo nel caso la condizione sia verificata.
Lo stesso discorso vale per l'ELSE, solamente che le sue istruzioni saranno eseguite solo in caso di condizione NON verificata.
Th3 Kn0wl3dg3
23-02-2007, 19:48
ok.ma non ho capito bene due cose:
1)cosa significa indentazione
2)che hanno un livello di indentazione superiore a quello dell'if.
Codice:
if condizione:
A
B
In questo caso la A sarà eseguita solo se la condizione è verificata, mentre B sarà eseguita in ogni caso
questa parte non l'ho capita molto bene.perchè la A sarà eseguita solo se è verificata e la B invece no?
magari adesso starai pensando ke non sono portato per la programmazione perchè non capire questo è da stupidi...bè penso la stessa cosa io.in questo periodo sono stato molto impegnato altrimenti avrei già finito la guida ke mi hai linkato anche se sicuramente non avrei capito niente
ok.ma non ho capito bene due cose:
1)cosa significa indentazione
2)che hanno un livello di indentazione superiore a quello dell'if.
Codice:
if condizione:
A
B
In questo caso la A sarà eseguita solo se la condizione è verificata, mentre B sarà eseguita in ogni caso
questa parte non l'ho capita molto bene.perchè la A sarà eseguita solo se è verificata e la B invece no?
magari adesso starai pensando ke non sono portato per la programmazione perchè non capire questo è da stupidi...bè penso la stessa cosa io.in questo periodo sono stato molto impegnato altrimenti avrei già finito la guida ke mi hai linkato anche se sicuramente non avrei capito niente
if condizione:
-identazione-A
B
=
if condizione:
A
B
SE condizione vera esegui A, poi esegui B sempre
if condizione:
-identazione-A
-identazione-B
C
=
if condizione:
A
B
C
SE condizione vera allora esegui A poi B, esegui sempre C
^TiGeRShArK^
23-02-2007, 20:19
ma anche in python devi scegliere fra int o float.cioè io penso ke stia tutto nel modo di apprendimento.se apprendo bene e non mi faccio "viziare" dal python poi non dovrei avre troppi problemi su C dato ke so ke è diverso da python.io penso ke non tutti nel mondo abbiamo cominciato dal C o C++ ma abbiano cominciato da altri linguaggi e poi sono passati al C o C++.non riesco a capire come mai cominciare dal python o qualche altro linguaggio è cosi svantaggiante.credo ke basti sapere ke il linguaggio è diverso e comportarsi di conseguenza, ma almeno non ci arrivo da zero ma avendo già studiato un(per me ottimo)linguaggio di programmazione.
io ho iniziato col BASIC.
E secondo me è molto + semplice imparare un linguaggio + ad alto livello come il python ke buttarsi dall'inizio ad un linguaggio "rompicoglioni" come il C.
Secondo me ki inzia col C rischia di perdere subito l'entusiasmo.
E non è affatto vero che un linguaggio + vincolato aiuti meglio a programmare.
forse aiuterà a programmare secondo le regole di quel linguaggio, ma a costo della fantasia e della capacità di risolvere problemi, anke magari scrivendo porcate assurde.
E cmq saper programmare non vuole assolutamente dire imparare un linguaggio, ma bisogna proprio imparare la mentalità giusta.
Piuttosto che sbattere la testa sui casini che sicuramente incontrerai scrivendo programmi in c, x me è + logico usare il tuo tempo in maniera + proficua imparando un linguaggio che possa darti risultati molto + semplicemente e che ti insegni la mentalità di programmazione.
Inoltre, ultimo come ordine, ma non certo come importanza, c'è il piccolo dettaglio ke il C, a differenza del python, è un linguaggio procedurale, e iniziare ad imparare un linguaggio procedurale nell'era della Programmazione ad Oggetti lo vedo un vero controsenso.
tutto questo ovviamente imho, anke se sono sicuro ke finirà come in tutte le altre discussioni in cui si discuteva su quale linguaggio è meglio imparare x prima :asd:
^TiGeRShArK^
23-02-2007, 20:47
and ha questa tabella di verità:
Vero,Vero->Vero
qualsiasi altra combinazione->Falso
quindi
x!=0->Vero
1!=0->Vero
l'and ha come risultato vero
y=0->Falso
l'and ha come risultato falso
Non so come è implementato l'and in python, ma ad okkio direi che viene effettuato un and bit per bit tra l'intero 5 e l'intero 1, quindi in binario avremmo 00000101 AND 000000001 che ha come risultato 00000001, equivalente al numero 1.
Per verificare basterebbe scrivere 3 and 3, se come risultato da 3 (00000011) allora è come pensavo.
EDIT: ho appena verificato, 3 and 3 da come risultato 3
Th3 Kn0wl3dg3
24-02-2007, 07:11
tigershark non capisco coso vuoi dire riguardo l'and e inoltre quale è la procedura per convertire in binario?e dato ke hai nominato la programmazione ad oggetti vorrei chiederti cosa è.grazie
dierre il procedimento ho capito come è, ma non capisco questo:
-identazione-A
B
cosa è questa identazione?come ho detto ho capito il funzionamento ma non sapendo cosa è l'identazione mi sfugge il perchè di questa cosa
tigershark non capisco coso vuoi dire riguardo l'and e inoltre quale è la procedura per convertire in binario?e dato ke hai nominato la programmazione ad oggetti vorrei chiederti cosa è.grazie
dierre il procedimento ho capito come è, ma non capisco questo:
-identazione-A
B
cosa è questa identazione?come ho detto ho capito il funzionamento ma non sapendo cosa è l'identazione mi sfugge il perchè di questa cosa
L'indentazione è semplicemente aggiungere un rientro (uno spazio, una tabulazione) prima di una riga di codice.
In altri linguaggi lo scopo è solamente la leggibilità, mentre in python l'indentazione è utilizzata per dividere i blocchi di istruzioni.
@tihershark
Però sembra implementato in modo differente, dalle prove che ho fatto a and b restituisce sempre b, tranne nel caso in cui a sia nullo.
>>> 1 and 2
2
>>> 3 and 3
3
>>> 23 and 55
55
>>> 0 and 1
0
>>> 9 and 1
1
>>> 1 and 9
9
>>>
Th3 Kn0wl3dg3
24-02-2007, 13:51
allora è come dice tiger o come dice wisher?
comunque volevo farvi vedere come ho svolto il primo esercizio del paragrafo 4.6:
1) def Confronta (x, y)
if x==y
print x, "è uguale a", y
else x!=y
print x, "è diverso da", y
è giusto?
il secondo non sono riuscito perchè non ho capito molto bene cosa vuole e l'esempio non mi sembra molto esauriente
if scelta == 'A':
FunzioneA()
elif scelta == 'B':
FunzioneB()
elif scelta == 'C':
FunzioneC()
else:
print "Scelta non valida"
al posto di FunzioneA dovrei scrivere un funzione creata da me?tipo
def A(x)
if x<0
print x, "è minore di zero"
else
print x, "non è minore di zero"
sicuramente è sbagliato ma vorrei capire.la guida è ottima ma alcune cose non sono molto chiare
poi vi posto anche gli esercizi dei primi tre capitoli cosi vedete se sono giusti
tigershark non capisco coso vuoi dire riguardo l'and e inoltre quale è la procedura per convertire in binario?e dato ke hai nominato la programmazione ad oggetti vorrei chiederti cosa è.grazie
dierre il procedimento ho capito come è, ma non capisco questo:
-identazione-A
B
cosa è questa identazione?come ho detto ho capito il funzionamento ma non sapendo cosa è l'identazione mi sfugge il perchè di questa cosa
Ti ho fatto l'esempio, quello che ho scritto io a cosa è uguale
if condizione:
A
B
lo spazio che vedi prima di ha è l'identazione.
Th3 Kn0wl3dg3
24-02-2007, 15:15
ok.grazie aspetto risposte al mio ultimo post e anche per sapere quale è la procedura per convertire in binario.grazie
Th3 Kn0wl3dg3
25-02-2007, 13:52
up
Anche io sto iniziando a programmare, e mi sono trovato nello stesso dubbio su quale linguaggio utilizzare, alla fine girando un pò per i siti e chiedendo parere ho capito che la scelta migliore sopratutto per semplicità ed efficacia è il python, quindi non dar retta a chi dice che il c++ è più facile che non è assolutamente vero, magari chi lo dice è solo uno che conosce già il c++ e sà che dovrà cambiare e imparare un nuovo modo di concepire un linguaggio, quindi và sul sicuro che il python è il migliore.
Per quanto riguarda l'and dalla reference officiale si legge che è valutato per primo il secondo elemento
http://docs.python.org/lib/boolean.html
@Th3 Kn0wl3dg3
A cosa ti serve la conversione in binario?
Th3 Kn0wl3dg3
25-02-2007, 17:51
Per quanto riguarda l'and dalla reference officiale si legge che è valutato per primo il secondo elemento
http://docs.python.org/lib/boolean.html
@Th3 Kn0wl3dg3
A cosa ti serve la conversione in binario?
la conversione in binario mi serve per conoscenza personale!!
riguardo l'esercizio che ho svolto che mi dici?
per quanto riguarda la codifica binaria
http://it.wikipedia.org/wiki/Sistema_numerico_binario
Nel primo esercizio MANCA l'indentazione (spero per un problema di copia/incolla sul forum)
Per l'altro esercizio potresti postare il testo?
Inoltre per verificare la correttezza degli esercizi ti consiglio di provare a farli girare, dai qualche valore in input e vedi se l'output è corretto oppure no.
Fidati, così si impara molto di più
Ziosilvio
26-02-2007, 12:54
Per quanto riguarda l'and dalla reference officiale si legge che è valutato per primo il secondo elemento
http://docs.python.org/lib/boolean.html
Assolutamente no!
Al contrario: la documentazione dice che il secondo argomento viene valutato solo se necessario.
Per cui: l'operatore and è implementato in modo "pigro" (come in C, C++, Java, ecc.), e gli operandi sono valutati da sinistra a destra solo finché è necessario: a quel punto, il valore dell'espressione è pari a quello dell'ultimo operando valutato.
Th3 Kn0wl3dg3
26-02-2007, 13:49
Assolutamente no!
Al contrario: la documentazione dice che il secondo argomento viene valutato solo se necessario.
Per cui: l'operatore and è implementato in modo "pigro" (come in C, C++, Java, ecc.), e gli operandi sono valutati da sinistra a destra solo finché è necessario: a quel punto, il valore dell'espressione è pari a quello dell'ultimo operando valutato.
vuoi dire che fino a quando i due operandi non sono uguarli python continua a valutarli da sinistra e destra?
@wisher:l'identazione è stata colpa del copia/incolla, ma è cosi necessaria in python rispetto agli altir linguaggi?
il secondo esercizio è questo: scrivi una funzione che controlla se un valore passato come parametro appartiene ad una lista di valori validi (ElaboraScelta(scelta)).
inoltre c'è un altro esercizio di un paragrafo che ho studiato questa mattina a scuola che non riesco a risolvere. il paragrafo è il 5.1 e questo è l'esercizio:
Esercizio: scrivi una funzione Confronto che ritorna 1 se x>y, 0 se x==y e -1 se x<y.però se devo essere sincero questo paragrafo non l'ho capito, più precisamente non ho capito il funzionamento di return nelle funzioni produttive e nel paragrafo 4.12 nonho capito come usare la funzione \linebreak raw_input perchè non c'è nessun esempio ke lo spiega.
cmq hai ragione a dire che è meglio farli girare, ma mi fa piacere farvi partecipi di quello ke faccio e anche se alcuni li faccio giusti(tutti lgi esercizi che faccio li provo)vorrei avere un vostro parere magari sull'ottimizzazione del codie o per fare qualche procedimento in modo più semplice!
Ziosilvio
26-02-2007, 14:46
vuoi dire che fino a quando i due operandi non sono uguarli python continua a valutarli da sinistra e destra?
Sì.
scrivi una funzione che controlla se un valore passato come parametro appartiene ad una lista di valori validi (ElaboraScelta(scelta))
Da' un'occhiata alla parola chiave "in".
scrivi una funzione Confronto che ritorna 1 se x>y, 0 se x==y e -1 se x<y.
Fa' il confronto, e, a seconda dell'esito, restituisci un valore diverso.
nonho capito come usare la funzione \linebreak raw_input
raw_input(prompt) stampa a schermo la stringa prompt e aspetta che tu scriva una stringa e prema Invio.
Sull'input che fornisci tu non viene fatta alcuna elaborazione, ma viene salvata in un oggetto di tipo stringa, che è anche il valore restituito dalla funzione.
Ad esempio, s = raw_input('Che mi dici di bello? ') stampa a schermo "Che mi dici di bello?" con uno spazio in fondo, e salva quello che tu gli scrivi in una stringa che verrà referenziata dalla variabile s.
Th3 Kn0wl3dg3
26-02-2007, 16:51
fino ad ora la parola chiave "in" non l'ho trovata quindi non possono esserci esercizi su questo.
raw_imput ho capito come funziona ma non ho capito \linebreak
riguardo l'esercizio è giusto?
def Confronto (X):
if x>1:
return 0
elseif x==y
return 1
elseif x<y
return -1
è giusto?
Ziosilvio
26-02-2007, 17:01
fino ad ora la parola chiave "in" non l'ho trovata quindi non possono esserci esercizi su questo.
Strano, allora mi sa che devi fare "a mano" una serie di confronti... oppure fare una cosa del tipo
n=0
while n<len(a):
## roba varia sull'array a
n=n+1
che però è abbastanza anti-Python...
raw_imput ho capito come funziona ma non ho capito \linebreak
Sembrerebbe un refuso dal sorgente LaTeX.
Che guida stai usando? Ho provato a scorrere il thread all'indietro, ma non mi è riuscito di capirlo...
riguardo l'esercizio è giusto?
def Confronto (X):
if x>1:
return 0
elseif x==y
return 1
elseif x<y
return -1
Anzitutto, ricorda di usare il tag "code" in modo da conservare l'indentazione, che in Python è fondamentale.
Poi:
- "if x>1" è chiaramente un refuso al posto di "if x>y";
- il valore da restituire è 1 se x>y, e 0 se x==y;
- "elseif" in Python non esiste: esiste "elif".
Allora io sono arrivato al capitolo 7 e gli esercizi magari li faccio dopo aver letto il corso.
Riguardo \linebreak da quel che ricordo serve per accettare sia numeri che stringhe a differenza di raw_input che accetta solo stringhe e input i numeri.
E pensare che è il secondo giorno che studio python.. :D
Th3 Kn0wl3dg3
26-02-2007, 19:49
while ancora in quel capitolo non c'è e nemmeno len.riguardo l'esercizio ho sbagliato io perchè dovevo scrivere x>y e elif e il tag "code" ancora non l'ho incontrato.la guida la trovi nella prijma pagina del post
@adrail:io questo l'ho fatto tutto in un giorno(sommando le ore che ho potuto studiare!) e devi anche mettere che sono stato quasi tutto il tempo in questo periodo fuori!altrimenti adesso l'avrei letta tutta ma mentre studio faccio anche gli esercizi!!
cercando in giro ho visto che \linebreak serve per poter accettare delle stringhe di caratteri e poi successivamente convertirle nel tipo che vuoi a differenza di raw_input che acceta solo stringhe e per gli interi si usa invece input ma nella guida non c'è nessun esempio di come applicare questa funzione(intendo la \linebreak)
e non mi è molto chiaro nemmeno l'istruzione return perchè nel paragrafo 4.8 si capisce ma nel paragrafo 5.1 non ho capito molto bene
spero come sempre di avere il vostro aiuto!
Th3 Kn0wl3dg3
27-02-2007, 13:48
up
Ziosilvio
27-02-2007, 14:26
up
Uppo anch'io per ripetere la domanda che ti ho fatto pochi post fa: che guida stai usando?
Th3 Kn0wl3dg3
27-02-2007, 18:46
ziosilvio qualche post indietro ti ho scritto ce la guida si trova nella prima pagina del thread, postata da wisher.sia in italiano che in inglese.
eccola http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm
Ziosilvio
27-02-2007, 23:23
http://www.python.it/doc/Howtothink/Howtothink-html-it/index.htm
Ah, How to Think like a Computer Scientist.
Ottima scelta.
A proposito: quel \linebreak è un errore di stampa nella versione italiana della guida.
Infatti, come puoi constatare tu stesso QUI (http://www.ibiblio.org/obp/thinkCSpy/chap04.html), nella versione originale non c'è.
(Per inciso: nella traduzione si è anche persa una famosa gag dei Monty Python...)
La funzione che serve ad accettare stringhe di caratteri, come avevo detto in precedenza, è raw_input.
Tale funzione ha il vantaggio di memorizzare l'input da tastiera come stringa grezza (raw string), ossia senza interpretare i caratteri speciali (apice, doppio apice, eccetera) come tali, ma considerandoli caratteri normali.
Th3 Kn0wl3dg3
28-02-2007, 10:36
in che senso senza interpretare i caratteri speciali? cioè se io scrivo
nome=raw_input ("qual'è il tuo nome?")
che cosa è che non interpreta?
e che cosa è la gag dei monty python?
Ziosilvio
28-02-2007, 11:47
in che senso senza interpretare i caratteri speciali? cioè se io scrivo
nome=raw_input ("qual'è il tuo nome?")
che cosa è che non interpreta?
Di fatto, niente: ossia, non tenta di capire il tipo di dato dalla forma dell'input, ma salva tutto in una stringa così com'è.
Supponiamo che uno si chiami Marco. Se scrive Marco a raw_input, va tutto bene; se lo scrive a input, viene fuori un errore di sintassi, perché input non riesce a capire che tipo abbia il valore Marco passato dall'utente; e deve scrivere 'Marco'
che identifica l'input come una stringa.
e che cosa è la gag dei monty python?
Non mi dire che non hai mai visto "Monty Python e il Sacro Graal"...
Th3 Kn0wl3dg3
28-02-2007, 13:07
ora capisco, pensavo che era riferito a quello racchiuso nelle parentesi, praticamente il prompt, non pensavo che ti riferissi all'input dell'utente.scusami,ma se uno usa input e si inserisce una stringa python dovrebbe dare un errore di sintassi.quindi se uno scrive 'Marco' dovrebbe dare lo stesso un errore oppure mettendo gli apici o virgolette input capisce ke è una stringa?
Ziosilvio
28-02-2007, 13:58
se uno usa input e si inserisce una stringa python dovrebbe dare un errore di sintassi
Se gliela dài "a secco", sì.
Se la racchiudi tra apici o doppi apici, no.
Ad esempio, considera il frammento di codice Python:
prompt = 'Che mi dici di bello? '
s = input(prompt)
Lo fai girare, e ti ritrovi Che mi dici di bello?
Se a questo punto scrivi %s costa %d Punti Sangue l'interprete Python si lamenta.
Se invece scrivi '%s costa %d Punti Sangue' non ottieni nessun errore, e se dopo fai print s % ('Blood Boil',5) ti ritrovi sullo schermo la scritta Blood Boil costa 5 Punti Sangue
Che dici, si vede che sto giocando a Vampire Bloodlines con un personaggio Tremere?
Th3 Kn0wl3dg3
28-02-2007, 19:25
prompt = 'Che mi dici di bello? '
s = input(prompt)
lo faccio girare, ma non mi ritrovo niente e anche se funzionasse o gli asterischi o gli apici non dovrebbero essere la stessa cosa?identificano sempre una stringa
%s costa %d Punti Sangue
cosa significano %s %d?è perchè hai scritto cosi?
print s % ('Blood Boil',5)
non capisco nemmeno questo
cioè perchè scrivere con questa sintassi?per scrivere una frase si deve fare tutto queto procedimento?
Ziosilvio
28-02-2007, 20:10
o gli asterischi o gli apici non dovrebbero essere la stessa cosa?identificano sempre una stringa
Casomai: i doppi apici o gli apici.
In pratica, hai la scelta di usare uno dei due tipi di delimitatori, e usare il secondo come carattere nomale all'interno della stringa.
Per esempio, puoi scrivere '"Ah ah!" rise il cattivo' anziché '\"Ah ah!\" rise il cattivo'
cosa significano %s %d?è perchè hai scritto cosi?
non capisco nemmeno questo
Scusa... voleva essere un esempio un minimo non banale.
In pratica, puoi interpolare una stringa formattata in maniera opportuna, con i valori contenuti in una tupla: un po' come quando usi printf in C.
Ma mi sa che sono andato troppo avanti...
Th3 Kn0wl3dg3
01-03-2007, 07:09
si hai ragione, ho sbagliato io a scrivere!dovevo scrivere virgolete non asterischi!!andavo di fretta quando avevo scritto il post!
Scusa... voleva essere un esempio un minimo non banale.
In pratica, puoi interpolare una stringa formattata in maniera opportuna, con i valori contenuti in una tupla: un po' come quando usi printf in C.
Ma mi sa che sono andato troppo avanti...
ziosilvio scusami, ma sono ingorante e non capisco proprio cosa vuoi dire!
interpolare, tupla.... e oltretutto io non so il C ma deduco che printf stampi un carattere...o no?
Ziosilvio
01-03-2007, 11:53
non capisco proprio cosa vuoi dire!
interpolare, tupla.... e oltretutto io non so il C ma deduco che printf stampi un carattere...o no?
Scusami tu; sono io che corro troppo.
Le stringhe sono al capitolo 7 della guida; le tuple, al capitolo 9.
printf lasciamola stare, visto che fa parte di un linguaggio che ci interessa se e solo se lo conosci già.
Diciamo semplicemente che puoi creare una stringa con dei "buchi" (le cose tipo %s, %d eccetera) e poi usare una sequenza di oggetti (chiamata, appunto, tupla) per "tappare" questi "buchi". Io ho chiamato questa operazione "interpolazione".
Ma ne riparliamo quando arrivi al capitolo giusto ;)
Th3 Kn0wl3dg3
01-03-2007, 13:54
ho capito cosa vuol dire, ma come hai detto è meglio parlarne quando arrivo ai capitoli dove se ne parla!purtroppo questi giorni sono dalla mattina alla sera fuori paese e mi viene difficile andare avanti a studiare python..al massimo riesco a fare un paragrafo...uffa
Th3 Kn0wl3dg3
02-03-2007, 18:59
oggi mi sono bloccato di nuovo.ecco dove:
PARAGRAFO 5.2
def DistanzaTraDuePunti(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
DistQuadrata = dx**2 + dy**2
print "DistQuadrata vale ", DistQuadrata
return 0.0
perchè deve restituire 0.0 alla fine?questa funzione return più vado avanti più mi sembra meno chiara e a che serve l'istruzione print se poi dovrebbe restituire il risultato?infatti nell'altro esempio più sotto, sempre nello stesso paragrafo non c'è anche se c'è messo che si può mettere.
def DistanzaTraDuePunti(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
DistQuadrata = dx**2 + dy**2
Risultato = math.sqrt(DistQuadrata)
return Risultato
perchè qua invece di 0.0 ritorna la variabile Risultato?
def AreaDelCerchio2(xc, yc, xp, yp):
Raggio = DistanzaTraDuePunti(xc, yc, xp, yp)
Risultato = AreaDelCerchio(Raggio)
return Risultato
qua invece nella guida c'è messo che le variabili "raggio" e "risultato" sono temporanee, come quella del primo esempio dell'area del cerchio qualche paragrafo prima...perchè sono temporanee?
PARAGRAFO 5.4
def Divisibile(x, y):
return x%y == 0
in questo caso la funzione return dovrebeb ritornare che cosa?
scusate tutte queste domande ma non capisco
^TiGeRShArK^
02-03-2007, 19:37
oggi mi sono bloccato di nuovo.ecco dove:
PARAGRAFO 5.2
def DistanzaTraDuePunti(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
DistQuadrata = dx**2 + dy**2
print "DistQuadrata vale ", DistQuadrata
return 0.0
perchè deve restituire 0.0 alla fine?questa funzione return più vado avanti più mi sembra meno chiara e a che serve l'istruzione print se poi dovrebbe restituire il risultato?infatti nell'altro esempio più sotto, sempre nello stesso paragrafo non c'è anche se c'è messo che si può mettere.
perchè secondo me è una subroutine (funzione che non restituisce alcun valore) e non una funzione nel senso comune del termine.
Immagino che metta return 0.0 perchè forse le funzioni in pyhton devono per forza ritornare qualcosa, ma prendilo con le molle ke è un pò di tempo ke non tocco python :p
def DistanzaTraDuePunti(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
DistQuadrata = dx**2 + dy**2
Risultato = math.sqrt(DistQuadrata)
return Risultato
perchè qua invece di 0.0 ritorna la variabile Risultato?
perchè questa è una funzione nel senso comune del termine e quindi restituisce il risultato che ha calcolato.
def AreaDelCerchio2(xc, yc, xp, yp):
Raggio = DistanzaTraDuePunti(xc, yc, xp, yp)
Risultato = AreaDelCerchio(Raggio)
return Risultato
qua invece nella guida c'è messo che le variabili "raggio" e "risultato" sono temporanee, come quella del primo esempio dell'area del cerchio qualche paragrafo prima...perchè sono temporanee?
non sono variabili temporanee.
Sono variabili locali della funzione.
In parole povere queste variabili esistono solo fin tanto che il programma sta eseguendo la funzione, prima di iniziare ad eseguirla e dopo a verla terminata non esistono +.
Le variabili globali invece sono visibili a tutto il codice.
PARAGRAFO 5.4
def Divisibile(x, y):
return x%y == 0
in questo caso la funzione return dovrebeb ritornare che cosa?
scusate tutte queste domande ma non capisco
questo di dice semplicemente se x è divisibile x y poickè l'operatore MOD (%) restituisce il modulo di una divisione ovvero il resto.
Quindi questa riga di codice significa:
restituisci come risultato se il resto di x diviso y è uguale a 0.
Il resto di x diviso y è uguale a 0 solo quando x è divisibile per y.
Th3 Kn0wl3dg3
03-03-2007, 07:16
def AreaDelCerchio2(xc, yc, xp, yp):
Raggio = DistanzaTraDuePunti(xc, yc, xp, yp)
Risultato = AreaDelCerchio(Raggio)
return Risultato
qua invece nella guida c'è messo che le variabili "raggio" e "risultato" sono temporanee, come quella del primo esempio dell'area del cerchio qualche paragrafo prima...perchè sono temporanee?
non sono variabili temporanee.
Sono variabili locali della funzione.
In parole povere queste variabili esistono solo fin tanto che il programma sta eseguendo la funzione, prima di iniziare ad eseguirla e dopo a verla terminata non esistono +.
Le variabili globali invece sono visibili a tutto il codice
Nella guida c'è messo che sono variabili temporanee.anche in questo pezzo di codice, qualache paragrafo prima, c'è scritto ke la variabile temp è temporanea:
import math
def AreaDelCerchio(Raggio):
temp = math.pi * Raggio**2
return temp
def DistanzaTraDuePunti(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
DistQuadrata = dx**2 + dy**2
Risultato = math.sqrt(DistQuadrata)
return Risultato
perchè questa è una funzione nel senso comune del termine e quindi restituisce il risultato che ha calcolato.
scusa, ma anche questa è una funzione, eppure restituisce 0.0:
def DistanzaTraDuePunti(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
DistQuadrata = dx**2 + dy**2
print "DistQuadrata vale ", DistQuadrata
return 0.0
def Divisibile(x, y):
return x%y == 0
quindi questa funzione dovrebbe restituire il risultato se i due numeri sono divisibili, ma non dovrebbe esserci un'istruzione if?tipo:
def Divisibile (x,y)
if x%y==0
return
questa istruzione return scritta cosi dovrebbe restituire il risultato se un numero è divisibile per un altro, ma non mi restituisce niente perchè non so cosa mettere dopo return per restituire il risultato
non sono variabili temporanee.
Sono variabili locali della funzione.
Sono variabili locali della funzione e temporanee. Le due cose non si escludono, e il risultato e' ogni invocazione della funzione lavora su variabili "nuove" e non vede il valore assunto nelle precedenti chiamate.
Piccolo esempio:
def foo(x,y):
y = []
y.append(x)
print y
def foo2(x,y=[]):
y.append(x)
print y
foo(1)
foo(2)
foo(3)
foo2(1)
foo2(2)
foo2(3)
Nel caso di foo, il risultato delle tre chiamate a foo e' la stampa di [1],[2] e [3].
Nel caso di foo2, y viene inizializzata una unica volta nel corso della prima chiamata, e il valore permane. Quindi foo2 ha il risultato di stampare rispettivamente [1],[1,2] e [1,2,3]. Non so se in questo caso abbia senso parlare di variabile temporanea
Ziosilvio
03-03-2007, 11:36
Nella guida c'è messo che sono variabili temporanee
Le variabili locali sono temporanee, perché viene allocato sazio in memoria per loro quando viene avviata la funzione, e questo spazio viene liberato quando la funzione termina.
anche questa è una funzione, eppure restituisce 0.0
Credo volesse dire che, secondo lui, in Python una funzione debba sempre restituire un valore alla propria terminazione. (Di fatto, non è così.)
questa funzione dovrebbe restituire il risultato se i due numeri sono divisibili, ma non dovrebbe esserci un'istruzione if?
L'esempio serve a farti vedere che non c'è sempre bisogno di ricorrere a un if se occorre ottenere un valore booleano.
questa istruzione return scritta cosi dovrebbe restituire il risultato se un numero è divisibile per un altro, ma non mi restituisce niente perchè non so cosa mettere dopo return per restituire il risultato
In questo caso, dovresti fare un if-else:
if x%y==0:
return True
else:
return False
Solo che questa funzione restituisce True se e solo se l'espressione booleana x%y==0 ha valore True, e restituisce False se e solo se l'espressione booleana x%y==0 ha valore False: per cui, e qui era il succo dell'esempio, puoi scrivere semplicemente
return x%y==0
Th3 Kn0wl3dg3
03-03-2007, 13:34
capito.quello che non ho capito molto bene è l'esempio di fool e fool2
^TiGeRShArK^
03-03-2007, 18:14
Sono variabili locali della funzione e temporanee.
:mbe:
E' implicito nella definizione di variabile locale il fatto che sia temporanea all'interno della funzione.
Una variabile temporanea può essere ad esempio:
private void something(String a) {
String b = a;
// do something
String b = null;
//do anything else
}
quindi x me b è una variabile locale temporanea perchè non esiste per tutta il ciclo di vita del metodo ma viene posta a null ad un certo punto (Ad esempio può essere una grossa cache che necessita di essere ripulita dal garbage collector perchè ad un certo punto diventa obsoleta).
La variabile a invece è una variabile locale, il che implica che è valida solo fintanto che ci si trova all'interno di quel metodo.
Estendendo un pò questo concetto si può dire che:
int a = 1;
int b = 2;
int temp = a;
a = b;
b = temp;
temp ad esempio si può considerare una variabile temporanea dato che, all'interno di un contesto maggiore, essa è utile solo per un periodo limitato di tempo, terminato il quale può essere tranquillamente eliminata avendo concluso la sua funzione, ovvero quando il suo valore è stato assergnato a b.
Ma cmq io potrei anche avere variabili globali temporanee, xkè il concetto di "località" di una variabile e di "temporaneità" sono proprio due cose diverse.
Nel caso di cui sopra quella imho era un variabile locale.
Spero di aver spiegato il mio concetto di "temporaneità" :p
^TiGeRShArK^
03-03-2007, 18:16
Credo volesse dire che, secondo lui, in Python una funzione debba sempre restituire un valore alla propria terminazione. (Di fatto, non è così.)
Allora mi sfugge proprio il significato di quell'esempio che restituisce 0.0 :fagiano:
^TiGeRShArK^
03-03-2007, 18:25
Nel caso di foo, il risultato delle tre chiamate a foo e' la stampa di [1],[2] e [3].
Nel caso di foo2, y viene inizializzata una unica volta nel corso della prima chiamata, e il valore permane. Quindi foo2 ha il risultato di stampare rispettivamente [1],[1,2] e [1,2,3]. Non so se in questo caso abbia senso parlare di variabile temporanea
Qua onestamente mi sfugge come fai a chiamare un metodo che accetta due parametri passandogliene solo 1 :mbe:
Spero che non sia davvero possibile fare una cosa del genere in python perchè altrimenti non mi spiego proprio come faccia l'interprete a scegliere quale signature della funzione utilizzare quando si lancia una funzione :fagiano:
Th3 Kn0wl3dg3
03-03-2007, 22:36
Qua onestamente mi sfugge come fai a chiamare un metodo che accetta due parametri passandogliene solo 1
Spero che non sia davvero possibile fare una cosa del genere in python perchè altrimenti non mi spiego proprio come faccia l'interprete a scegliere quale signature della funzione utilizzare quando si lancia una funzione
???????:confused: :confused: :confused: :confused: :confused: :confused:
Allora mi sfugge proprio il significato di quell'esempio che restituisce 0.0
sfugge anche a me
Una variabile temporanea può essere ad esempio:
private void something(String a) {
String b = a;
// do something
String b = null;
//do anything else
}
quindi x me b è una variabile locale temporanea perchè non esiste per tutta il ciclo di vita del metodo ma viene posta a null ad un certo punto (Ad esempio può essere una grossa cache che necessita di essere ripulita dal garbage collector perchè ad un certo punto diventa obsoleta).
La variabile a invece è una variabile locale, il che implica che è valida solo fintanto che ci si trova all'interno di quel metodo.
Estendendo un pò questo concetto si può dire che:
int a = 1;
int b = 2;
int temp = a;
a = b;
b = temp;
temp ad esempio si può considerare una variabile temporanea dato che, all'interno di un contesto maggiore, essa è utile solo per un periodo limitato di tempo, terminato il quale può essere tranquillamente eliminata avendo concluso la sua funzione, ovvero quando il suo valore è stato assergnato a b.
Ma cmq io potrei anche avere variabili globali temporanee, xkè il concetto di "località" di una variabile e di "temporaneità" sono proprio due cose diverse.
Nel caso di cui sopra quella imho era un variabile locale.
Spero di aver spiegato il mio concetto di "temporaneità"
scusa, ma mi sono confuso solo di più.poi mi dite come dovrei fare ad essere ottimista se ancora a 19anni non capisco queste cose?e poi vorrei diventare chissà chi...sono sempre più convinto di essere un illuso....:(
:mbe:
E' implicito nella definizione di variabile locale il fatto che sia temporanea all'interno della funzione.
Basta che ti decidi :p, prima hai detto una cosa un po' diversa:
non sono variabili temporanee.
Sono variabili locali della funzione.
Al che io ho specificato che sono due cose distinte e possibili contemporaneamente.
Anche se probabilmente abbiamo due idee diverse sul significato di "variabile temporanea"
Qua onestamente mi sfugge come fai a chiamare un metodo che accetta due parametri passandogliene solo 1 :mbe:
Spero che non sia davvero possibile fare una cosa del genere in python perchè altrimenti non mi spiego proprio come faccia l'interprete a scegliere quale signature della funzione utilizzare quando si lancia una funzione :fagiano:
Scusa, ho fatto le cose un po' di corsa
nella definizione di foo2:
def foo2(x,y=[]):
y.append(x)
print y
Il parametro y ha un valore di default, che viene utilizzato se non ne specifico altri.
Ad esempio foo2(5) equivale a foo2(5,[]), in quanto nella definizione di funzione ho scritto y=[]. Nulla mi vieta ovviamente di specificare esplicitamente il secondo parametro, ad esempio foo2(1,['x']).
La cosa da fare attenzione e' che il valore di default viene calcolato solo all'inizio e non ad ogni chiamata. Quindi quando scrivo
foo2(1)
foo2(2)
alla prima chiamata y ha valore [], mentre alla seconda ha valore [1], ovvero il valore che aveva y alla fine della chiamata precedente. In pratica passo informazioni da una chiamata di funzione alla successiva, ed era il mio esempio di variabile locale, ma non temporanea.
In ogni caso l'inteprete non deve scegliere assolutamente la signature della funzione da utilizzare: in python non esiste l'overloading delle funzioni. Se definisco due funzioni con lo stesso nome (anche se con signature differente) la prima "sparisce" e rimane valida solo la seconda.
Se scrivo
def f(x):
return x
def f(x,y):
return x+y
f(1)
l'interprete mi ritorna un errore in quanto quando chiamo f(1) l'unica definizione valida di f e' la seconda.
oggi mi sono bloccato di nuovo.ecco dove:
PARAGRAFO 5.2
def DistanzaTraDuePunti(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
DistQuadrata = dx**2 + dy**2
print "DistQuadrata vale ", DistQuadrata
return 0.0
perchè deve restituire 0.0 alla fine?
Infatti secondo me non dovrebbe.
O l'autore decide che deve tornare la distanza (oltre che stamparlo) e allora l'ultima riga dovrebbe essere return DistQuadrata (o meglio ancora la sua radice, ma questo e' un altro discorso), oppure stabilisce che invece che una funzione e' una procedura, e il risultato viene solo stampato; in quest'ultimo caso il return proprio non ci dovrebbe essere.
Th3 Kn0wl3dg3
04-03-2007, 09:58
def DistanzaTraDuePunti(x1, y1, x2, y2):
dx = x2 - x1
dy = y2 - y1
DistQuadrata = dx**2 + dy**2
print "DistQuadrata vale ", DistQuadrata
return 0.0
perchè deve restituire 0.0 alla fine?
Infatti secondo me non dovrebbe.
O l'autore decide che deve tornare la distanza (oltre che stamparlo) e allora l'ultima riga dovrebbe essere return DistQuadrata (o meglio ancora la sua radice, ma questo e' un altro discorso), oppure stabilisce che invece che una funzione e' una procedura, e il risultato viene solo stampato; in quest'ultimo caso il return proprio non ci dovrebbe essere.
io credo che non dovrebbe restituirlo in nessun cas.forse c'è stato un errore nella traduzione della guida?come il \linebreak di qualche paragrafo fa che non c'entrava niente e nella guida originale non c'era
Th3 Kn0wl3dg3
05-03-2007, 13:04
voi che dite?
Th3 Kn0wl3dg3
06-03-2007, 22:28
up
Th3 Kn0wl3dg3
07-03-2007, 13:52
up
Th3 Kn0wl3dg3
08-03-2007, 19:56
up
Th3 Kn0wl3dg3
09-03-2007, 18:10
up
Th3 Kn0wl3dg3
10-03-2007, 21:58
e non ho capito nemmeno l'esempio di foo
Th3 Kn0wl3dg3
12-03-2007, 13:01
up
e non ho capito nemmeno l'esempio di foo
Non preoccuparti troppo, e' un caso abbastanza particolare che avevo usato per mostrare come in un caso (il primo) ad ogni chiamata y viene inizializzato a lla lista vuota, mentre nel secondo le modifiche alla lista vengono conservate tra una chiamata e l'altra.
def foo(x,y):
y = []
y.append(x)
print y
def foo2(x,y=[]):
y.append(x)
print y
Th3 Kn0wl3dg3
13-03-2007, 01:21
:confused:
Th3 Kn0wl3dg3
13-03-2007, 20:02
leggendo documenti su documenti credo che invece che python mi convenga iniziare da C o meglio ancora da java...voi che dite?
:confused:
Che problema c'è?
Quando uppi, quota il tuo problema, almeno è più semplice rispondere
leggendo documenti su documenti credo che invece che python mi convenga iniziare da C o meglio ancora da java...voi che dite?
Dato che hai iniziato con python ti consiglio di continuare, è un ottimo linguaggio.
:confused:
Allora mi sono accorto che l'ultimo codice che ho postato non e' corretto, lo riscrivo qui per chiarezza, togliendo il secondo argomento a foo:
def foo(x):
y = []
y.append(x)
print y
def foo2(x,y=[]):
y.append(x)
print y
In foo, la lista vuota [] viene associata ad y ad ogni chiamata
per cui se io scrivo
foo(1,1)
foo(2,2)
foo(3,3)
Ogni volta y riparte da [], per cui dopo che con y.append(x) ho aggiunto un elemento alla lista, ottengo sempre una lista di un elemento ( rispettivamente [1], [2] e [3] )
Con foo2 invece, y viene inizializzato ogni volta con la stessa lista, che pero' nel frattempo cresce.
Con
foo2(1)
foo2(2)
foo2(3)
La prima volta che chiamo foo2, y viene inizializzato con la lista vuota [], a prescindere da qualsiasi valore io abbia passato come secondo argomento. A questa lista viene aggiunto l'elemento 1, e quindi la lista diventa [1]. Alla seconda chiamata, ad y viene associata la stessa lista di prima, [1], a cui viene aggiunto il valore 2, rendendola di due elementi, [1,2]. Similmente alla terza chiamata la lista e' [1,2] e diventa [1,2,3].
come dicevo sopra non crucciarti piu' di tanto per questo esempio, e' uno dei rari casi in cui python un po' strano.
io credo che non dovrebbe restituirlo in nessun cas.forse c'è stato un errore nella traduzione della guida?come il \linebreak di qualche paragrafo fa che non c'entrava niente e nella guida originale non c'era
Potrebbe essere. Non avendo sottomano l'originale, e' difficile dire se l'autore voleva o meno ritornare il valore. Di sicuro non voleva tornare 0.0 (o perlomeno spero :D).
Th3 Kn0wl3dg3
14-03-2007, 13:52
marco.r anche se è uno dei pochi casi in cui python è strano devo capirlo!
la guida originale in inglese eccola http://www.ibiblio.org/obp/thinkCSpy/
per quanto riguarda il linguaggio so che python è ottimo ma vedo che il java e il C/C++ sono più diffusi e sono usati in molti più applicativi rispetto a pytho.riguardo al C ho trovato un libro in pdf, tricky C non so se lo conoscete su java invece per principianti non ho trovato niente....voi mi consigliate di imparare C o java oppure di restare a python?mi servirebbe un consiglio il più presto possibile dato che ho già perso troppo troppo troppo tempo
Ziosilvio
14-03-2007, 14:38
so che python è ottimo ma vedo che il java e il C/C++ sono più diffusi e sono usati in molti più applicativi rispetto a pytho.
Python è anche molto più giovane di C e Java, per cui è normale che ci sia meno software scritto in Python: non c'è ancora stato il tempo di scriverlo!
Comunque, sappi che EVE Online è scritto in C++ e Python in proporzioni quasi uguali.
riguardo al C ho trovato un libro in pdf, tricky C non so se lo conoscete
Lo conosco abbastanza da sconsigliartelo in quanto troppo legato alla filosofia del DOS e all'integrazione con tale sistema operativo.
voi mi consigliate di imparare C o java oppure di restare a python?
Impara bene Python; e poi, eventualmente, un altro linguaggio.
Ma se ti arrendi ogni volta che incontri una difficoltà, come fai a imparare bene le cose?
Th3 Kn0wl3dg3
14-03-2007, 22:43
ziosilvio hai ragione ma il punto non è la difficoltà ma bensì la scelta più adatta per il linguaggio. la mia è una situazione delicata, dato che come ben sapete non ho mai programmato. è vero python è giovane ma credo che si meglio cimentarsi con un linguaggio come C o Java. è vero sono più difficili ma ti danno delle basi migliori.apprendendo uno di questi linguaggi è più semplice imparare gli altri. cosa dici?
riguardo la guida l'ho guardata un pò e hai proprio ragione!!!
Th3 Kn0wl3dg3
15-03-2007, 00:15
guardate questo utente, ctrl_alt_canc...15anni e guardate che sa fare...che sarebbe bello essere come lui
http://ctrlaltcanccorp.altervista.org/flatnuke-2.5.8.1/index.php
Comunque, sappi che EVE Online è scritto in C++ e Python in proporzioni quasi uguali.
Lo stesso dicasi per la maggior parte dei giochi moderni, dove il motore e' scritto in C++ o cmq un linguaggio compilato, e un linguaggio piu' flessibile, come (Python o Lua viene usato per gli aspetti di alto livello (scripting dei personaggi ad esempio).
Ancora, in google i due linguaggi piu' usati sono C++ e Python.
Impara bene Python; e poi, eventualmente, un altro linguaggio.
Ma se ti arrendi ogni volta che incontri una difficoltà, come fai a imparare bene le cose?
Soprattutto se ci si arrende con python, con C andra' probabilmente peggio...
Th3 Kn0wl3dg3
15-03-2007, 20:42
forse non mi avete capito, io non mi sto arrendendo ma sto solo valutando l'idea di iniziare con il C e poi C++ o anche Java perchè sono linguaggi diffusissimi e potentissimi. non dico che python è da buttare ma credo che sia molto meglio iniziare con uno di questi due(anche a detta di molti) ma vedo che voi non la pensate cosi
Th3 Kn0wl3dg3
16-03-2007, 21:26
up
Th3 Kn0wl3dg3
17-03-2007, 17:52
up
Th3 Kn0wl3dg3
18-03-2007, 15:46
up
Perché non ne scegli uno a caso e lo impari almeno decentemente così che tu ti possa fare un'idea personale invece di perdere tempo a chiedere qui e ricevere tante risposte quanti sono i punti di vista?
Th3 Kn0wl3dg3
19-03-2007, 07:53
va bene
Th3 Kn0wl3dg3
19-03-2007, 23:57
up
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.