我在使用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