2013-10-22 131 views
-2

這裏是我的代碼蟒蛇循環保持崩潰

def time_to_end_of_world(p_spread,p_cure): 
    ...:  my_world=set_up_cities() 
    ...:  zombify(my_world,0) 
    ...:  count=0 
    ...:  while is_end_of_world(my_world)==False: 
    ...:   sim_step(my_world,p_spread,p_cure) 
    ...:   count+=1 
    ...:   return count 

和我不斷收到1爲我出

如果我將返回算出來,像這樣

def time_to_end_of_world(p_spread,p_cure): 
    ...:  my_world=set_up_cities() 
    ...:  zombify(my_world,0) 
    ...:  count=0 
    ...:  while is_end_of_world(my_world)==False: 
    ...:   sim_step(my_world,p_spread,p_cure) 
    ...:   count+=1 
    ...:  return count 

程序縮進崩潰...

有什麼想法嗎?

+0

代碼的第一個版本顯然是錯誤的,因爲它每次都在while循環的第一遍之後返回。沒有更多關於你的'sim_step'的信息,我不確定在第二個版本中可能會導致崩潰。你可能會用完內存嗎? – Blckknght

+1

您需要提供崩潰功能的代碼。由於您的程序在第一個示例中已經達到了return語句,所以您必須在is_end_of_world()或sim_step()中產生一些副作用,這會導致下一次執行。 – ChuckCottrill

回答

0

在第一個示例中,您總是在第一次進入循環時返回。

通過在循環外移動return語句,您等待is_end_of_world(my_world)==False變爲False以退出循環。它可能永遠不會,導致您的程序崩潰。

0

第一個版本只運行模擬的一個步驟。第二次嘗試運行模擬直到世界結束。因此,您的sim_stepis_end_or_world代碼在第一個步驟之後的某些步驟中出現問題。

0

該問題必須在sim_step中沒有實際更新my_world,否則is_end_of_world不會返回true。回報應該像第二個例子那樣「不縮進」。對於SIM卡的步驟和is_end_of_world

+0

DEF is_end_of_world(市): HOW_MANY = 0在城市 城市: 如果城市[1] == TRUE: HOW_MANY = + 1如果 == HOW_MANY LEN(城市): 返回true 否則: 返回False – user2908433

+0

if sim_step(cities,p_spread,p_cure): 索引,城市枚舉(城市): if(city [1] == True)和(numpy.random.rand() user2908433

+0

好的,所以我沒有看到實際指定城市的代碼[x] [1] = True。我認爲這是殭屍。所以檢查一下。也許這個世界還沒有結束。你需要在你的主循環「maxsteps」中有另一個計數器並運行它1000,然後打印出城市中的值,看看他們在做什麼 – AwokeKnowing

1

很可能有人會從今年這麼看這個職位代碼....

我在做同樣的任務,你,和遇到同樣的問題 - 然而,我找到了修復程序。問題在於sim_step()中的numpy.random.randint()。

隨機整數函數不包括圓括號中的整數,所以你的循環永遠不會結束,因爲它永遠不會感染城市15;如果使用numpy.random.randint(15),則只能達到14。更改爲(16)並且應該修復。

Cheers