gigio^ne |
|
| Ecco il secondo tassello. Converte i numeri romani in numeri arabi o se preferite decimali. Ho cercato in rete ma nisba nulla NULL, di codici a parte quella miseria che convertiva i romani in decimali ma solo fino a 1000 ed il codice è lungo una settimana, e oltretutto sbaglia. Se non trovate codice simile in rete lo rilascio sotto GPL Cercate. cercate.... prima che mi monto la testa. Sorgente scritto da [email protected] Rilasciato sotto GPL www.gnu.org/licenses/gpl.htmlSource code: CODICE #*** RomaToDec.py scritta con Pyton ver. 2.7 per windows 64bit #*** programma testato unicamente su win seven 64bit. #*** Funzione che trasforma numeri romani in numeri decimali. #********************************************************************* #*** Bla... Bla... Bla!!! come listato conversione decimale a romano. #********************************************************************* #*** Questa però presenta un limite numerico massimo che è MMMCMXCIX (3999) #*** Numeri superiori non possono essere convertiti in quanto #*** la numerazione romana comprende cifre fino alle migliaia simbolo (M) #*** cifre superiori per poterle sommare, sotrarre, moltiplicarle etc. #*** necessitano di caratteri non compresi nei 255 codici ASCII #********************************************************************* #*** ATTENZIONE: oltre il MMMCMXCIX (3999) il programma da errore #********************************************************************* import sys #*** header di programma. #*** Funzione per dichiarare e sostituire i numeri arabi o decimali a quelli romani def RomToDec(t): Y = 0 #*** Costanti dei numeri romani. I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000 #*** Assegnazione dei numeri decimali if t == "I": Y = I elif t == "V": Y = V elif t == "X": Y = X elif t == "L": Y = L elif t == "C": Y = C elif t == "D": Y = D elif t == "M": Y = M #print Y return Y #*** Funzione di conversione def ConvRomToDec(Rom): x = 0 x1 = 1 t = "" dc = 0 dc1 = 0 dec = 0 z = 0 for z in range(len(Rom)): #*** esegue un ciclo fino a che il numero delle cifre romane è finito #*** Procedura per la conversione in numero decimale. #*** Prende ogni carattere o numero romano, e verifica che non sia inferiore al successivo #*** con uno shift da sinistra verso destra. #*** Se il carattere o 'numero romano' è maggiore del successivo lo somma, #*** altrimenti lo sotrae, con segno negativo per suplire la somma precedente. #***************************************************************************************** #*** Come prima cosa per sapere se un numero romano è inferiore al successivo, trasformo #*** i numeri romani in decimali. t = Rom[x:x1] dc = RomToDec(t) t = Rom[x1:x1 + 1] dc1 = RomToDec(t) if dc >= dc1: #**** Converte i positivi tipo ( XXVIII ) = 28 dec += (dc + dc1) - dc1 # lo sottrae per evitare somme doppie incrementali elif dc < dc1: #**** Converte i negativi tipo (MCMXXX) = 1930 o (IV) = 4 dec += (-dc * 2 + dc1) + dc - dc1 x += 1 x1 += 1 return dec # Programma principale, esegue un ciclo infinito richiamando se stesso fino a che non viene # immesso (q) o si preme invio senza alcun carattere romano e non. Procedura errori non implementata. print "Premere e lasciare premuto (Caps Lock) per comodita." print "ATTENZIONE: non sbagliare ad immettere i numeri romani. Pena errore nella conversione." print while 1: Rom = raw_input("Inserire un numero romano non superiore a MMMCMXCIX (3999) (q) per uscire: ") if Rom == "q" or Rom == "Q": print "FINE. Grazie per aver usato RomaToDec.py" break print print "Premere e lasciare premuto (Caps Lock) per comodita." print "ATTENZIONE: non sbagliare ad immettere i numeri romani. Pena errore nella conversione." print print "numero decimale = ",ConvRomToDec(Rom) # Stampa il numero decimale. E Python quindi occhio all'identazione.
|
| |