Basic program to convert integer to Roman numerals?

后端 未结 24 1371
孤独总比滥情好
孤独总比滥情好 2020-11-30 11:52

I\'m trying to write a code that converts a user-inputted integer into its Roman numeral equivalent. What I have so far is:

The point of the generate_

24条回答
  •  误落风尘
    2020-11-30 12:12

    Another way to do this. separating out processing of number starting with 4 , 9 and others. it can be simplified further

    def checkio(data):
    romans = [("I",1),("V",5),("X",10),("L",50),("C",100),("D",500),("M",1000)]
    romans_rev = list(sorted(romans,key = lambda x: -x[1]))
    def process_9(num,roman_str):
        for (k,v) in romans:
            if (v > num):
                current_roman = romans[romans.index((k,v))]
                prev_roman = romans[romans.index((k,v)) - 2]
                roman_str += (prev_roman[0] + current_roman[0])
                num -= (current_roman[1] - prev_roman[1])
                break
        return num,roman_str
    def process_4(num,roman_str):
        for (k,v) in romans:
            if (v > num):
                current_roman = romans[romans.index((k,v))]
                prev_roman = romans[romans.index((k,v)) - 1]
                roman_str += (prev_roman[0] + current_roman[0])
                num -= (current_roman[1] - prev_roman[1])
                break
        return num,roman_str
    def process_other(num,roman_str):
        for (k,v) in romans_rev:
            div = num // v
            if ( div != 0 and num > 0 ):
                roman_str += k * div
                num -= v * div
                break
        return num,roman_str
    def get_roman(num):
        final_roman_str = ""
        while (num > 0):
            if (str(num).startswith('4')):
                num,final_roman_str = process_4(num,final_roman_str)
            elif(str(num).startswith('9')):
                num,final_roman_str = process_9(num,final_roman_str)
            else:
                num,final_roman_str = process_other(num,final_roman_str)
        return final_roman_str
    
    return get_roman(data)
    
    
    print(checkio(number))
    

提交回复
热议问题