26.1. Napisati program za konverziju vrijednosti iz rimskog brojnog sistema u dekadni brojni sistem.

Opis rješenja:

Listing programa:

# 26011450
# RIMSKI BROJ U DEKADNI BROJ
def rimskiDekadni(s:str) ->int:
    rimski = { "I": 1, "V": 5, "X": 10, "L":  50, "C": 100, "D": 500, "M": 1000 }
    suma = 0
    
    for i in range(len(s)):
        if i + 1 < len(s) and rimski[s[i]] < rimski[s[i + 1]]:
            suma -= rimski[s[i]]  # lijeva cifra veca od desne  oduzimanje
        else:
            suma += rimski[s[i]]  # lijeva cifra veca od desne sabiranje         
    return suma

print("Dobrodošli u aplikaciju za konverziju rimskih u cjelobrojne brojeve")
rb = input("Ucitaj rimski broj (MDCLXVI): ")
db = rimskiDekadni(rb)    # konverzija rimskog u dekadni
print (f'rimski broj {rb}  dekadni broj {db}')

Ispis na ekranu:
Dobrodošli u aplikaciju za konverziju rimskih u cjelobrojne brojeve
Ucitaj rimski broj (MDCLXVI): CMCDXCXLIXIV
rimski broj CMCDXCXLIXIV  dekadni broj 1443

II varijanta sa provjerom ispravnosti unosa
# 26011450
# RIMSKI BROJ U DEKADNI BROJ
def rimskiDekadni(s:str) ->int:
    rimski = { "I": 1, "V": 5, "X": 10, "L":  50, "C": 100, "D": 500, "M": 1000 }
    suma = 0
    
    for i in range(len(s)):
        if i + 1 < len(s) and rimski[s[i]] < rimski[s[i + 1]]:
            suma -= rimski[s[i]]  # lijeva cifra veca od desne  oduzimanje
        else:
            suma += rimski[s[i]]  # lijeva cifra veca od desne sabiranje         
    return suma
            
def ispravanaCifra(e):         # e cifra rimskog broja koji se provjerava
    L = ["I", "V", "X", "L", "C", "D", "M"]  # sve cifre rimskih brojeva
    for i in range(len(L)):    # svi iz liste
        if e == L[i]:          # 
            return 1           # nasao cifru
    return 0                   # nema rimske cifre tj. greska u unosu

print("Dobrodošli u aplikaciju za konverziju rimskih u cjelobrojne brojeve")
greska = 0           # pocetna vrijednost greske za start
rb = ''
while greska == 0:   # ponavljaj dok je greska; ako je greska ponovu ucitaj R broj
    rb = input("Ucitaj rimski broj (MDCLXVI): ")
    for i in (range(len(rb)) or greska == 0):
        greska = ispravanaCifra(rb[i])  # provjera cifra ucitanog rimskog broja
db = rimskiDekadni(rb)                  # konverzija rimskog u dekadni
print (f'rimski broj {rb}  dekadni broj {db}')   # ispis oba broja

Ispis na ekranu:

Index