我正在为学校编写这个简单的python程序,其中需要一个罗马数字并将其转换为阿拉伯数字。 例如:I = 1,X = 10等等
该程序在转换简单数字时可以正常工作,但是当它需要转换需要减法的数字时,就会出现问题。例如,当输入“ IV”时,程序应打印4,而不是显示错误代码。
我尝试将输入设置为int,但是这给了我一个新的错误代码。奇怪的是,当我上交该文件时它起作用了,但是当我后来将其下载回我的计算机并删除注释时,它坏了。 而且基本上是教师代码的复制粘贴,是的。
def omkodchiffer(c):
if c == "I":
return 1
if c == "V":
return 5
if c == "X":
return 10
if c == "L":
return 50
if c == "C":
return 100
if c == "D":
return 500
if c == "M":
return 1000
def omregn(t):
arabertal = 0
for i in range(0, len(t)):
if i < len(t) - 1:
if omkodchiffer(t[i]) < omkodchiffer(t[i + 1]):
arabertal -= omkodchiffer(t[i])
i += 1
elif omkodchiffer(t[i]) >= omkodchiffer(t[i + 1]):
arabertal += omkodchiffer(t[i])
i += 1
else:
arabertal += omkodchiffer(t[i])
return arabertal
omregnet = omregn(input("Indtast romertal her:").capitalize())
print(omregnet)
预期结果:当给出“ IV”时,程序将打印“ 4”。 实际结果:打印错误代码
答案 0 :(得分:1)
omregnet = omregn(input("Indtast romertal her:").capitalize())
您不应在此处使用capitalize
。 capitalize
使字符串的首字母大写,其余的变为小写。例如,"IV".capitalize()
变为"Iv"
。这是一个问题,因为omkodchiffer
不知道如何处理小写的V。因此它返回None,并且在您的条件表达式中的不等式之一中使用None值,在该条件下,它无法明智地与整数进行比较。< / p>
改为使用.upper()
。
omregnet = omregn(input("Indtast romertal her:").upper())