2013-10-22 88 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