View Full Version : [Python] Mio primo programma!!!
~FullSyst3m~
05-01-2009, 22:43
Ho finito di scrivere oggi pomeriggio il mio primo programma in Python! Non è chissà cosa, è senza interfaccia grafica ed è proprio basilare, poi lo amplierò e ottimizzerò, ma sono felicissimo del lavoro che ho fatto! E' il mio primo programma!
http://rapidshare.com/files/180111413/cf.rar.html
Da lanciare tramite prompt dei comandi. Chi vuole il sorgente basta chiedere, ma fa sicuro schifo rispetto a quelli che siete abituati a vedere e scrivere voi ;)
ho provato ad inserire la data di nascita in 4 modi diversi ma mi si è sempre bloccato il programma.. dai un aiuto all'utenti su come inserirla..
ho fatto anche io come primo programma uno che calcola il codice fiscale.. lo potete trovare qui:
http://darkcoder.altervista.org/php5/codicefiscale/
~FullSyst3m~
05-01-2009, 23:44
ho provato ad inserire la data di nascita in 4 modi diversi ma mi si è sempre bloccato il programma.. dai un aiuto all'utenti su come inserirla..
ho fatto anche io come primo programma uno che calcola il codice fiscale.. lo potete trovare qui:
http://darkcoder.altervista.org/php5/codicefiscale/
Basta semplicemente inserire il numero. Se sei nato il 10/2/1950 basta che metti 10
Comunque primo programma? Ma tu non lavori come programmatore?
Il tuo programma comunque dà errore con il comune
DevilMalak
06-01-2009, 00:53
Funziona ma dovresti fornire qualche indicazione tipo il mese che va inserito come parola infatti inizialmente mi dava errore perché lo inserivo come numero.. :)
Congratulazioni comunque :D
Basta semplicemente inserire il numero. Se sei nato il 10/2/1950 basta che metti 10
Comunque primo programma? Ma tu non lavori come programmatore?
Il tuo programma comunque dà errore con il comune
bè per i comuni ho usato un file già fatto da altri.. le possibili cause potrebbero essere:
- qualche comune è sbagliato
- hai messo lettere accentate
- il tuo comune non è presente
strano, l'ho fatto provare a una 50ina di amici e non ho mai avuto problemi con i comuni.
comunque no, sono in quinta superiore, purtroppo non ho mai lavorato come programmatore. Inoltre l'anno prossimo mi iscirverò all'uni dunque se ne parla tra 5/6 anni :p
EDIT: nemmeno io riesco a far funzionare il tuo. la cosa divertente è che il file dei comuni sembra essere lo stesso mio XD
~FullSyst3m~
06-01-2009, 11:26
bè per i comuni ho usato un file già fatto da altri.. le possibili cause potrebbero essere:
- qualche comune è sbagliato
- hai messo lettere accentate
- il tuo comune non è presente
strano, l'ho fatto provare a una 50ina di amici e non ho mai avuto problemi con i comuni.
comunque no, sono in quinta superiore, purtroppo non ho mai lavorato come programmatore. Inoltre l'anno prossimo mi iscirverò all'uni dunque se ne parla tra 5/6 anni :p
Mi sono fatto ingannare dall'avatar :D
Anche io andrò all'uni il prossimo anno, comunque il comunque c'è eccome, scritto correttamente e senza lettere accentate. Dopo quando ho riprovato mi ha dato errore con la data...
Funziona ma dovresti fornire qualche indicazione tipo il mese che va inserito come parola infatti inizialmente mi dava errore perché lo inserivo come numero..
Congratulazioni comunque
Si si lo so, era solo per farlo vedere, gli darò una sistemata e poi lo metto nel sito. Grazie comunque, ma non è niente di particolare
la data va inserita esattamente come c'è scritto(gg mm aaaa).. strano.. mi mandi i dati che inserisci in pm?
~FullSyst3m~
06-01-2009, 11:34
la data va inserita esattamente come c'è scritto(gg mm aaaa).. strano.. mi mandi i dati che inserisci in pm?
In che linguaggio è scritto il programma?
~FullSyst3m~
06-01-2009, 11:39
PHP
Studiato a scuola? Non mi attira molto sto linguaggio.
P.S: ma tutti questi manuali che vendi li avevi comprati per studiarli o cosa?
guarda neanche a me piace.. comunque no l'ho imparato da solo ma non è che ho usato chissà cosa del php, ho usato le cose base che ha qualsiasi linguaggio quindi avrei potuto usare uno qualunque, solo trovavo più carino vederlo nel web..
~FullSyst3m~
06-01-2009, 11:55
guarda neanche a me piace.. comunque no l'ho imparato da solo ma non è che ho usato chissà cosa del php, ho usato le cose base che ha qualsiasi linguaggio quindi avrei potuto usare uno qualunque, solo trovavo più carino vederlo nel web..
No vabbè l'ho detto cosi. E di tutti quei manuali che mi dici?
che ho comprato un sacco di manuali in questi due anni e mezzo perchè mi sono proprio appassionato, però alla fine solo alcuni ho sfruttato, altri per mancanza di tempo o perchè ho perso interesse non li ho mai neanche aperti :D un po ne ho già venduti e altri invece me li tengo stretti :p
se volete i sorgenti del mio sono qui http://darkcoder.altervista.org/php5/codicefiscale.rar
ma ammetto che sono proprio brutti :D
~FullSyst3m~
06-01-2009, 12:19
che ho comprato un sacco di manuali in questi due anni e mezzo perchè mi sono proprio appassionato, però alla fine solo alcuni ho sfruttato, altri per mancanza di tempo o perchè ho perso interesse non li ho mai neanche aperti :D un po ne ho già venduti e altri invece me li tengo stretti :p
se volete i sorgenti del mio sono qui http://darkcoder.altervista.org/php5/codicefiscale.rar
ma ammetto che sono proprio brutti :D
Non hai visto quelli del mio :D
EDIT: ho guardato i sorgenti: mi sono ricordato ancora di più perchè odio PHP :D Pauroso quante righe di codice ci vogliono. Questo è il sorgente del mio, il primo abbozzo che ho postato qua. Ora inizio a mettere la gestione degli errori, la descrizione dell'interimento dati migliore ecc
tranquillo tanto pare che non ci caghi nessuno :D quindi nessuna brutta figura :O
~FullSyst3m~
06-01-2009, 13:06
tranquillo tanto pare che non ci caghi nessuno :D quindi nessuna brutta figura :O
C'hai proprio ragione :D
CozzaAmara
06-01-2009, 14:09
Carino, non pensavo che il codice per ottenre il codice fiscale fosse così "arzigogolato".
Ma sostanzialmente l'algoritmo per il calcolo del codice (grosso modo) qualè?
Solo un appunto.
Non avendo l'interprete di Python installato ho provato ad eseguire CodiceFiscale.exe ma una frazione di secondo dopo il tentato output dello stesso mi si chiude la shell del programma.
;)
~FullSyst3m~
06-01-2009, 14:20
Carino, non pensavo che il codice per ottenre il codice fiscale fosse così "arzigogolato".
Ma sostanzialmente l'algoritmo per il calcolo del codice (grosso modo) qualè?
Solo un appunto.
Non avendo l'interprete di Python installato ho provato ad eseguire CodiceFiscale.exe ma una frazione di secondo dopo il tentato output dello stesso mi si chiude la shell del programma.
;)
Io ho provato su pc senza Python e non dà problemi. Che problemi ti dà di preciso?
In che senso codice "arzigogolato"?
Comunque qua puoi leggere l'algoritmo http://www.dotnethell.it/articles/calcolocodicefiscale.aspx
CozzaAmara
06-01-2009, 15:46
Io ho provato su pc senza Python e non dà problemi. Che problemi ti dà di preciso?
In che senso codice "arzigogolato"?
Comunque qua puoi leggere l'algoritmo http://www.dotnethell.it/articles/calcolocodicefiscale.aspx
Nel senso che pensavo più semplice, più breve creare uno script per generare codici fiscali, ma non è un riferimento alla qualità del tuo programma quanto più che altro alle regole che stanno dietro la generazione di un codice fiscale.
Il problema è che dopo aver immesso tutti i dati nella shell, mi stampa:
"Il tuo codice fiscale è:"
e poi si chiude subito la finestra.
Boh. ;)
cdimauro
06-01-2009, 15:51
tranquillo tanto pare che non ci caghi nessuno :D quindi nessuna brutta figura :O
Il fatto che non ci siano molti interventi non vuol dire che nessuno guardi il thread. :Perfido:
~FullSyst3m~
06-01-2009, 16:45
Nel senso che pensavo più semplice, più breve creare uno script per generare codici fiscali, ma non è un riferimento alla qualità del tuo programma quanto più che altro alle regole che stanno dietro la generazione di un codice fiscale.
Il problema è che dopo aver immesso tutti i dati nella shell, mi stampa:
"Il tuo codice fiscale è:"
e poi si chiude subito la finestra.
Boh. ;)
Magari ti manca qualche dll, a me non dà nessun problema e nemmeno su altri computer senza Python sui quali ho provato
Il fatto che non ci siano molti interventi non vuol dire che nessuno guardi il thread.
Tu non dici niente riguardo il programma??
Energy++
06-01-2009, 18:55
Magari ti manca qualche dll, a me non dà nessun problema e nemmeno su altri computer senza Python sui quali ho provato
il problema è dovuto al fatto che dopo aver stampato il codice, il programma termina e la finestra si chiude. Prova a metterlo in pausa magari con un os.system("pause") :D
PS. sono kira :D ;)
~FullSyst3m~
06-01-2009, 19:02
il problema è dovuto al fatto che dopo aver stampato il codice, il programma termina e la finestra si chiude. Prova a metterlo in pausa magari con un os.system("pause") :D
PS. sono kira :D ;)
A me non si chiude e nemmeno su altri computer dove ho provato, molto strano. Appena farò le altre modiche metterò un pause
P.S: lo avevo capito :D
P.S2: comunque il discorso della dll è da tenere in considerazione perchè è possibile, su alcuni pc sul quale ho fatto i test faceva la stessa cosa, addirittura si chiudeva subito dopo averlo aperto e alla fine ho scoperto che mancavo delle dll nel pc e le ho dovute registrare a mano ;)
Il primo programma...bella sensazione eh? :)
ho dato una veloce scorsa al codice, ti faccio solo un paio di appunti:
- utilizzi 6 volte una catenona di and o or per capire se una lettera è una consonante o una vocale..perchè non crei una funzione che per esempio ti restituisca true se la lettera passata è una vocale, false altrimenti?
- nella funzione OttieniComune non chiudi il file che apri! Come sicuramente qualcuno potrebbe suggerirti (e a ragione, se mi è permesso dirlo ;) ) potresti utilizzare il with, altrimenti ricordati di chiudere sempre le risorse che apri
- se fossi in te (per allenamento, sono cose che servono sempre!) cercherei di validare in qualche modo gli input in entrata
ho dato una letta veloce, magari mi sono perso qualcosa o non ho capito bene altro, però queste mi sembravano cose utili da far presente! :stordita:
~FullSyst3m~
06-01-2009, 23:24
Il primo programma...bella sensazione eh? :)
ho dato una veloce scorsa al codice, ti faccio solo un paio di appunti:
- utilizzi 6 volte una catenona di and o or per capire se una lettera è una consonante o una vocale..perchè non crei una funzione che per esempio ti restituisca true se la lettera passata è una vocale, false altrimenti?
- nella funzione OttieniComune non chiudi il file che apri! Come sicuramente qualcuno potrebbe suggerirti (e a ragione, se mi è permesso dirlo ;) ) potresti utilizzare il with, altrimenti ricordati di chiudere sempre le risorse che apri
- se fossi in te (per allenamento, sono cose che servono sempre!) cercherei di validare in qualche modo gli input in entrata
ho dato una letta veloce, magari mi sono perso qualcosa o non ho capito bene altro, però queste mi sembravano cose utili da far presente! :stordita:
Ciao e grazie per gli appunti, sono preziosi per me! Rispondo ai tuoi punti:
- utilizzi 6 volte una catenona di and o or per capire se una lettera è una consonante o una vocale..perchè non crei una funzione che per esempio ti restituisca true se la lettera passata è una vocale, false altrimenti?
Hai perfettamente ragione, ma come ho già detto il programma è molto rozzo e l'ho postato appena ho visto che funzionava perchè avevo voglia di farlo vedere, ero troppo eccitato... è il mio primo programma in Python! Come ho ripetuto ora ottimizzerò il codice, infatti non l'ho nemmeno ancora uppato sul mio sito
- nella funzione OttieniComune non chiudi il file che apri! Come sicuramente qualcuno potrebbe suggerirti (e a ragione, se mi è permesso dirlo ) potresti utilizzare il with, altrimenti ricordati di chiudere sempre le risorse che apri
Hai ragione anche qua, quella era una funzione di prova e per la fretta di postare ho dimenticato di chiudere il file. Sarà corretto pure questo ;)
Riguardo il with io non so cosa sia sinceramente, non l'ho studiato e nemmeno incontrato ancora sul libro che ho studiato e su quello che sto studiando attualmente
- se fossi in te (per allenamento, sono cose che servono sempre!) cercherei di validare in qualche modo gli input in entrata
Validare in che senso?
P.S: si, bellissima sensazione il primo programma :)
con "validare" intendo controllare la roba che ti passa in input l'utente. Per esempio se chiedi un giorno controlla che sia compreso tra 1 e 31, altrimenti notifica l'utente che quanto inserito non è corretto! Cose di questo genere
~FullSyst3m~
07-01-2009, 00:24
con "validare" intendo controllare la roba che ti passa in input l'utente. Per esempio se chiedi un giorno controlla che sia compreso tra 1 e 31, altrimenti notifica l'utente che quanto inserito non è corretto! Cose di questo genere
Ah capito, quello che pensavo allora. Bè sull'anno l'ho fatto, poi lo farò anche sugli altri parametri ;)
banryu79
07-01-2009, 10:38
E' sempre piacevole vedere qualcuno che ricava soddisfazione da quello che fa.
Bravo Full, continua così.
~FullSyst3m~
07-01-2009, 11:21
E' sempre piacevole vedere qualcuno che ricava soddisfazione da quello che fa.
Bravo Full, continua così.
Ciao banryu :) E' bello rivederti in giro
~FullSyst3m~
07-01-2009, 13:58
Ho capito il problema della chiusura prematura della finestra. Fa cosi quando il programma si apre con il doppio clic, perchè se si apre da linea di comando non dà nessun problema. Correggerò il "bug" comunque ;)
PS: Torav, hai parlato di with riguardo la chiusura del file poco sopra, che funzione ha?
qua (http://effbot.org/zone/python-with-statement.htm) è spiegato decentemente. In pratica (tra le altre cose) ti permette di aprire un file e utilizzarlo senza preoccuparsi di chiuderlo: viene chiuso automaticamente anche se vengono generate eccezioni. Ad esempio si può fare
with open("myfile.txt", "r") as f:
dati = f.read()
~FullSyst3m~
07-01-2009, 19:37
qua (http://effbot.org/zone/python-with-statement.htm) è spiegato decentemente. In pratica (tra le altre cose) ti permette di aprire un file e utilizzarlo senza preoccuparsi di chiuderlo: viene chiuso automaticamente anche se vengono generate eccezioni. Ad esempio si può fare
with open("myfile.txt", "r") as f:
dati = f.read()
Interessante, grazie. Probabilmente lo troverò nel tutorial ufficiale che sto studiando
Non mi fa scaricare il programmino. Peccato perché mi sarebbe piaciuto dare un occhiata a quello che hai scritto. :)
~FullSyst3m~
08-01-2009, 00:40
Non mi fa scaricare il programmino. Peccato perché mi sarebbe piaciuto dare un occhiata a quello che hai scritto. :)
Maledetto rapidshare. Dato che sto facendo alcune correzioni appena finisco lo riuppo su megaupload ;)
cdimauro
08-01-2009, 07:22
Interessante, grazie. Probabilmente lo troverò nel tutorial ufficiale che sto studiando
Attenzione che se usi Python 2.5 devi mettere questa:
from __future__ import with_statement
prima di usare l'istruzione with.
Da Python 2.6 in poi, invece, è già disponibile. ;)
~FullSyst3m~
08-01-2009, 11:29
Attenzione che se usi Python 2.5 devi mettere questa:
from __future__ import with_statement
prima di usare l'istruzione with.
Da Python 2.6 in poi, invece, è già disponibile. ;)
Ok grazie. Comunque ancora non mi hai detto nulla riguardo al programma :(
cdimauro
08-01-2009, 13:13
Perché non ho avuto tempo e l'hanno fatto gli altri. Aspetto le successive evoluzioni. ;)
~FullSyst3m~
08-01-2009, 13:27
Perché non ho avuto tempo e l'hanno fatto gli altri. Aspetto le successive evoluzioni. ;)
Ok :)
~FullSyst3m~
08-01-2009, 21:23
Ecco qua http://fullproduction.altervista.org/index.php?mod=Download/Programmi_%7EFullsyst3m%7E_e_varie#CF1.0.rar
CozzaAmara
09-01-2009, 19:14
Ciao, sono riuscito ad eseguire il programma ma il codice fiscale che mi generà è sbagliato su due valori.
Se ti interessa ti metto i miei dati in PVT così puoi controllare. ;)
~FullSyst3m~
09-01-2009, 19:25
Ciao, sono riuscito ad eseguire il programma ma il codice fiscale che mi generà è sbagliato su due valori.
Se ti interessa ti metto i miei dati in PVT così puoi controllare. ;)
Ti ho mandato pvt. Comunque molto strano, ne ho provati un bel pò di codici fiscali, ma non ho mai avuto problemi
wingman87
10-01-2009, 01:52
Attenzione che se usi Python 2.5 devi mettere questa:
from __future__ import with_statement
prima di usare l'istruzione with.
Bellissimo, ma come fa? Cioè, se ha installato la 2.5 da dove prende una feature della 2.6? Internet? Magari è una domanda stupida ma non conoscendo niente di python chiedo...
cdimauro
10-01-2009, 05:11
Non ti preoccupare: la domanda è legittima e perfettamente sensata proprio perché non conosci come funziona Python. :)
L'istruzione with è presente "nativamente" in Python 2.6, nel senso che... basta semplicemente usarla.
Ma è presente anche in Python 2.5, solo che non è immediatamente accessibile, perché PRIMA bisogna usare l'istruzione che ho riportato.
Perché non metterla subito a disposizione? Per non rompere la compatibilità con le applicazioni scritte con la precedente versione di Python. La compatibilità verrebbe meno, perché per usare l'istruzione with è necessario introdurre due keyword ("with" e "as"), e se un programma utilizza già almeno uno di questi due termini come identificatore, il compilatore darebbe errore di sintassi.
Invece facendo in modo di abilitare all'occorrenza l'uso dell'istruzione, si permette a chi passa da Python 2.4 a 2.5 di testare selettivamente il proprio codice, in previsione poi di portarlo alla 2.6, dove le keyword diventeranno preimpostate.
Ricapitolando: con la 2.5 ho una nuova caratteristica che diventerà standard nelle versioni successive (e di cui, quindi, si dovrà per forza di cose tener conto). Io la posso usare nei programmi, a patto di abilitarla. L'abilito e testo che tutte le mie applicazioni non diano problemi. In questo modo il passaggio alla 2.6 sarà praticamente indolore.
Spero di essere stato chiaro. Eventualmente, chiedi pure. ;)
~FullSyst3m~
10-01-2009, 12:04
Non ti preoccupare: la domanda è legittima e perfettamente sensata proprio perché non conosci come funziona Python. :)
L'istruzione with è presente "nativamente" in Python 2.6, nel senso che... basta semplicemente usarla.
Ma è presente anche in Python 2.5, solo che non è immediatamente accessibile, perché PRIMA bisogna usare l'istruzione che ho riportato.
Perché non metterla subito a disposizione? Per non rompere la compatibilità con le applicazioni scritte con la precedente versione di Python. La compatibilità verrebbe meno, perché per usare l'istruzione with è necessario introdurre due keyword ("with" e "as"), e se un programma utilizza già almeno uno di questi due termini come identificatore, il compilatore darebbe errore di sintassi.
Invece facendo in modo di abilitare all'occorrenza l'uso dell'istruzione, si permette a chi passa da Python 2.4 a 2.5 di testare selettivamente il proprio codice, in previsione poi di portarlo alla 2.6, dove le keyword diventeranno preimpostate.
Ricapitolando: con la 2.5 ho una nuova caratteristica che diventerà standard nelle versioni successive (e di cui, quindi, si dovrà per forza di cose tener conto). Io la posso usare nei programmi, a patto di abilitarla. L'abilito e testo che tutte le mie applicazioni non diano problemi. In questo modo il passaggio alla 2.6 sarà praticamente indolore.
Spero di essere stato chiaro. Eventualmente, chiedi pure. ;)
Chiaro come sempre :D
~FullSyst3m~
10-01-2009, 12:23
Versione corretta (grazie a CozzaAmara per la segnalazione):
http://fullproduction.altervista.org/index.php?mod=Download/Programmi_%7EFullsyst3m%7E_e_varie#CF1.1.rar
sorgenti in allegato al messaggio ;)
wingman87
10-01-2009, 13:07
Spero di essere stato chiaro. Eventualmente, chiedi pure. ;)
Chiarissimo, è una bella idea.
Ho dato un occhiata veloce al sorgente.
- Controlla l'input che ti da l'utente. Io userei row_input anche per le date.
- Nella funzione VoaliIn c'è un if piuttosto grande. Se non ricordo male conosci un po' le espressioni regolari perché non usi quelle?
- La funzione ControlloVocali può essere scritta usando la funzione VocaliIn
- In OttieniAnno sei sicuro che ti servano tutte quelle variabili. Non puoi usare Anno e fare direttamente return?
- In OttieniMese la upper la puoi fare direttamente nella get non serve assegnarla alla variabile
- "pause" non è portabile. secondo me ti conviene trovare un altro metodo per mettere in pausa.
~FullSyst3m~
10-01-2009, 15:28
- Controlla l'input che ti da l'utente. Io userei row_input anche per le date.
Avevo pensato di farlo, ma poi non mi sembrava molto "elegante". Alla fine comunque lo posso fare per comodità, devo sempre converitre Anno e Giorno
- Nella funzione VoaliIn c'è un if piuttosto grande. Se non ricordo male conosci un po' le espressioni regolari perché non usi quelle?
Ricordi abbastanza male perchè ho visto solo l'esempio di una espressione regolare sul libro (nemmeno spiegato), ma non le ho mai usate, non le conosco. Dovrò documentarmi
- La funzione ControlloVocali può essere scritta usando la funzione VocaliIn
Corretto
- In OttieniAnno sei sicuro che ti servano tutte quelle variabili. Non puoi usare Anno e fare direttamente return?
Corretto
- In OttieniMese la upper la puoi fare direttamente nella get non serve assegnarla alla variabile
Non me li fa diventare maiuscoli i caratteri in quel modo e di conseguenza il get mi ritorna None
- "pause" non è portabile. secondo me ti conviene trovare un altro metodo per mettere in pausa.
Lo so, infatti cercherò qualcosa di portabile
Grazie per i consigli, mi sono sempre molto utili ;)
EDIT: allego la versione con le migliorie suggerite da VICIUS
CozzaAmara
11-01-2009, 09:44
Ciao, non per rompere le balle ma ho scaricato la tua versione 1.1 e:
- Il programma inizia con la dicitura "v1.0"
- Il codice generato è ancora sbagliato (più di prima)
- Una volta eseguito e chiusa la shell non posso (almeno io) eliminare la cartella estretta su Win Vista perchè mi dice che il programma è IN USO.
Posto che potrebbe anche essere un problema dell'OS ma ti consiglio di darci un'occhiata.
Bye. ;)
Ciao, non per rompere le balle ma ho scaricato la tua versione 1.1 e:
- Il programma inizia con la dicitura "v1.0"
- Il codice generato è ancora sbagliato (più di prima)
- Una volta eseguito e chiusa la shell non posso (almeno io) eliminare la cartella estretta su Win Vista perchè mi dice che il programma è IN USO.
Posto che potrebbe anche essere un problema dell'OS ma ti consiglio di darci un'occhiata.
Bye. ;)
succede la stessa cosa anche a me su vista :p
ora per quanto riguarda il risultato è tutto a posto lo da corretto :)
Il codice non lo calcola nemmeno, crasha il programma :O
Traceback (most recent call last):
File "CodiceFiscale.py", line 157, in <module>
print "Il tuo codice fiscale e': " + CFParziale() + CarattereDiControllo()
File "CodiceFiscale.py", line 147, in CarattereDiControllo
Somma = CaratteriPari() + CaratteriDispari()
File "CodiceFiscale.py", line 143, in CaratteriDispari
Controllo += ControlloDispari.get(i)
TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'
~FullSyst3m~
11-01-2009, 14:19
Ciao, non per rompere le balle ma ho scaricato la tua versione 1.1 e:
- Il programma inizia con la dicitura "v1.0"
- Il codice generato è ancora sbagliato (più di prima)
- Una volta eseguito e chiusa la shell non posso (almeno io) eliminare la cartella estretta su Win Vista perchè mi dice che il programma è IN USO.
Posto che potrebbe anche essere un problema dell'OS ma ti consiglio di darci un'occhiata.
Bye. ;)
Il fatto della versione è una cretinata, poi lo sistemo. Per quanto riguarda il codice fiscale io prima di upparlo ho provato a fare proprio il tuo e me lo dava corretto. Ti linko l'immagine in privato.
E per la chiusura a me non dà nessun problema, magari è Vista. Prima vedo di risolvere gli altri
Il codice non lo calcola nemmeno, crasha il programma
Ho provato e riprovato e non mi dà nessun tipo di errore. :confused:
MacOS.X 10.5.6 Test:
bash$ python /Users/***/Desktop/CodiceFiscale.py
Calcolo del codice fiscale
V1.0
sh: pause: command not found
Inserisci il tuo cognome: *******
Inserisci il tuo nome: marlon
Inserisci il tuo sesso(M/F): m
Inserisci il giorno della tua nascita(es.10): 14
Inserisci il tuo mese di nascita(es.Marzo): ottobre
Inserisci il tuo anno di nascita(es.1988): 1987
Inserisci il tuo comune di nascita: rovereto
Traceback (most recent call last):
File "/Users/***/Desktop/CodiceFiscale.py", line 157, in <module>
print "Il tuo codice fiscale e': " + CFParziale() + CarattereDiControllo()
File "/Users/***/Desktop/CodiceFiscale.py", line 117, in CFParziale
OttieniMese(Mese) + OttieniGiorno(Giorno, Sesso) + OttieniComune(Comune)
File "/Users/***/Desktop/CodiceFiscale.py", line 104, in OttieniComune
f = open("CODcomuni.txt")
IOError: [Errno 2] No such file or directory: 'CODcomuni.txt'
E il file CODcomuni.txt c'è.. L'ho scaricato a parte dal pacchetto da altervista.. :D
Io l'ho provato su macos, ma magari non l'avevi pensato per quest'os.. vedendo he ci son degli exe nel rar.. XD
~FullSyst3m~
11-01-2009, 17:38
MacOS.X 10.5.6 Test:
bash$ python /Users/***/Desktop/CodiceFiscale.py
Calcolo del codice fiscale
V1.0
sh: pause: command not found
Inserisci il tuo cognome: *******
Inserisci il tuo nome: marlon
Inserisci il tuo sesso(M/F): m
Inserisci il giorno della tua nascita(es.10): 14
Inserisci il tuo mese di nascita(es.Marzo): ottobre
Inserisci il tuo anno di nascita(es.1988): 1987
Inserisci il tuo comune di nascita: rovereto
Traceback (most recent call last):
File "/Users/***/Desktop/CodiceFiscale.py", line 157, in <module>
print "Il tuo codice fiscale e': " + CFParziale() + CarattereDiControllo()
File "/Users/***/Desktop/CodiceFiscale.py", line 117, in CFParziale
OttieniMese(Mese) + OttieniGiorno(Giorno, Sesso) + OttieniComune(Comune)
File "/Users/***/Desktop/CodiceFiscale.py", line 104, in OttieniComune
f = open("CODcomuni.txt")
IOError: [Errno 2] No such file or directory: 'CODcomuni.txt'
E il file CODcomuni.txt c'è.. L'ho scaricato a parte dal pacchetto da altervista.. :D
Io l'ho provato su macos, ma magari non l'avevi pensato per quest'os.. vedendo he ci son degli exe nel rar.. XD
Ciao, mi stai confermando quello di cui sto parlando proprio ora con VICIUS in pvt (anche lui usa MAC): probabilmente ci sono dei problemi di portabilità.
Io uso linux e sono andato su win per creare l'exe, ma il programma funziona sia su win che su linux. Dovrò chiedere a cdimauro appena si fa vedere oppure gli mando un privato e vediamo se ne sa qualcosa ;)
P.S: domanda banale: il file CODComuni è nella stessa cartella dell'eseguibile giusto?
Si, è nella stessa cartella..
Domanda: per hie versione di python è pensato? Sul mac abbiamo (su OS.X .5.6) la 2.5.1.. Magari l'hai sviluppato un un versione successiva.. Comunque strano a me 90% di ciò che funziona su GNU/Linux non ha problemi su OS.X...
~FullSyst3m~
12-01-2009, 11:57
Si, è nella stessa cartella..
Domanda: per hie versione di python è pensato? Sul mac abbiamo (su OS.X .5.6) la 2.5.1.. Magari l'hai sviluppato un un versione successiva.. Comunque strano a me 90% di ciò che funziona su GNU/Linux non ha problemi su OS.X...
E' sviluppato con Python 2.5. A me su linux va... dobbiamo fare qualche test
^TiGeRShArK^
13-01-2009, 11:36
se ti interessa io l'ho scritto in ruby..
se vuoi vedere come l'ho fatto lo posto...
~FullSyst3m~
13-01-2009, 12:03
se ti interessa io l'ho scritto in ruby..
se vuoi vedere come l'ho fatto lo posto...
Si certo, posta ;)
^TiGeRShArK^
13-01-2009, 19:02
ecchilo qui:
months = {1 => 'A', 2 => 'B', 3 => 'C', 4 => 'D', 5 => 'E', 6 => 'H', 7 => 'L', 8 => 'M', 9 => 'P', 10 => 'R', 11 => 'S', 12 => 'T'}
even = {'0' => 1, '1' => 0, '2' => 5, '3' => 7, '4' => 9, '5' => 13, '6' => 15, '7' => 17, '8' => 19, '9' => 21, 'A' => 1, 'B' => 0, 'C' => 5, 'D' => 7, 'E' => 9, 'F' => 13, 'G' => 15, 'H' => 17, 'I' => 19, 'J' => 21, 'K' => 2, 'L' => 4, 'M' => 18, 'N' => 20, 'O' => 11, 'P' => 3, 'Q' => 6, 'R' => 8, 'S' => 12, 'T' => 14, 'U' => 16, 'V' => 10, 'W' => 22, 'X' => 25, 'Y' => 24, 'Z' => 23}
odd = {}
for i in 0 .. 9
odd[i.to_s] = i
end
for i in 65 .. 90
odd[i.chr] = i - 65
end
def get(message)
puts message
gets.chop.upcase.gsub(' ', '')
end
def divide(word)
vowels = %w'A E I O U'
word = word.split('')
[(word - vowels).to_s, (word - (word - vowels)).to_s]
end
cityCodes = {}
File.open('CodiciComuni.txt').each { |line|
splitted = line.split
cityCodes[splitted[1 .. -1].to_s.strip] = splitted[0]
}
fiscalCode = ''
surname = get 'Inserisci Cognome:'
name = get 'Inserisci nome:'
sex = get 'Inserisci sesso (M/F):'
city = get 'Inserisci Comune di nascita:'
data = get 'Inserisci Data di nascita (gg/mm/aaaa):'
surnameConsonants, surnameVowels = divide(surname)
if surnameConsonants.length > 2
fiscalCode = surnameConsonants[0, 3]
elsif surname.length > 2
fiscalCode = surnameConsonants + surnameVowels[0 .. (2 - surnameConsonants.length)]
else
fiscalCode = surnameConsonants + surnameVowels + 'X' * (3 - surname.length)
end
nameConsonants, nameVowels = divide(name)
if name.length < 3
fiscalCode += nameConsonants + nameVowels + 'X' * (3 - name.length)
elsif nameConsonants.length > 3
fiscalCode += nameConsonants[0 .. 0] + nameConsonants[2 .. 3]
elsif nameConsonants.length == 3
fiscalCode += nameConsonants
else
fiscalCode += nameConsonants + nameVowels[0 .. (2 - nameConsonants.length)]
end
day = data[0, 2].to_i
month = data[3, 5].to_i
year = data[-2 .. -1]
if sex == 'F'
day += 40
end
fiscalCode += year + months[month] + day.to_s + cityCodes[city.upcase.strip]
checksum = 0
for i in 0 .. fiscalCode.length - 1
if i % 2 == 0
checksum += even[fiscalCode[i].chr]
else
checksum += odd[fiscalCode[i].chr]
end
end
fiscalCode += (65 + checksum % 26).chr
puts fiscalCode.to_s
inutile dire che + uso ruby e + mi piace rispetto a python...
non mi va proprio giù quella sintassi, mentre quella di ruby si avvicina di + al mio modo di pensare :p
questo (http://rapidshare.com/files/182883058/CodiciComuni.zip.html) è il file dei codici dei comuni.
ah... inutile dire che ho provato anche a farlo in c# ed è MOLTO + complesso.. :mbe:
ovviamente non ho messo nessun controllo perchè mi fido dell'utente :O (diciamo che mi rompevo le balle :asd: )
~FullSyst3m~
13-01-2009, 19:09
ecchilo qui:
months = {1 => 'A', 2 => 'B', 3 => 'C', 4 => 'D', 5 => 'E', 6 => 'H', 7 => 'L', 8 => 'M', 9 => 'P', 10 => 'R', 11 => 'S', 12 => 'T'}
even = {'0' => 1, '1' => 0, '2' => 5, '3' => 7, '4' => 9, '5' => 13, '6' => 15, '7' => 17, '8' => 19, '9' => 21, 'A' => 1, 'B' => 0, 'C' => 5, 'D' => 7, 'E' => 9, 'F' => 13, 'G' => 15, 'H' => 17, 'I' => 19, 'J' => 21, 'K' => 2, 'L' => 4, 'M' => 18, 'N' => 20, 'O' => 11, 'P' => 3, 'Q' => 6, 'R' => 8, 'S' => 12, 'T' => 14, 'U' => 16, 'V' => 10, 'W' => 22, 'X' => 25, 'Y' => 24, 'Z' => 23}
odd = {}
for i in 0 .. 9
odd[i.to_s] = i
end
for i in 65 .. 90
odd[i.chr] = i - 65
end
def get(message)
puts message
gets.chop.upcase.gsub(' ', '')
end
def divide(word)
vowels = %w'A E I O U'
word = word.split('')
[(word - vowels).to_s, (word - (word - vowels)).to_s]
end
cityCodes = {}
File.open('CodiciComuni.txt').each { |line|
splitted = line.split
cityCodes[splitted[1 .. -1].to_s.strip] = splitted[0]
}
fiscalCode = ''
surname = get 'Inserisci Cognome:'
name = get 'Inserisci nome:'
sex = get 'Inserisci sesso (M/F):'
city = get 'Inserisci Comune di nascita:'
data = get 'Inserisci Data di nascita (gg/mm/aaaa):'
surnameConsonants, surnameVowels = divide(surname)
if surnameConsonants.length > 2
fiscalCode = surnameConsonants[0, 3]
elsif surname.length > 2
fiscalCode = surnameConsonants + surnameVowels[0 .. (2 - surnameConsonants.length)]
else
fiscalCode = surnameConsonants + surnameVowels + 'X' * (3 - surname.length)
end
nameConsonants, nameVowels = divide(name)
if name.length < 3
fiscalCode += nameConsonants + nameVowels + 'X' * (3 - name.length)
elsif nameConsonants.length > 3
fiscalCode += nameConsonants[0 .. 0] + nameConsonants[2 .. 3]
elsif nameConsonants.length == 3
fiscalCode += nameConsonants
else
fiscalCode += nameConsonants + nameVowels[0 .. (2 - nameConsonants.length)]
end
day = data[0, 2].to_i
month = data[3, 5].to_i
year = data[-2 .. -1]
if sex == 'F'
day += 40
end
fiscalCode += year + months[month] + day.to_s + cityCodes[city.upcase.strip]
checksum = 0
for i in 0 .. fiscalCode.length - 1
if i % 2 == 0
checksum += even[fiscalCode[i].chr]
else
checksum += odd[fiscalCode[i].chr]
end
end
fiscalCode += (65 + checksum % 26).chr
puts fiscalCode.to_s
inutile dire che + uso ruby e + mi piace rispetto a python...
non mi va proprio giù quella sintassi, mentre quella di ruby si avvicina di + al mio modo di pensare :p
questo (http://rapidshare.com/files/182883058/CodiciComuni.zip.html) è il file dei codici dei comuni.
ah... inutile dire che ho provato anche a farlo in c# ed è MOLTO + complesso.. :mbe:
ovviamente non ho messo nessun controllo perchè mi fido dell'utente :O (diciamo che mi rompevo le balle :asd: )
Io invece più uso Python e più mi piace rispetto a Ruby. Cosa è che non ti piace di Python?
Comunque in qualunque altro linguaggio sarebbe più complesso, non solo in C#. Ma questo linguaggio comunque mi attira non poco..
^TiGeRShArK^
13-01-2009, 20:31
Io invece più uso Python e più mi piace rispetto a Ruby. Cosa è che non ti piace di Python?
Comunque in qualunque altro linguaggio sarebbe più complesso, non solo in C#. Ma questo linguaggio comunque mi attira non poco..
la sintassi in generale...
e comunque ruby in questo caso era + simpatico perchè permette di fare l'operazione di sottrazione tra due tuple semplicemente usando l'operatore - che python mi pare non te lo faccia fare (anche se qui forse ci vorrebbe il parere di Cesare) :p
~FullSyst3m~
13-01-2009, 21:00
la sintassi in generale...
e comunque ruby in questo caso era + simpatico perchè permette di fare l'operazione di sottrazione tra due tuple semplicemente usando l'operatore - che python mi pare non te lo faccia fare (anche se qui forse ci vorrebbe il parere di Cesare) :p
Io fino ad ora non ho incontrato la sottrazione di tuple. Ma in ogni caso ogni linguaggi ha i suoi pregi e i suoi difetti. Di certo c'è che sia Ruby che Python sono due ottimi linguaggi
P.S: ma dove è la sottrazione di tuple nel tuo codice?
P.S2: ma lo hai scritto da poco il codice fiscale o lo avevi già scritto?
^TiGeRShArK^
13-01-2009, 21:46
qui c'è la sottrazione tra tuple:
def divide(word)
vowels = %w'A E I O U'
word = word.split('')
[(word - vowels).to_s, (word - (word - vowels)).to_s]
end
è una funzione che tramite la sottrazione tra tuple restituisce le consonanti e le vocali di una parola...
L'ho scritto la settimana scorsa quando ho visto il tuo thread e mi è venuto l'idea di vedere come usciva con ruby :p
~FullSyst3m~
13-01-2009, 22:17
qui c'è la sottrazione tra tuple:
def divide(word)
vowels = %w'A E I O U'
word = word.split('')
[(word - vowels).to_s, (word - (word - vowels)).to_s]
end
è una funzione che tramite la sottrazione tra tuple restituisce le consonanti e le vocali di una parola...
L'ho scritto la settimana scorsa quando ho visto il tuo thread e mi è venuto l'idea di vedere come usciva con ruby :p
Molto interessante questa funzione, io ho dovuto scrivere un pò di codice per ottenere consonanti e vocali.
Non vorrei dire una sciocchezza, ma sia nel primo libro che ho studiato sia adesso sul tutorial ufficiale, quando si parla di tuple non si accenna minimamente alla sottrazione, quindi credo che non si possa fare :rolleyes:
P.S: sembra arabo quel sorgente tra i nomi inglesi e la sintassi di ruby che non conosco :D vowels mi sa tanto di un titolo di film di Tarantino :asd:
^TiGeRShArK^
13-01-2009, 22:37
sono le vocali... :stordita:
è che quando programmo mi viene meglio scrivere in inglse...
se lo leggi in inglese è chiarissimo, forse l'unica cosa non troppo chiara è il word.split('') che mi serve per trasformare una stringa in una tupla di caratteri...
Per il resto mi creo una tupla che contiene le 5 vocali, converto la stringa in tupla e restituisco la parola priva delle vocali e la parola priva delle consonanti appena ricavate...
a me sembra abbastanza semplice :p
perchè permette di fare l'operazione di sottrazione tra due tuple
Puoi convertire qualsiasi oggetto che supporta l'iterator protocol in un insieme ;)
http://docs.python.org/library/stdtypes.html#set
^TiGeRShArK^
13-01-2009, 22:40
Puoi convertire qualsiasi oggetto che supporta l'iterator protocol in un insieme ;)
http://docs.python.org/library/stdtypes.html#set
si, ma gli insiemi nel nostro caso non vanno bene perchè non contengono duplicati, mentre ad esempio nel nome "vattelapesca" avremo due t come consonanti e convertendolo in un insieme ne perderemmo una sbagliando il codice fiscale :p
In questo caso la soluzione è:
word = ''.join( [ x for x in word if x not in vowels ] )
Secondo me, molto meglio della controparte in Ruby :-P
[(word - vowels).to_s, (word - (word - vowels)).to_s]
Carino ma secondo me fai prima ad usare word.delete('aeiou') e word.delete('^aeiou').
fiscalCode = surnameConsonants + surnameVowels + 'X' * (3 - surname.length)
Se devi appendere delle X usa ljust così ti risparmi tutti i conti.
if sex == 'F'
day += 40
end
Quì è questione di gusti ma io in ruby preferisco scrivere questi if semplici così:
day += 40 if sex == 'F'
for i in 0 .. fiscalCode.length - 1
Aggiungi un altro punto e ti risparmi il -1
if i % 2 == 0
Dovrebbe esserci anche in ruby 1.8 la funzione .even? per i Fixnum così salti l'operazione in modulo e il confronto
~FullSyst3m~
13-01-2009, 23:56
In questo caso la soluzione è:
word = ''.join( [ x for x in word if x not in vowels ] )
Secondo me, molto meglio della controparte in Ruby :-P
Non sapevo conoscessi Python nico :)
Carino ma secondo me fai prima ad usare word.delete('aeiou') e word.delete('^aeiou').
Se devi appendere delle X usa ljust così ti risparmi tutti i conti.
Quì è questione di gusti ma io in ruby preferisco scrivere questi if semplici così:
day += 40 if sex == 'F'
Aggiungi un altro punto e ti risparmi il -1
Dovrebbe esserci anche in ruby 1.8 la funzione .even? per i Fixnum così salti l'operazione in modulo e il confronto
Le ultime parole famose: VICIUS non sapevo conoscessi Ruby :asd:
^TiGeRShArK^
14-01-2009, 00:10
In questo caso la soluzione è:
word = ''.join( [ x for x in word if x not in vowels ] )
Secondo me, molto meglio della controparte in Ruby :-P
a me piace molto di + word - vowels rispetto ad un ciclo for rivoltato e compresso con dentro un if.
Per me quello è assolutamente illeggibile, e sono sicurissimo di non essere l'unico qui dentro (cionci, fek? :p).
Inoltre il consiglio di vicius mi pare ancora migliore della mia soluzione. :D
Carino ma secondo me fai prima ad usare word.delete('aeiou') e word.delete('^aeiou').
Se devi appendere delle X usa ljust così ti risparmi tutti i conti.
Quì è questione di gusti ma io in ruby preferisco scrivere questi if semplici così:
day += 40 if sex == 'F'
Aggiungi un altro punto e ti risparmi il -1
Dovrebbe esserci anche in ruby 1.8 la funzione .even? per i Fixnum così salti l'operazione in modulo e il confronto
tnx per i consigli :p
Almeno ogni tanto imparo qualcosa di nuovo...
diciamo che lo toccherò due - tre volte l'anno ruby... e infatti si vede che è la pratica che mi manca... :stordita:
Un modo + leggibile di trasformare una stringa in tupla non esiste? :fiufiu:
~FullSyst3m~
14-01-2009, 00:31
a me piace molto di + word - vowels rispetto ad un ciclo for rivoltato e compresso con dentro un if.
Per me quello è assolutamente illeggibile, e sono sicurissimo di non essere l'unico qui dentro (cionci, fek? :p).
Inoltre il consiglio di vicius mi pare ancora migliore della mia soluzione. :D
tnx per i consigli :p
Almeno ogni tanto imparo qualcosa di nuovo...
diciamo che lo toccherò due - tre volte l'anno ruby... e infatti si vede che è la pratica che mi manca... :stordita:
Un modo + leggibile di trasformare una stringa in tupla non esiste? :fiufiu:
E menomale che lo tocchi solo 2 - 3 volte l'anno eh :D
^TiGeRShArK^
14-01-2009, 07:18
E menomale che lo tocchi solo 2 - 3 volte l'anno eh :D
e infatti ci ho messo un bel pò a farlo... penso 3 - 4 ore...
avessi conosciuto meglio il linguaggio ci avrei messo molto meno....
cdimauro
14-01-2009, 07:21
la sintassi in generale...
e comunque ruby in questo caso era + simpatico perchè permette di fare l'operazione di sottrazione tra due tuple semplicemente usando l'operatore - che python mi pare non te lo faccia fare (anche se qui forse ci vorrebbe il parere di Cesare) :p
Sono di volata (purtroppo sono incasinatissimo). L'operatore di sottrazione lo puoi ridefinire anche in Python, ma subclassando la classe tupla.
x Nico: puoi togliere le parentesi dalla join. ;)
^TiGeRShArK^
14-01-2009, 07:46
Sono di volata (purtroppo sono incasinatissimo). L'operatore di sottrazione lo puoi ridefinire anche in Python, ma subclassando la classe tupla.
x Nico: puoi togliere le parentesi dalla join. ;)
appunto quindi di default non c'è già implementato :p
allora non mi era sfuggito :D
Un modo + leggibile di trasformare una stringa in tupla non esiste? :fiufiu:
La split non è male dai. Sulla 1.9 puoi usare word.chars.to_a che è un po' più chiaro. Se non ti basta puoi sempre aggiungere una funzione a String ;)
~FullSyst3m~
14-01-2009, 12:18
e infatti ci ho messo un bel pò a farlo... penso 3 - 4 ore...
avessi conosciuto meglio il linguaggio ci avrei messo molto meno....
Io l'ho fatto in 3 giorni mettendomici 15 minuti al giorno (ho il tutorial ufficiale che non posso abbandonare :D). Mi consolo allora :D
Sono di volata (purtroppo sono incasinatissimo).
Tanto per cambiare :p Ma cerco io di prendere il tuo posto non preoccuparti (o forse è meglio che ti preoccupi :asd:)
L'operatore di sottrazione lo puoi ridefinire anche in Python, ma subclassando la classe tupla.
Quindi è come ho detto io. Di default non c'è e si deve fare l'overloading. Oh ma stamattina che bel risveglio... fosse sempre cosi :stordita:
x Nico: puoi togliere le parentesi dalla join.
Conosci pure ruby??
La split non è male dai. Sulla 1.9 puoi usare word.chars.to_a che è un po' più chiaro. Se non ti basta puoi sempre aggiungere una funzione a String
String è un modulo?
^TiGeRShArK^
14-01-2009, 12:41
String è un modulo?
no, una classe.
Però è possibile aggiungere al runtime dei metodi nelle varie classi..
si può fare anche per python anche se non so come :p
Con ruby è una cavolata... anche se ora non mi ricordo + come si fa.. :fagiano:
^TiGeRShArK^
14-01-2009, 12:43
La split non è male dai. Sulla 1.9 puoi usare word.chars.to_a che è un po' più chiaro. Se non ti basta puoi sempre aggiungere una funzione a String ;)
ecco, word.chars.to_a già è + leggibile :p
però mi sa che ancora sto usando la 1.8.6, dato che usavo il jruby fornito con netbeans 6.5 ... mi sa che devo scaricare la versione nuova (che tra l'altro ho visto che ha degli incrementi prestazionali della madonna in certe situazioni :D)
~FullSyst3m~
14-01-2009, 12:55
no, una classe.
Però è possibile aggiungere al runtime dei metodi nelle varie classi..
si può fare anche per python anche se non so come :p
Con ruby è una cavolata... anche se ora non mi ricordo + come si fa.. :fagiano:
Potresti spiegarti meglio?
ecco, word.chars.to_a già è + leggibile :p
però mi sa che ancora sto usando la 1.8.6, dato che usavo il jruby fornito con netbeans 6.5 ... mi sa che devo scaricare la versione nuova (che tra l'altro ho visto che ha degli incrementi prestazionali della madonna in certe situazioni :D)
È mooolto più veloce. Ora anche quelli ror si sono svegliati e le prossime release, dalla 3 in poi, saranno per un po' incentrate sulle performance invece di aggiungere, aggiungere, aggiungere...
x Nico: puoi togliere le parentesi dalla join.
...non ho capito :stordita:
~FullSyst3m~
14-01-2009, 13:20
...non ho capito :stordita:
word = ''.join(x for x in word if x not in vowels)
word = ''.join(x for x in word if x not in vowels)
Con la 2.5 non va :fagiano:
~FullSyst3m~
14-01-2009, 13:29
Con la 2.5 non va :fagiano:
Ma stiamo parlando di Python o Ruby? Non ci sto capendo più una mazza
variabilepippo
14-01-2009, 13:30
Con Python 2.6
vowels = "aeiou"
word = "Supercalifragilistichespiralidoso"
print ''.join(x for x in word if x not in vowels)
stampa
Sprclfrglstchsprlds
~FullSyst3m~
14-01-2009, 13:43
Con Python 2.6
vowels = "aeiou"
word = "Supercalifragilistichespiralidoso"
print ''.join(x for x in word if x not in vowels)
stampa
Sprclfrglstchsprlds
Io non avevi mai usato questa sintassi. Perchè la stringa vuota prima di .join? E quell'x prima di for x in word sarebbe una cosa simile a:
for x in word:
if x not in vowels:
print x
o sbaglio?
^TiGeRShArK^
14-01-2009, 15:58
Potresti spiegarti meglio?
intendevo questo:
http://www.devsource.com/c/a/Languages/An-Exercise-in-Metaprogramming-with-Ruby/1/
Permette di creare una classe dal nulla al runtime e di aggiungergli tutte le variabili e i metodi che si vogliono...
Praticamente scrivi codice che scrive del codice....
~FullSyst3m~
14-01-2009, 18:02
intendevo questo:
http://www.devsource.com/c/a/Languages/An-Exercise-in-Metaprogramming-with-Ruby/1/
Permette di creare una classe dal nulla al runtime e di aggiungergli tutte le variabili e i metodi che si vogliono...
Praticamente scrivi codice che scrive del codice....
Ancora in Python non l'ho incontrato.
Ma a runtime non vuol dire al momento dell'esecuzione?
Ancora in Python non l'ho incontrato.
Ma a runtime non vuol dire al momento dell'esecuzione?
Si esatto.
~FullSyst3m~
14-01-2009, 19:32
Si esatto.
Come si crea una classe allora al momento dell'esecuzione se appunto il codice sta lavorando?
cdimauro
14-01-2009, 20:27
appunto quindi di default non c'è già implementato :p
allora non mi era sfuggito :D
:) Comunque in Python ci sono tuple (immutabili) e liste (mutabili). Eventualmente lo implementerei per queste ultime.
Io l'ho fatto in 3 giorni mettendomici 15 minuti al giorno (ho il tutorial ufficiale che non posso abbandonare :D). Mi consolo allora :D
E pensare che c'era gente che si lamentava che non avrebbe mai imparato a programmare... :fiufiu: :p
Tanto per cambiare :p Ma cerco io di prendere il tuo posto non preoccuparti (o forse è meglio che ti preoccupi :asd:)
Il futuro è dei giovani. :fagiano: Poi la mia assenza dal forum ti fa bene, perché ti sprona a sbatterci la testa da solo. :)
Quindi è come ho detto io. Di default non c'è e si deve fare l'overloading. Oh ma stamattina che bel risveglio... fosse sempre cosi :stordita:
:rotfl: Mi fai morire!!! :D
no, una classe.
Però è possibile aggiungere al runtime dei metodi nelle varie classi..
si può fare anche per python anche se non so come :p
Con ruby è una cavolata... anche se ora non mi ricordo + come si fa.. :fagiano:
Con Python è meno semplice perché il linguaggio non ha costrutti sintattici orientati allo scopo.
Anziché "riaprire" una classe, le si possono aggiungere metodi col classico sistema:
def NomeFunzione(self, *Parametri):
...
NomeClasse.NuovoMetodo = NomeFunzione
E' di gran lunga meno elegante, ma... si può fare. :)
Non lo si può, però, applicare ai tipi standard (o built-in che dir si voglia). In tal caso bisogna creare una loro sottoclasse, e procedere quindi all'override dei metodi speciali. Ciò, però, implica la costruzione degli oggetti tramite il costruttore della nuova classe.
Considerato l'uso che se ne fa del monkeypatching, non è un grosso limite.
Io comunque sono contro la modifica delle classi standard, per due motivi: primo perché sui tipi base vorrei avere almeno la certezza che un modulo esterno per qualche motivo non mi combini un pasticcio rendendo inutilizzabile il mio codice.
Secondo perché in questo modo è possibile attuare delle politiche molto aggressive per migliorare la qualità del bytecode generato, e anche della virtual machine che lo eseguirà, con ricadute anche notevoli a livello prestazionale. Lo dico perché da qualche mese mi sto spolpando il codice della virtual machine di Python e a mio avviso ci sono parecchi margini di miglioramento. Con Ruby molte delle idee che ho avuto non potrebbero essere utilizzate, o porterebbero a risultati decisamente più scarsi, perché è troppo dinamico.
D'altra parte ogni linguaggio si porta giustamente dietro pregi e difetti per le scelte fatte. :)
Con la 2.5 non va :fagiano:
A me va:
>>> vowels = 'aeiou'
>>> word = 'abcdefg'
>>> word = ''.join(x for x in word if x not in vowels)
>>> word
'bcdfg'
Ancora in Python non l'ho incontrato.
Ma a runtime non vuol dire al momento dell'esecuzione?
Sì, e si può fare anche in Python.
Come si crea una classe allora al momento dell'esecuzione se appunto il codice sta lavorando?
Meglio che tu lo sappia MOOOOOOLTO più avanti. Sono argomenti delicati, ed è preferibile essere abbastanza esperti nell'uso del linguaggio e della programmazione, perché arrivare a scrivere porcate è molto facile. Evitiamo adesso. ;)
Come si crea una classe allora al momento dell'esecuzione se appunto il codice sta lavorando?
In Ruby tutto è un oggetto, anche le classi, quindi puoi crearle a tempo di esecuzione. Come per le classi puoi creare nuove funzioni e attaccarle alla classe.
magia = Class.new
magia.instance_eval '
def metodo(parametro)
puts parametro * 2
end'
magia.metodo("ciao")
~FullSyst3m~
14-01-2009, 20:47
E pensare che c'era gente che si lamentava che non avrebbe mai imparato a programmare... :fiufiu: :p
Eh eh, magari sapessi programmare, farei il viaggio alla Madonna a piedi scalzi. Inoltre il programma del codice fiscale è una bazzecola e il sorgente fa pena oltretutto, credo che il salumiere sotto casa mia avrebbe saputo fare di meglio :D
Il futuro è dei giovani. :fagiano: Poi la mia assenza dal forum ti fa bene, perché ti sprona a sbatterci la testa da solo. :)
Spero che non siano tutti come me i giovani altrimenti siamo fregati :D E poi la tua assenza non mi fa bene, la testa la sbatto perchè sono in astinenza se stai troppo tempo lontano :asd:
:rotfl: Mi fai morire!!! :D
Ci manca solo che divento un assassino :muro:
Però non sarebbe male... Hans Raiser ha ucciso la moglie, però ha un bel cervellino. cdimauro inizia a guardarti le spalle :stordita:
Anziché "riaprire" una classe, le si possono aggiungere metodi col classico sistema:
def NomeFunzione(self, *Parametri):
...
NomeClasse.NuovoMetodo = NomeFunzione
E' di gran lunga meno elegante, ma... si può fare. :)
Non lo si può, però, applicare ai tipi standard (o built-in che dir si voglia). In tal caso bisogna creare una loro sottoclasse, e procedere quindi all'override dei metodi speciali. Ciò, però, implica la costruzione degli oggetti tramite il costruttore della nuova classe.
Considerato l'uso che se ne fa del monkeypatching, non è un grosso limite.
Io comunque sono contro la modifica delle classi standard, per due motivi: primo perché sui tipi base vorrei avere almeno la certezza che un modulo esterno per qualche motivo non mi combini un pasticcio rendendo inutilizzabile il mio codice.
Secondo perché in questo modo è possibile attuare delle politiche molto aggressive per migliorare la qualità del bytecode generato, e anche della virtual machine che lo eseguirà, con ricadute anche notevoli a livello prestazionale. Lo dico perché da qualche mese mi sto spolpando il codice della virtual machine di Python e a mio avviso ci sono parecchi margini di miglioramento. Con Ruby molte delle idee che ho avuto non potrebbero essere utilizzate, o porterebbero a risultati decisamente più scarsi, perché è troppo dinamico.
D'altra parte ogni linguaggio si porta giustamente dietro pregi e difetti per le scelte fatte. :)
Non volevi dire overloading immagino. E' un'altra cosa l'override giusto? O è un sinomino di overloading?
Sì, e si può fare anche in Python.
Meglio che tu lo sappia MOOOOOOLTO più avanti. Sono argomenti delicati, ed è preferibile essere abbastanza esperti nell'uso del linguaggio e della programmazione, perché arrivare a scrivere porcate è molto facile. Evitiamo adesso. ;)
Ci credi che questa tua filosofia ormai l'ho impostata di default nel mio cervello? Quando ad esempio vedo un post nella sezione Programmazione riguardo una cosa che non so mi dico: "Vabbè, ogni cosa a suo tempo. Nemmeno per guardare".
:asd:
In Ruby tutto è un oggetto, anche le classi, quindi puoi crearle a tempo di esecuzione. Come per le classi puoi creare nuove funzioni e attaccarle alla classe
Anche in Python tutto è un oggetto.... persino Guido è un oggetto :mc:
Anche in Python tutto è un oggetto.... persino Guido è un oggetto :mc:
No attenzione. È un istanza del oggetto Persona :asd:
~FullSyst3m~
14-01-2009, 20:59
No attenzione. È un istanza del oggetto Persona :asd:
Azz è vero, come ho potuto sbagliare?? :muro:
raise "IError", "La I sta per IDIOTA"
No attenzione. È un istanza del oggetto Persona :asd:
:D
O meglio dell'oggetto BDFL (benevolent dictator for life) :sofico:
A me va:
...vero :stordita:
Grazie dell'informazione ;)
cdimauro
15-01-2009, 07:38
Eh eh, magari sapessi programmare, farei il viaggio alla Madonna a piedi scalzi. Inoltre il programma del codice fiscale è una bazzecola e il sorgente fa pena oltretutto, credo che il salumiere sotto casa mia avrebbe saputo fare di meglio :D
Il salumiere lascialo coi salumi (occhio però a non portarci la tua ragazza :asd:).
Spero che non siano tutti come me i giovani altrimenti siamo fregati :D E poi la tua assenza non mi fa bene, la testa la sbatto perchè sono in astinenza se stai troppo tempo lontano :asd:
Non quando andrai a studiare a Catania. :D
Ci manca solo che divento un assassino :muro:
Però non sarebbe male... Hans Raiser ha ucciso la moglie, però ha un bel cervellino. cdimauro inizia a guardarti le spalle :stordita:
Tanto "bello" quel cervellino non mi sembra. E comunque, era sicuramente affetto da bug, visto che s'è fatto beccare. :asd:
Non volevi dire overloading immagino. E' un'altra cosa l'override giusto? O è un sinomino di overloading?
Override si usa come termine quando una classe "figlia" sostituisce un metodo già esistente nella classe da cui deriva, in modo da "mutarne" il comportamento con quello da lei desiderato.
Ci credi che questa tua filosofia ormai l'ho impostata di default nel mio cervello? Quando ad esempio vedo un post nella sezione Programmazione riguardo una cosa che non so mi dico: "Vabbè, ogni cosa a suo tempo. Nemmeno per guardare".
"L'amore per la terra dà solo buoni frutti". :O :p
...vero :stordita:
Grazie dell'informazione ;)
Di nulla. Cerca di utilizzare le generator comprehension al posto delle list comprehension quando possibile, perché spesso sono più efficienti, considerato che non generano tutti gli elementi della lista, ma soltanto un elemento alla volta quando serve.
~FullSyst3m~
15-01-2009, 10:17
Il salumiere lascialo coi salumi (occhio però a non portarci la tua ragazza :asd:).
Azz :muro:
Non quando andrai a studiare a Catania. :D
:D
Tanto "bello" quel cervellino non mi sembra. E comunque, era sicuramente affetto da bug, visto che s'è fatto beccare. :asd:
Però nemmeno è tanto brutto...:stordita:
Override si usa come termine quando una classe "figlia" sostituisce un metodo già esistente nella classe da cui deriva, in modo da "mutarne" il comportamento con quello da lei desiderato.
Capito
"L'amore per la terra dà solo buoni frutti". :O :p
Poi i siciliani lo sentono ancora di più l'amore per la propria terra... ti porterò le arance di Ribera quando verrò a Catania :D
~FullSyst3m~
17-01-2009, 00:42
cdimauro questo è per te
http://gnome-look.org/CONTENT/content-files/90963-zen_of_python.jpg
:asd
e questo per te VICIUS
http://img232.imageshack.us/img232/6492/pyiconsis0.th.png (http://img232.imageshack.us/my.php?image=pyiconsis0.png)
doppio :asd:
cdimauro
17-01-2009, 05:50
cdimauro questo è per te
http://gnome-look.org/CONTENT/content-files/90963-zen_of_python.jpg
:asd
e questo per te VICIUS
http://img232.imageshack.us/my.php?image=pyiconsis0.png
doppio :asd:
Ti ringrazio per la bellissima immagine, ma già guardando il domain mi vengono i brividi. :stordita:
~FullSyst3m~
17-01-2009, 10:57
Ti ringrazio per la bellissima immagine, ma già guardando il domain mi vengono i brividi. :stordita:
Non si può avere tutto dalla vita :D
Salve a tutti, scusate se vado OT, ma di aprirne un altro non mi sembrava il caso.
Leggendo questo Thread è venuta voglia anche a me di realizzare un triviale generatore di codice fiscale.
È in Java, a qualcuno andrebbe di strapazzarlo un po'?
Ecco il jar (http://breve.altervista.org/_altervista_ht/codiceFiscale.jar), il codice sorgente è incluso.
~FullSyst3m~
22-02-2009, 11:46
Salve a tutti, scusate se vado OT, ma di aprirne un altro non mi sembrava il caso.
Leggendo questo Thread è venuta voglia anche a me di realizzare un triviale generatore di codice fiscale.
È in Java, a qualcuno andrebbe di strapazzarlo un po'?
Ecco il jar (http://breve.altervista.org/_altervista_ht/codiceFiscale.jar), il codice sorgente è incluso.
A me funziona.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.