Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo
Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo
Find X9 Ultra è lo smartphone che tanti aspettavano, e finalmente è arrivato anche in Italia. Abbiamo provato il flagship di OPPO per diverse settimane, e siamo volati fino in Cina alla sua presentazione ufficiale. Tutto gira intorno al suo incredibile comparto fotografico in collaborazione con Hasselblad e con un totale di sei fotocamere. Il resto è un mix di specifiche di altissimo livello, così come il prezzo. Vi raccontiamo tutto nella nostra recensione completa.
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet
Il nuovo Deebot X12 OmniCyclone abbina un sistema di raccolta dello sporco senza sacchetto, un rullo di lavaggio esteso e la tecnologia FocusJet per intervenire più efficacemente sulle macchie più persistenti. Un robot completo e preciso che aiuta a tenere puliti i pavimenti di casa con il minimo sforzo
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2 implementa un mocio a nastro che esegue una pulizia dettagliata del pavimento di casa, in abbinamento ad un potente motore di aspirazione della polvere: un prodotto ideale per gestire in autonomia e con grande efficacia le necessità di pulizia dei pavimenti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 25-10-2010, 17:28   #1
Mulder90
Senior Member
 
L'Avatar di Mulder90
 
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
[Python]-Esercizio Codice Fiscale

Salve a tutti,
mi sono messo ad imparare Python nel tempo libero e ho scritto questo piccolo script che calcola il codice fiscale.

Codice:
#Creato da Lorenzo Cinque

cognome = raw_input("Inserire il cognome: ")
nome = raw_input("Inserire il nome: ")
sesso = raw_input("inserire sesso(F o M): ")
data = raw_input("inserire data di nascita (gg/mm/anno): ").split('/')
comune = raw_input("inserire comune di nacita: ")

vocali = "aeiouAEIOU"

mesi = { '01':'A','02':'B','03':'C','04':'D',
         '05':'E','06':'H','07':'L','08':'M',
         '09':'P','10':'R','11':'S','12':'T'}

controllo = { 0:'A',1:'B',2:'C',3:'D',4:'E',5:'F',
              6:'G',7:'H',8:'I',9:'J',10:'K',11:'L',
              12:'M',13:'N',14:'O',15:'P',16:'Q',17:'R',
              18:'S',19:'T',20:'U',21:'V',22:'W',23:'X',
              24:'Y',25:'Z'}

