索引错误:字符串索引超出范围 -

时间:2017-10-20 23:45:43

标签: python

    [{
      "a": "Mon",
      "type": [{
        "b": 1
      }, {
        "b": 3
      },
      {
        "b": 2
      }]
    }, 
    {
      "a": "Tue",
      "type": [{
        "b": 40
      },
      {
        "b": 50
      }]
    }, {
      "a": "Wed",
      "type": [{
        "b": 30
      }]
    }]

我不知道,每次我运行程序时,都说它超出了范围? 我怎样才能解决这个问题? (另外,忘了说问题,如果找到“*”则返回j + 1和i + 1)

2 个答案:

答案 0 :(得分:4)

对于for循环,您不需要在循环体中递增迭代器,因为它会在每个循环后自动更新为新值(在这种情况下,自分配后增量为1)它以{1}的步长迭代range

换句话说,这些行是不必要的:

j += 1
i += 1

此外,根据您编辑的问题,您似乎想要返回找到的(i+1, j+1)的坐标*。在那种情况下:

1)如果你想只返回你能找到的第一个*坐标,并立即退出该功能,你可以这样做:

if star[j][i] == '*':
   return (j+1, i+1)

2)如果要返回数组中所有*的坐标,可以在构建循环之前创建新变量(如空列表),并且每次运行{ {1}}循环,将找到的for的{​​{1}}和i+1作为子元组/列表存储到该变量中(使用j+1)。换句话说,就像这样:

*

在任何情况下,您的迭代器(appendfound_coordinates = [] for i in range(len(board)): for j in range(len(board)): if star[i][j] == '*': found_coordinates.append((j+1, i+1)) )要么立即返回,要么存储在另一个对象中,并且不应该在其中修改(使用i或其他内容) j循环。

答案 1 :(得分:0)

你应该从你的代码中删除j + = 1和i + = 1并修改你的回报:return(j + 1,i + 1)。我想那就是你想做的事。

 if star[j][i] == '*': 
         return [j+1,i+1]