Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
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


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
SpaceX ha confermato che Flight 14 sar&a...
Googlebook pronto al debutto: Google apr...
Guida all'acquisto: quale lavapavimenti ...
Google Maps su Android Auto introduce fi...
AMD Ryzen 5 5500F: fino al 16% di presta...
L'ecosistema partner di Microsoft cresce...
Oracle registra un boom nella divisione ...
Amazon Prime Video sfida TikTok con le n...
L'uscita di Rayman Legends Retold &egrav...
Dazio UE sui pacchi extra UE, in Italia ...
La nuova lavatrice smart di Xiaomi ha tr...
Hai una PSP nel cassetto? Questo nuovo p...
Oracle presenta Java 27 con diverse novi...
Il microscopio dell'EPFL vede più...
Volvo avvia la produzione dei nuovi cami...
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: 23:32.


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