[{
"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)
答案 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
)。换句话说,就像这样:
*
在任何情况下,您的迭代器(append
和found_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]