我在这里找不到解决方案list index out of range

问题描述 投票:0回答:2

有人能帮我找到这个列表索引超出范围的解决方案吗?这是代码,希望对你有所帮助。 Plzz??



list1 = {

    'I' : 1,

    'V' : 5,

    'X' : 10,

    'L' : 50,

    'C' : 100,

    'D' : 500,

    'M' : 1000

}

def func(x):

    arr = []

    i = 0

    res = 0

    j = i+1

    for z in x:

        arr.append(list1[z])

    while j < len(arr):

        if arr[i] >= arr[j]:

            res+= arr[i]

        elif arr[i] < arr[j]:

            res+= arr[i]*-1

        i+=1

print(func('VIII'))

我尝试使用长度函数但没有帮助。我还是个初学者,所以我需要很多帮助...

python
2个回答
0
投票

您收到该错误是因为您正在尝试访问列表中不存在的索引。在您的代码中,错误是由 while 循环引起的,因为您在递增 j 时没有检查它是否已到达列表末尾。您还应该在循环内递增 i 并更新 j 。 这应该有效:

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

def func(x):
    arr = []
    res = 0
    for z in x:
        arr.append(list1[z])

    i = 0
    while i < len(arr) - 1:
        if arr[i] >= arr[i+1]:
            res += arr[i]
        else:
            res -= arr[i]
        i += 1

    # add the value of the last symbol
    res += arr[-1]
    return res

print(func('VIII'))

0
投票

您的循环将永远运行,因为您永远不会更新循环中的

j
变量。这是修改后的代码:


list1 = {

    'I' : 1,

    'V' : 5,

    'X' : 10,

    'L' : 50,

    'C' : 100,

    'D' : 500,

    'M' : 1000

}

def func(x):

    arr = []

    i = 0

    res = 0

    j = i+1

    for z in x:
        arr.append(list1[z])

    while i < len(arr):
        if arr[i] >= arr[j]:

            res += arr[i]

        elif arr[i] < arr[j]:

            res+= arr[i]*-1

        i+=1

print(func('VIII'))

还请注意,您的代码中的

print(...)
不会打印任何内容,因为您没有从该函数返回任何值。

要在函数中返回一些东西:

return ...
。请注意,这将停止该功能。

© www.soinside.com 2019 - 2024. All rights reserved.