Python:从罗马数字到Int,挂接在';C';计算

Python:从罗马数字到Int,挂接在';C';计算,python,Python,我的代码没有为其中一个测试用例“MCMXCVI”打印正确的数字 它应该印刷:1996年。 目前正在打印2106 在我上一个elif语句中检查了一个“M”元素之后,我怀疑它在验证“C”元素时失败了。但是,我打对了,不知道为什么会这样。任何帮助都将不胜感激 编辑:所以我还是不明白。我知道它在“IV”和“MCM”上失败了-但为什么?我正在解析中的所有内容,它不应该-我肯定遗漏了一些东西。我需要一些n00b解释,请 第二次编辑:明白了!我小心翼翼地用手超慢地画出了“IV”——当我加上V(5)时,我算出了

我的代码没有为其中一个测试用例“MCMXCVI”打印正确的数字

它应该印刷:1996年。 目前正在打印2106

在我上一个elif语句中检查了一个“M”元素之后,我怀疑它在验证“C”元素时失败了。但是,我打对了,不知道为什么会这样。任何帮助都将不胜感激

编辑:所以我还是不明白。我知道它在“IV”和“MCM”上失败了-但为什么?我正在解析中的所有内容,它不应该-我肯定遗漏了一些东西。我需要一些n00b解释,请

第二次编辑:明白了!我小心翼翼地用手超慢地画出了“IV”——当我加上V(5)时,我算出了,之后我会减去1,而不是加上5-1(4)。所以我会得到5分。这一逻辑在其他人身上也失败了。我必须先检查元素的值,然后再添加。谢谢大家

class Solution:
def romanToInt(self, roman):
    """
    :type s: str
    :rtype: int
    """
    sum = 0
    for element in range(0, len(roman)):
        if roman[element] == 'I':
            sum += 1

        elif roman[element] == 'V':
            sum += 5
            if roman[element - 1] == 'I':
                sum -= 1

        elif roman[element] == 'X':
            sum += 10
            if roman[element - 1] == 'I':
                sum -= 1

        elif roman[element] == 'C':
            sum += 100
            if roman[element - 1] =='X':
                sum -= 10

        elif roman[element] == 'L':
            sum += 50
            if roman[element - 1] == 'X':
                sum -= 10

        elif roman[element] == 'D':
            sum += 500
            if roman[element - 1] == 'C':
                sum -= 100

        elif roman[element] == 'M':
            sum += 1000
            if roman[element - 1] == 'C':
                sum -= 100

    return sum

因为没有普遍接受应该如何使用。例如,从wikipedia,例如
MCMX
MDCCCCX
表示
1910
您应该检查每个数字的每个小数字,而不仅仅是前一个数字

我可以说:

  • 例如,您应该在
    X
    中包含
    I
    V
    减法。对于其他较大的数字,也包括以前所有较小的数字。也就是说,对于
    L
    添加
    X
    V
    I
  • 如果代码保持原样,则必须减去该值的两倍,因为您已经添加了一次(即在上一步中)。例如,
    IV
    将被评估为+1、+5、-1=+5而不是+4。您需要+1、+5、-2=+5
  • 您应该检查您是否在第一个数字上,即
    element=0
    ,然后
    element-1
    具有不同的含义(即最后一个数字),您不想将其签出

也许你的代码需要更多的bug修复,但这就是我发现的。

手动运行逻辑以输入
MCM
-你会发现它是不正确的。即使
IV
也不能产生正确的结果。
类解决方案
你有Java背景吗?说真的,为什么上课?@timgeb这就是leetcode希望你做的。老实说,我也不知道为什么……我是一个C++迷lol@OliverCharlesworth-我用手摸出来的,我看不出哪里错了。我肯定忽略了一些小东西。你能告诉我哪里搞砸了吗?你来得正是时候。我真的在修复我的代码。我会接受你的错误修复建议!非常感谢。关于有效罗马数字和最小罗马数字之间差异的一个很好的总结。我发现使用两本字典缩短了我的代码。一个用于加法,一个用于减法规则。