索引超出范围错误,有人可以告诉我哪里出错了

时间:2016-08-07 17:55:54

标签: python indexing

到目前为止,这是我的功能:

def fizzbuzz(intList):   
    strList = list[]
    for i in range(0,len(intList)):
        if intList[i] % 3== 0 and intList[i] % 5==0:
            strList[i] = "FizzBuzz"
        elif intList[i] % 3 == 0:
            strList[i] = "Fizz"
        elif intList[i] % 5 == 0:
            strList[i] = "Buzz"
        else:
            strList[i] = str(intList[i])
    return strList

这是我基本上应该做的事情:

  1. 对于三倍数的数字,用字符串“Fizz”替换整数。

  2. 对于五倍数的数字,请用字符串“Buzz”替换整数。

  3. 对于三和五的倍数的数字,替换整数 使用字符串"FizzBuzz"

  4. 您的函数应该将整数列表作为输入。 您的函数不应修改输入列表。 您的函数应返回包含整数和字符串的更新列表。

2 个答案:

答案 0 :(得分:0)

您正在使用strList = list()创建(很可能是)空列表,然后在不存在的索引处访问strList[i] - { {1}}为空,对其进行任何索引操作将引发strList

您应该复制原始列表,而不是IndexError(或[:],或list(intList),如果在Python 3.5上):

[*intList]

现在,当您索引strList = intList[:] 时,您将使用与您正在迭代的strList中的当前数字对应的索引。

答案 1 :(得分:0)

您根据strList的长度为intList编制索引。这只有在strList和intList的长度相同时才有效。

要创建列表,您还必须使用正确的语法list()而不是list[]

此外,您已将strList创建为空字符串,这意味着您不必使用strList[i]为每个索引分配值(看似不可能)。

此问题的解决方案是使用.append(value)。我已经创建了一个解决方案,如下所示:

def fizzbuzz(intList):
    strList = list()
    for i in range(0,len(intList)):
        if intList[i] % 3== 0 and intList[i] % 5==0:
            strList.append("FizzBuzz")
        elif intList[i] % 3 == 0:
            strList.append("Fizz")
        elif intList[i] % 5 == 0:
            strList.append("Buzz")
        else:
            strList.append(str(intList[i]))
    return strList

这里函数将创建strList,遍历给定intList中的每个值。根据值,函数会将所需的值附加到列表中。最后,返回一个基于单词和数字的新列表。