在python中将罗马数字转换为整数

这是user2486所说的我当前的代码

def romanMap():
地图=((“M”,1000),(“CM”,900),(“D”,500),(“CD”,400),(“C”,100),(“XC”,90),(“L”,50),(“XL”,40),(“X”,10),(“IX”,9),(“V”,5),(“V”,4),(“I”,1))
返回图
firstNum=ns([0])
secondNum=ns([1])
def main():
ns=str(输入(“输入罗马数字”))
总数=0
结果=0
而ns:
firstNum=(罗马地图(ns[0]))
secondNum=(罗马地图(ns[1])
如果firstNum是len(ns)>1或secondNum-1:
总计=总计+第一个数值
ns=ns[1:]
其他:
总计=总计+ns[1]-ns[0]
ns=ns[2:]
打印(总计)
main()

我在ns时遇到此错误:
UnboundLocalError:赋值前引用了局部变量“ns”

无需重新发明轮子(除非您愿意)。Python曾经提供了一个转换器(因此您可以转到Python 3.4.1源代码,并在以下位置获取模块:/Python-3.4.1/Doc/tools/roman.py;或者可能像这里的评论中所说的那样使用pip安装它;我还没有验证pip版本;无论如何,您可以这样做):

导入罗马语;
n=罗马语。从罗马语(“X”);n变为10

如果你需要5000或以上的数字,你需要写一个新的函数,不过,也许你可以自己制作字体来表示罗马数字上的线条。(它只适用于一些数字。在4999停下来确实是个好主意。)

要转换为罗马数字,请使用roman.toRoman(myInt)

或者(仅用于转换为罗马数字),您可以在Python3.9.2中执行此操作(由于缺乏文档,我只能部分理解此操作;因此,我的所有参数可能都不正确;但是,它似乎可以工作;格式化程序无论如何都会贬值;因此,不要期望它停留很长时间):

导入格式化程序
a=formatter.AbstractFormatter(“我不知道我应该在这里放什么,但这似乎对我们的目的并不重要。”
罗马字母“数字=a.format”罗马字母(大小写=I,计数器=5)大小写似乎也不重要。
#罗马数字现在等于“V”;

其他人实际上链接到了roman模块在上面的一条评论中使用的相同源代码,但我不相信他们提到它实际上是随Python提供的。它似乎不再随Python提供,但它在3.4.1版中提供了

发表评论