我有一个简单的任务要转换成roman to int美元.这是我一直在try 的代码.


def romanToInt(s):
    """
    :type s: str
    :rtype: int
    """
    j=0
    print(len(s))
    for i in range(len(s)):
        k=s[i]
        l=i+1
        if s[i]=="I":
            if s[l]=="V":
                j+=4
            elif s[l]=="X":
                j+=9
        elif s[i]=="X":
            if s[l]=="L":
                j+=40
            elif s[l]=="C":
                j+=90
        elif s[i]=="C":
            if s[l]=="D":
                j+=400
            elif s[l]=="M":
                j+=900
        else:
            match k :
                case "I":
                    j+=1
                case "V":
                    j+=5
                case "X":
                    j+=10
                case "L":
                    j+=50
                case "C":
                    j+=100
                case "D":
                    j+=500
                case "M":
                    j+=1000
    return j

a=input("Enter number")
b=romanToInt(a)
print(b)

此代码会给出此错误.

Enter numberIII
3
Traceback (most recent call last):
  File "C:\Users\admin\Desktop\Dekstop Folder\pycharm\python\Leetcode\Roman to int.py", line 46, in <module>
    b=romanToInt(a)
      ^^^^^^^^^^^^^
  File "C:\Users\admin\Desktop\Dekstop Folder\pycharm\python\Leetcode\Roman to int.py", line 13, in romanToInt
    if s[l]=="V":
       ~^^^
IndexError: string index out of range

Process finished with exit code 1

我不知道为什么它显示字符串索引超出范围.

我试着打印了长度,它在范围内,但我不知道为什么它不工作.请帮帮忙.

推荐答案

迭代元素通常比迭代索引更好,以避免大约IndexError个元素.zip可以帮助您迭代当前角色和下一个角色.

另一种方法是:

table = {'I': 1, 'V': 5, 'X': 10, 'L': 50, 'C': 100, 'D': 500, 'M': 1000}

def roman_to_int(s):
    num = 0
    for c1, c2 in zip(s, s[1:]):
        v1, v2 = table[c1], table[c2]
        num += v1 if v1 >= v2 else -v1
    return num + v2  # don't forget to add the last element

用途:

>>> roman_to_int('IX')
9

>>> roman_to_int('VII')
7

注意:此代码不判断罗马数字(VIIIII=10)的有效性

Python相关问答推荐

如何使用上下文管理器创建类的实例?

根据网格和相机参数渲染深度

Polars LazyFrame在收集后未返回指定的模式顺序

Matlab中是否有Python的f-字符串等效物

删除最后一个pip安装的包

在Polars(Python库)中将二进制转换为具有非UTF-8字符的字符串变量

用Python解密Java加密文件

如何在python xsModel库中定义一个可选[December]字段,以产生受约束的SON模式

两个pandas的平均值按元素的结果串接元素.为什么?

如何使用Python以编程方式判断和检索Angular网站的动态内容?

如何设置视频语言时上传到YouTube与Python API客户端

Pandas—在数据透视表中占总数的百分比

有没有一种ONE—LINER的方法给一个框架的每一行一个由整数和字符串组成的唯一id?

为什么numpy. vectorize调用vectorized函数的次数比vector中的元素要多?

幂集,其中每个元素可以是正或负""""

不允许 Select 北极滚动?

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

504未连接IB API TWS错误—即使API连接显示已接受''

如何根据一定条件生成段id

Polars时间戳同步延迟计算