konwerter liczb binarnych na liczby rzymskie

0

Cześć,
Rozpoczynam przygodę z programowaniem i otrzymałem zadanie napisania konwertera liczb na liczby rzymskie.
Mam coś takiego:

from collections import OrderedDict
def write_system_rzymski(num):

    system_rzymski = OrderedDict()
    system_rzymski[1000] = "M"
    system_rzymski[900] = "CM"
    system_rzymski[500] = "D"
    system_rzymski[400] = "CD"
    system_rzymski[100] = "C"
    system_rzymski[90] = "XC"
    system_rzymski[50] = "L"
    system_rzymski[40] = "XL"
    system_rzymski[10] = "X"
    system_rzymski[9] = "IX"
    system_rzymski[5] = "V"
    system_rzymski[4] = "IV"
    system_rzymski[1] = "I"

    def system_rzymski_num(num):
        for r in system_rzymski.keys():
            x, y = divmod(num, r)
            yield system_rzymski[r] * x
            num -= (r * x)
            if num > 0:
                system_rzymski_num(num)
            else:
                break

    return "".join([a for a in system_rzymski_num(num)])
num = int(input("Podaj liczbę do przekonwertowania na system rzymski: "))
print ("Liczba" ,num, "w systemie rzymskim to: ",write_system_rzymski(num))

Kod sypie błędami i mój zasób wiedzy jeszcze tego nie ogarnia... Mogę prosić o pomoc forumowiczów?

0

Nie przekombinowałeś czasem? Ja zrobił bym to tak

 jednosci = ["", "I", "II", "III", "IV", "V", "VI", "VII", "IIX", "IX"]
dziesiatki = ["", "X", "XX", "XXX", "XL", "L", "LX", "LXX", "XXC", "CX"]
setki = ["", "C", "CC", "CCC", "CD", "D", "DC", "DCC", "CCM", "CM"]


arab = input("podaj liczbę")
while len(arab) < 4:
	arab = "0" + arab
print (int(arab[-4]) * "M" + setki[int(arab[-3])] + dziesiatki[int(arab[-2])] + jednosci[int(arab[-1])])
2
romanNumeralMap = (('M', 1000),
                   ('CM', 900),
                   ('D', 500),
                   ('CD', 400),
                   ('C', 100),
                   ('XC', 90),
                   ('L', 50),
                   ('XL', 40),
                   ('X', 10),
                   ('IX', 9),
                   ('V', 5),
                   ('IV', 4),
                   ('I', 1))

def toRoman(n):
    if not (0 < n < 5000):
        raise OutOfRangeError, "number out of range (must be 1..4999)"
    if int(n) != n:
        raise NotIntegerError, "only integers!"

    result = ""
    for numeral, integer in romanNumeralMap:
        while n >= integer:
            result += numeral
            n -= integer
    return result

może takie coś? ;)

0

Ogólnie okazało się, że mój kod działa, tylko w pythonie w wersji 3.1.1. Jak wrzucam do do wersji 3.5.2 to zaczyna sypać błędami :/

1 użytkowników online, w tym zalogowanych: 0, gości: 1