[Corso Python3] e qui in versione compatta (ed illeggibile)
alessandro medici
alexxandro.medici a gmail.com
Mar 31 Maggio 2016 19:24:40 CEST
''' traduce numeri romani ,in decimali e viceversa '''
import unittest
num_romani = 'MDCLXVI'
ammessi = {'alfa':1001,'M':1000,'D':500,'C':100,'L':50,'X':10,'V':5,'I':
1}
def controllaLegalita(numax):
''' torna None se condizioni di errore
il valore decimale se corretto
'''
if numax == "": return # caso della stringa vuota
num = numax.upper()
scoP = adjPP = adjP = 'alfa'
diFila = valorD = 0
for pos, car in enumerate(num):
if car not in num_romani:return
if ammessi[adjP] >= ammessi[car]:
if ammessi[scoP] <= ammessi[car]:return
if adjP == car:
if car in 'DLV' or diFila == 2:return
diFila +=1
else:
diFila = 0
adjPP = adjP # se dopo avrò uno sconto dovrò riaggiornare adjP!
adjP = car
valorD += ammessi[car]
continue
if ammessi[adjPP] < ammessi[car] or not(ammessi[car]//10 <= ammessi[adjP] <
ammessi[car]//2):return
if ammessi[adjPP] < ammessi[adjP]:return
valorD += ammessi[car] -2 * ammessi[adjP]
scoP = adjP
adjP = car
diFila = 2 # non si può inserire un MCM
continue
return valorD
def parto_da_qui(nome):
while True:
a = input("un numero romano or 'fine' ?")
if a == 'fine':break
a = controllaLegalita(nome)
print(a)
if __name__ == '__main__':
unittest.main()
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.fsugpadova.org/pipermail/fsug-corso-python3/attachments/20160531/c81666b3/attachment.html>
Maggiori informazioni sulla lista
fsug-corso-python3