Skip to main content
 首页 » 编程设计

python之使用字典使用 Python 将罗马数字转换为整数

2025年05月04日24jillzhang

我正在学习编码,并且我有一个练习来制作一个罗马数字到整数的转换器。我知道有很多不同的方法可以编写这个程序,但如果你能帮我找出我的错误,我将不胜感激。我很想听听有关如何更好地编写它的建议,但我现在真正可以使用的是了解我在这方面做错了什么。

我有一本名为 roman_numerals 的字典。它的键是罗马数字值,它的值是它们匹配的整数。

roman_numerals = {"M":1000,"CM":900,"D":500,"CD":400,"C":100,"XC":90,"L":50,"XL":40,"X":10,"V":5,"IV":4,"I":1} 
 
def roman_int(user_choice): 
    if user_choice == "1": 
        user_roman = input("What numeral would you like to convert?\n").upper() 
        resultI = 0 
        for k,v in roman_numerals.items():           
            if user_roman == k: 
                resultI += roman_numerals.get(user_roman) 
            else: 
                for i in user_roman: 
                    if i in roman_numerals.keys(): 
                        if i == k: 
                            resultI += v 
    print(resultI) 

当我运行我的代码时,如果我使用一个等于多个字符的 key 的数字(例如“IV”),我得到的结果是两个“IV”和“V”。或“CM”和“M”。 我知道为什么会这样,因为我要求迭代。但是,我可以要求我的程序在返回值时停止迭代吗?我觉得我真的很接近解决方案,但此时我只是感到困惑。

谢谢!

请您参考如下方法:

您必须确保消耗了对总和有贡献的所有字符。由于所有多字符“原子”文字都以较低值的单位开头,否则,较高值的单位排在第一位,因此一种简单的贪心方法是可行的:

  • 尝试将前两个字符作为一个整体进行转换,如果不可能,则转换第一个单个字符。
  • 向前移动适当的步数。

    def roman_int(user_roman): 
        user_roman = user_roman.upper() 
        resultI = 0 
     
        while user_roman: 
            # try first two chars 
            if user_roman[:2] in roman_numerals: 
                resultI += roman_numerals[user_roman[:2]] 
                # cut off first two chars 
                user_roman = user_roman[2:] 
            # try first char 
            elif user_roman[:1] in roman_numerals: 
                resultI += roman_numerals[user_roman[:1]] 
                # cut off first char 
                user_roman = user_roman[1:] 
            else: 
                print('No roman number') 
                return 
        print(resultI)