Un ringraziamento a voi che avete risposto e in modo simpatico vi siete confrontati, mi è piaciuta la battuta sul codice +- pythonico. Circa Marco Beri, ho per le mani proprio un tuo libro "Python" pocket della Apogeo. Alla fine mi pare di aver capito che il codice che andrebbe usato è
from datetime import datetime input = '10/12/1977' try: result = datetime.strptime(input, '%d/%m/%Y') except ValueError: result = None Bene, l'ho provato e funziona; ora lo devo raccordare col codice che avevo già disposto e quindi la prima riga va messa in cima al listato, poi creo una def con le righe di cui sopra alla quale passo la data ricevuta da tastiera e valuterò la risposta in result: se None la data è sbagliata e va reinserita con un While e non con un goto di Commodoresca memoria (chi ha qualche anno sulle spalle capirà!) Un grazie a tutti voi, al prossio dubbio. Ciao >----Messaggio originale---- >Da: python-requ...@lists.python.it >Data: 28/07/2012 22.40 >A: <python@lists.python.it> >Ogg: Digest di Python, Volume 77, Numero 37 > >Invia le richieste di iscrizione alla lista Python all'indirizzo > python@lists.python.it > >Per iscriverti o cancellarti attraverso il web, visita > http://lists.python.it/mailman/listinfo/python >oppure, via email, manda un messaggio con oggetto `help' all'indirizzo > python-requ...@lists.python.it > >Puoi contattare la persona che gestisce la lista all'indirizzo > python-ow...@lists.python.it > >Se rispondi a questo messaggio, per favore edita la linea dell'oggetto >in modo che sia più utile di un semplice "Re: Contenuti del digest >della lista Python..." > > >Argomenti del Giorno: > > 1. Re: controllo della data (Giorgio Zoppi) > 2. Re: controllo della data (Nicola Larosa) > 3. Re: controllo della data (Andrea Francia) > 4. Re: controllo della data (Daniele Varrazzo) > 5. Re: controllo della data (Alberto Granzotto) > 6. Re: controllo della data (Giorgio Zoppi) > 7. Re: controllo della data (Daniele Varrazzo) > > >---------------------------------------------------------------------- > >Message: 1 >Date: Sat, 28 Jul 2012 20:49:26 +0200 >From: Giorgio Zoppi <giorgio.zo...@gmail.com> >To: Discussioni generali sul linguaggio Python > <python@lists.python.it> >Subject: Re: [Python] controllo della data >Message-ID: > <CAHW5Hkqwz9P4BPXVmYO79721Lkm1E3URsxkBN6vN9=bp4_f...@mail.gmail.com> >Content-Type: text/plain; charset=ISO-8859-1 > >Marco compariamo > >RegExp: >import re > >date = "01/02/1988" >checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d" >obj = re.compile(checkdate) >if (re.match(date)): > print 'Valid date' > > >Datetime >from datetime import datetime >date = '10/12/1977' >input = date.replace("/","") >result = None >format = ['%d%m%Y'] > try: > result = datetime.strptime(input, format) > except: > pass > >if (result): > print "Validate" > > >Il secondo e' piu pythonico...ma lungo. Hai altre opzioni? > > >------------------------------ > >Message: 2 >Date: Sat, 28 Jul 2012 20:58:18 +0200 >From: Nicola Larosa <n...@teknico.net> >To: Discussioni generali sul linguaggio Python > <python@lists.python.it> >Subject: Re: [Python] controllo della data >Message-ID: <5014364a.5000...@teknico.net> >Content-Type: text/plain; charset=UTF-8 > >Giorgio Zoppi wrote: >> except: >> pass > >Tu andrai all'inferno per questo, lo sai sì? > > >> Il secondo e' piu pythonico... > >Se 'sta roba è pythonica, io sono Mastro Geppetto. > >-- >Nicola Larosa - http://www.tekNico.net/ > >Most women experimentally are bisexual. If you give testosterone shots >to heterosexual men they become more obsessed with women. If you give >it to gay men they become more obsessed with men, to lesbians they >become more obsessed with women. If you give the same shot to a >heterosexual woman she becomes more obsessed with everybody. > - Christopher Ryan, March 2012 > > > >------------------------------ > >Message: 3 >Date: Sat, 28 Jul 2012 21:11:42 +0200 >From: Andrea Francia <and...@andreafrancia.it> >To: Discussioni generali sul linguaggio Python > <python@lists.python.it> >Subject: Re: [Python] controllo della data >Message-ID: > <caoaxvrk_hzte8aj9odc9vmpcpqa2rzkdrahyy7v09gkhxkx...@mail.gmail.com> >Content-Type: text/plain; charset="utf-8" > >On Sat, Jul 28, 2012 at 8:49 PM, Giorgio Zoppi <giorgio.zoppi@gmail. com>wrote: >> >> Datetime >> from datetime import datetime >> date = '10/12/1977' >> input = date.replace("/","") >> result = None >> format = ['%d%m%Y'] >> try: >> result = datetime.strptime(input, format) >> except: >> pass >> >> if (result): >> print "Validate" >> > >A parte l'uso scorretto delle eccezioni questa non é una validazione >corretta. >Accetterebbe anche 101/2/1977 come data valida e lo convertirebbe (credo) a >10/12/1977. > >Ciao >-- >Andrea Francia http://andreafrancia.it >-------------- parte successiva -------------- >Un allegato HTML è stato rimosso... >URL: <http://lists.python. it/pipermail/python/attachments/20120728/560cd00f/attachment-0001.html> > >------------------------------ > >Message: 4 >Date: Sat, 28 Jul 2012 20:28:06 +0100 >From: Daniele Varrazzo <p...@develer.com> >To: <python@lists.python.it> >Subject: Re: [Python] controllo della data >Message-ID: <705b4e7d20e86b44e396a30234363...@develer.com> >Content-Type: text/plain; charset=UTF-8; format=flowed > >On 2012-07-28 19:49, Giorgio Zoppi wrote: >> Marco compariamo >> >> RegExp: >> import re >> >> date = "01/02/1988" >> checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- >> /.](19|20)\d\d" >> obj = re.compile(checkdate) >> if (re.match(date)): >> print 'Valid date' > >Ti dice anche se un anno è bisestile? > >> Datetime >> from datetime import datetime >> date = '10/12/1977' >> input = date.replace("/","") >> result = None >> format = ['%d%m%Y'] >> try: >> result = datetime.strptime(input, format) >> except: >> pass >> >> if (result): >> print "Validate" >> >> >> Il secondo e' piu pythonico...ma lungo. Hai altre opzioni? > >Basta toglierci tutta la roba che non serve. Che poi che vuol dire, più >un pezzo di codice è corto e meglio è? L'estetica del perl? > >from datetime import datetime >input = '10/12/1977' >try: > result = datetime.strptime(input, '%d/%m/%Y') >except ValueError: > result = None > >(sebbene l'aggettivo "Pythonico" non sia esattamente ben definito, il >tuo esempio *veramente* non lo era..) > > >-- >Daniele Varrazzo - Develer S.r.l. >http://www.develer.com > > >------------------------------ > >Message: 5 >Date: Sat, 28 Jul 2012 21:42:59 +0200 >From: Alberto Granzotto <agran...@gmail.com> >To: Discussioni generali sul linguaggio Python > <python@lists.python.it> >Subject: Re: [Python] controllo della data >Message-ID: > <CAB794n_X28SfjHnRg+10iR9WHi=jamvlfj_janf+mgjqugx...@mail.gmail.com> >Content-Type: text/plain; charset="iso-8859-1" > >2012/7/28 Daniele Varrazzo <p...@develer.com> > >> On 2012-07-28 19:49, Giorgio Zoppi wrote: >> >>> Marco compariamo >>> >>> RegExp: >>> import re >>> >>> date = "01/02/1988" >>> checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- >>> /.](19|20)\d\d" >>> obj = re.compile(checkdate) >>> if (re.match(date)): >>> print 'Valid date' >>> >> >> Ti dice anche se un anno è bisestile? >> >> >> Datetime >>> from datetime import datetime >>> date = '10/12/1977' >>> input = date.replace("/","") >>> result = None >>> format = ['%d%m%Y'] >>> try: >>> result = datetime.strptime(input, format) >>> except: >>> pass >>> >>> if (result): >>> print "Validate" >>> >>> >>> Il secondo e' piu pythonico...ma lungo. Hai altre opzioni? >>> >> >> Basta toglierci tutta la roba che non serve. Che poi che vuol dire, più un >> pezzo di codice è corto e meglio è? L'estetica del perl? >> >> from datetime import datetime >> input = '10/12/1977' >> try: >> result = datetime.strptime(input, '%d/%m/%Y') >> except ValueError: >> result = None >> >> (sebbene l'aggettivo "Pythonico" non sia esattamente ben definito, il tuo >> esempio *veramente* non lo era..) > > >totalmente d'accordo, e non sono nemmeno sostituibili. Semplicemente quella >con le RegExp è sbagliata, l'altra no, perché? > >import re >re.match( > "^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d", > "31/02/1988") # nota bene, il 31 febbraio probabilmente non esiste > >In questo caso con la regexp puoi magari avvicinarti alla correttezza, puoi >farle estremamente sofisticate e riconoscere i mesi da 30/31/28 giorni e >arrivare a considerare gli anni bisestili ottenendo qualcosa tipo: > > ^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?: 29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2- 9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26]) 00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9] |[2-9]\d)?\d{2})$ >[via <http://regexadvice.com/blogs/mash/archive/2004/04/02/300.aspx>] > >ma si tratterebbe probabilmente di masturbazione più che programmazione :P > >[scusate ho letto ora "ti dice anche se l'anno è bisestile, ma ormai avevo >scritto! :P] > > >> -- >> Daniele Varrazzo - Develer S.r.l. >> http://www.develer.com >> >> ______________________________**_________________ >> Python mailing list >> Python@lists.python.it >> http://lists.python.it/**mailman/listinfo/python<http://lists.python. it/mailman/listinfo/python> >> >-------------- parte successiva -------------- >Un allegato HTML è stato rimosso... >URL: <http://lists.python. it/pipermail/python/attachments/20120728/916d408d/attachment-0001.html> > >------------------------------ > >Message: 6 >Date: Sat, 28 Jul 2012 22:10:47 +0200 >From: Giorgio Zoppi <giorgio.zo...@gmail.com> >To: Discussioni generali sul linguaggio Python > <python@lists.python.it> >Subject: Re: [Python] controllo della data >Message-ID: > <CAHW5HkqvJxZMQJtS8n4UnaHqX2wkOz06_o1N=f-s94ppt+2...@mail.gmail.com> >Content-Type: text/plain; charset=ISO-8859-1 > >ok. L'esempio di daniele e quello corretto..Buona serata! > >Il 28 luglio 2012 21:42, Alberto Granzotto <agran...@gmail.com> ha scritto: >> >> >> 2012/7/28 Daniele Varrazzo <p...@develer.com> >>> >>> On 2012-07-28 19:49, Giorgio Zoppi wrote: >>>> >>>> Marco compariamo >>>> >>>> RegExp: >>>> import re >>>> >>>> date = "01/02/1988" >>>> checkdate ="^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- >>>> /.](19|20)\d\d" >>>> obj = re.compile(checkdate) >>>> if (re.match(date)): >>>> print 'Valid date' >>> >>> >>> Ti dice anche se un anno è bisestile? >>> >>> >>>> Datetime >>>> from datetime import datetime >>>> date = '10/12/1977' >>>> input = date.replace("/","") >>>> result = None >>>> format = ['%d%m%Y'] >>>> try: >>>> result = datetime.strptime(input, format) >>>> except: >>>> pass >>>> >>>> if (result): >>>> print "Validate" >>>> >>>> >>>> Il secondo e' piu pythonico...ma lungo. Hai altre opzioni? >>> >>> >>> Basta toglierci tutta la roba che non serve. Che poi che vuol dire, più un >>> pezzo di codice è corto e meglio è? L'estetica del perl? >>> >>> from datetime import datetime >>> input = '10/12/1977' >>> try: >>> result = datetime.strptime(input, '%d/%m/%Y') >>> except ValueError: >>> result = None >>> >>> (sebbene l'aggettivo "Pythonico" non sia esattamente ben definito, il tuo >>> esempio *veramente* non lo era..) >> >> >> totalmente d'accordo, e non sono nemmeno sostituibili. Semplicemente quella >> con le RegExp è sbagliata, l'altra no, perché? >> >> import re >> re.match( >> "^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d", >> "31/02/1988") # nota bene, il 31 febbraio probabilmente non esiste >> >> In questo caso con la regexp puoi magari avvicinarti alla correttezza, puoi >> farle estremamente sofisticate e riconoscere i mesi da 30/31/28 giorni e >> arrivare a considerare gli anni bisestili ottenendo qualcosa tipo: >> >> >> ^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?: 29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2- 9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26]) 00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9] |[2-9]\d)?\d{2})$ >> [via <http://regexadvice.com/blogs/mash/archive/2004/04/02/300.aspx>] >> >> ma si tratterebbe probabilmente di masturbazione più che programmazione :P >> >> [scusate ho letto ora "ti dice anche se l'anno è bisestile, ma ormai avevo >> scritto! :P] >> >> >>> >>> -- >>> Daniele Varrazzo - Develer S.r.l. >>> http://www.develer.com >>> >>> _______________________________________________ >>> Python mailing list >>> Python@lists.python.it >>> http://lists.python.it/mailman/listinfo/python >> >> >> >> _______________________________________________ >> Python mailing list >> Python@lists.python.it >> http://lists.python.it/mailman/listinfo/python >> > > > >-- >Quiero ser el rayo de sol que cada día te despierta >para hacerte respirar y vivir en me. >"Favola -Moda". > > >------------------------------ > >Message: 7 >Date: Sat, 28 Jul 2012 21:40:13 +0100 >From: Daniele Varrazzo <p...@develer.com> >To: <python@lists.python.it> >Subject: Re: [Python] controllo della data >Message-ID: <5cf0fa16d15943bfd999f4622b38b...@develer.com> >Content-Type: text/plain; charset=UTF-8; format=flowed > >On 2012-07-28 20:42, Alberto Granzotto wrote: > >> >> ^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[1,3-9]|1[0-2])(\/|-|\.)(?: 29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2- 9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26]) 00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9] |[2-9]\d)?\d{2})$ >> [via <http://regexadvice.com/blogs/mash/archive/2004/04/02/300.aspx>] >> >> ma si tratterebbe probabilmente di masturbazione più che >> programmazione :P >> >> [scusate ho letto ora "ti dice anche se l'anno è bisestile, ma ormai >> avevo >> scritto! :P] > >No, anzi, grazie per questo capolavoro! > >-- >Daniele Varrazzo - Develer S.r.l. >http://www.develer.com > > >------------------------------ > >_______________________________________________ >Python mailing list >Python@lists.python.it >http://lists.python.it/mailman/listinfo/python > > >Fine di Digest di Python, Volume 77, Numero 37 >********************************************** > _______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python