python - Python - 将罗马数字转换为整数
问题描述
我尝试了以下从 Roman 转换为 Integer 的Python 3代码。
代码一目了然。但是当我输入时发生了某些问题X
,V
或者与X
值有关V
。
例如:当我尝试V
代码不起作用但IV
显示正确的值时。
我的代码:
class Solution(object):
def romanToInt(self, s):
"""
:type s: str
:rtype: int
"""
roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900}
i = 0
num = 0
while i < len(s):
if i+1<len(s) and s[i:i+2] in roman:
num+=roman[s[i:i+2]]
i+=2
else:
#print(i)
num+=roman[s[i]]
i+=1
return num
ob1 = Solution()
message = str(input("Please enter your roman number: "))
if message <= ("MMMCMXCIX"):
print (ob1.romanToInt(message))
else:
print ("Try again")
我设置了条件,如果输入的罗马数字等于或小于MMMCMXCIX
,它将打印罗马数字;否则它将打印Try again
。
问题是当我输入X
或与输出V
相关X
并V
重视输出时Try again
请帮助我了解我哪里出错了。
解决方案
最后它只是一个数字的加法,你只需要弄清楚它们是否需要被解释为正数或负数:
roman = {'I':1,'V':5,'X':10,'L':50,'C':100,'D':500,'M':1000,'IV':4,'IX':9,'XL':40,'XC':90,'CD':400,'CM':900}
def roman2Dec(inp):
inpNum = [roman[x] for x in inp]
return sum([-x if i < len(inpNum)-1 and x < inpNum[i+1] else x for i, x in enumerate(inpNum)])
for nums in [('IX', 9), ('XL', 40), ('LXI', 61), ('MMMCMXCIX', 3999)]:
result = roman2Dec(nums[0])
print result == nums[1]
输出:
True
True
True
True
推荐阅读
- python - 在python中将txt文件转换为数据框
- php - Codeigniter API:如何根据 Codeigniter API 中的用户时区从 mysql 数据库中获取数据?
- azure - Azure Web 应用程序 - 扩展、推送和 MySQL 按钮无法单击/禁用
- ios - Xcode 接口生成器未检测到 Admob 框架类
- reactjs - ApolloClient 的 SchemaLink 和 HttpLink 有什么区别?
- python - request.is_ajax() ajax 请求在 Django 中不起作用
- react-native - 检查已安装的 npm 版本时,不同的命令会给出不同的 npm 版本
- javascript - 我如何附加值并将取决于来自 ` 的数据
- python - cx_Oracle.DatabaseError: ORA-00911: 无效字符
- python - 我已经安装了请求,但我仍然收到 ModuleNotFoundError: No module named 'requests' 错误