我在使用Python停止迭代时遇到了一些麻烦。此问题在功能中发生:如果语句正确时如何停止迭代?
for z in range(w.steps):
for i in range(1,w.x-1):
for j in range(1,w.y-1):
print (i, j)
for r in data.c:
if w.world[i][j] in r:
print r
ind = data.c.index(r)
print ind
if w.world[i-1][j] in data.n[ind]:
if w.world[i][j+1] in data.e[ind]:
if w.world[i+1][j] in data.s[ind]:
if w.world[i][j-1] in data.w[ind]:
w.world[i][j] = data.cc[ind]
步数(第一个for
循环)由用户提供。接下来的两个for
环是通过两个迭代 - 维数组(x
-rows,y
-cols):
for i in range(1,w.x-1):
for j in range(1,w.y-1):
(打印仅用于控制) 对于阵列中的每个小区我wanto以检查其值。我把所有可能的值(假设值= 14)data.c列表,它看起来像一个:
li = [[2],[14,23],[4]]
因此指令:
for r in data.c:
if w.world[i][j] in r:
我想先当true
停止迭代会出现。如果函数将先出手平等的,我要指派其中包含其名单的指数,并做其他声明:
ind = data.c.index(r)
if w.world[i-1][j] in data.n[ind]:
if w.world[i][j+1] in data.e[ind]:
if w.world[i+1][j] in data.s[ind]:
if w.world[i][j-1] in data.w[ind]:
w.world[i][j] = data.cc[ind]
如果所有的人都true
,我想执行的最后一个指令(分配),和去到阵列中的下一个单元格。但是,如果其中至少有一个是false
,我想回去,并寻求data.c
列表中的下一个命中(可能有不止一个)。列表中有值得肯定的所有可能性。关键是要使用第一个匹配的。
我试过1个单元的函数,我得到的索引比预期的多得多,我不知道为什么。从我的意见该阵列一个单元的输出是什么:
(1, 1) # print(i,j)
[0] # print r
3 # print data.c.index(r)
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
[0]
3
我会很感激的任何帮助,因为我负责的这个算法很长一段时间(我在编程初学者)。
一个好的经验法则:如果你需要9个级别的缩进,考虑重构你的代码。 – 2011-04-02 00:12:48
我真的建议你去找一些Python书(真的 - 任何一本书)并阅读它。通读全部内容。通过例子学习,即使不知道即使是一半的语法结构也是非常痛苦的。毫无意义。这就是我被介绍给我的第一语言 - 帕斯卡,我想我失去了很多时间。 – julkiewicz 2011-04-02 00:22:30
感谢所有的建议,我会重构我的代码。 我知道最好的方法是首先阅读整本书,但事实是我们有一些项目需要为课程做,有时不幸的是没有时间阅读全部内容。 – 2011-04-02 00:28:21