dispari = { '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}

pari = { '0':0, '1':1, '2':2, '3':3, '4':4, '5':5,
           '6':6, '7':7, '8':8, '9':9, 'A':0, 'B':1,
           'C':2, 'D':3, 'E':4, 'F':5, 'G':6, 'H':7,
           'I':8, 'J':9, 'K':10, 'L':11, 'M':12, 'N':13,
           'O':14, 'P':15, 'Q':16, 'R':17, 'S':18, 'T':19,
           'U':20, 'V':21, 'W':22, 'X':23, 'Y':24, 'Z':25}

def CalcCognome(cognome):
    cons = []
    voc = []
    for x in cognome:
        if x in vocali:
            voc.append(x)
        else:
            cons.append(x)
    codCognome = "".join(cons + voc +['x']*2)[0:3]
    return codCognome.upper()


def CalcNome(nome):
    cons = []
    voc = []
    for x in nome:
        if x in vocali:
            voc.append(x)
        else:
            cons.append(x)
    if len(cons) > 3:
        cons[1:2] = []
    codNome = "".join(cons + voc +['x']*2)[0:3]
    return codNome.upper()

def Data(data, sesso):
    anno = data[2][2:]
    mese = mesi[data[1]]
    if sesso != "M":
        giorno = str(int(data[0]) + 40)
    else:
        giorno = data[0]
    return anno + mese + giorno
        

def CalcCodComune(comune):
    codici = open("codici_catastali.txt", "r")
    while 1:
        linea = codici.readline().strip()
        if not linea:
            codici.close()
            return 0
        com, codice, provincia = linea.split(',')
        if com == comune:
            codici.close()
            return codice.upper()


def CodiceControllo(codFisc):
    indice = 0
    a = 0
    b = 0
    p = []
    d = []
    while indice < len(codFisc):
        if indice%2!=0:
            p.append(codFisc[indice])
        else:
            d.append(codFisc[indice])
        indice +=1
    for x in p:
        a +=  pari[x]
    for y in d:
        b += dispari[y]
    return controllo[((a+b)%26)].upper()


codFisc = CalcCognome(cognome)+CalcNome(nome)+Data(data, sesso)+CalcCodComune(comune)
print codFisc+CodiceControllo(codFisc)
lo script funziona ma se inserisco un cognome o un nome formati da più parole non funziona. es: Del Piero
Sapete come posso risolvere?L'unico modo con cui posso inserire i nomi composti è di metterli tutti attaccati ma è un modo un pò naif.
Inoltre sapete dirmi come posso migliorare il codice o se c'è qualcosa che secondo voi non va bene?

Ecco il file con i codici catastali per chi lo volesse provare
http://www.mediafire.com/?9w2men481h21ft9
Mulder90 è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2010, 20:16   #2
ingframin
Senior Member
 
L'Avatar di ingframin
 
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
se posti anche un link a dove trovare il file coi codici dei comuni come ce l'hai tu (o me lo mandi per email) riesco a farlo girare e a provarlo per intero.
Comunque ad occhio il problema è questo:

for x in p:
a += pari[x]
for y in d:
b += dispari[y]
return controllo[((a+b)%26)].upper()

Se ci sono degli spazi nel cognome tendi ad usare uno spazio come indice del dizionario.
Puoi risolvere così:

for x in p:
if x == ' ':
continue

a += pari[x]

for y in d:
if x == ' ':
continue
b += dispari[y]

return controllo[((a+b)%26)].upper()
Fammi sapere se va!
Saluti
ingframin è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2010, 20:27   #3
Mulder90
Senior Member
 
L'Avatar di Mulder90
 
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
il link per il file dei codici è nel primo post in fondo
Intanto grazie della risposta ,provo subito!
Mulder90 è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2010, 20:34   #4
ingframin
Senior Member
 
L'Avatar di ingframin
 
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
Ok, sono rimbambito
Comunque col piccolo stratagemma che ti ho suggerito funziona :-)
ingframin è offline   Rispondi citando il messaggio o parte di esso
Old 25-10-2010, 20:34   #5
Mulder90
Senior Member
 
L'Avatar di Mulder90
 
Iscritto dal: Aug 2008
Città: Firenze
Messaggi: 317
allora ho provato e adesso non si blocca più però viene una cosa del genere:
AB DEF90G01H123I
Mulder90 è offline   Rispondi citando il messaggio o parte di esso
Old 28-10-2010, 20:38   #6
ingframin
Senior Member
 
L'Avatar di ingframin
 
Iscritto dal: Apr 2010
Città: Leuven
Messaggi: 667
Quote:
Originariamente inviato da Mulder90 Guarda i messaggi
allora ho provato e adesso non si blocca più però viene una cosa del genere:
AB DEF90G01H123I
dà anche a me lo stesso problema, solo che non ho avuto tempo di metterci mano causa bordelli a lavoro (ieri sono uscito dall'ufficio alle 8 e mezzo )
Comunque conto di metterci mano domenica e poi ti faccio sapere!
ingframin è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Recensione OPPO Find X9 Ultra: è lui il cameraphone definitivo Recensione OPPO Find X9 Ultra: è lui il c...
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet Ecovacs Deebot X12 OmniCyclone: lava grazie a Fo...
Narwal Flow 2: la pulizia di casa con un mocio a nastro Narwal Flow 2: la pulizia di casa con un mocio a...
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Il satellite AST SpaceMobile BlueBird 7 ...
SpaceX: la droneship Just Read the Instr...
Project Helix sarà prodotta anche...
La NASA pubblica alcuni aggiornamenti su...
Tute spaziali AxEMU per Artemis: Axiom S...
Nutanix Government Cloud Clusters arriva...
Troy Baker lavora a un progetto tutto su...
Motorola Edge 60 Neo è il compatt...
Stretto di Hormuz, finti funzionari iran...
Dragon Ball Xenoverse 3 annunciato uffic...
WINDTRE BUSINESS potenzia i servizi IoT ...
OPPO rinnova l'ecosistema: arrivano Watc...
OPPO Find X9 Ultra ufficiale: debutta il...
Renault Twingo: esposta a Milano per far...
Intel vuole cambiare: overclocking anche...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 21:18.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v