我正在为作业编写黑盒测试代码。在我的函数中,输入是2d数组,int是x,int是y,int是僵尸强度。从我的起始位置,如果元素的值小于僵尸强度,我将元素的值更改为-1。我得到的那些元素邻居,上,下,左,右(非对角线)并对他们做同样的事情。我正在尝试除了,如果元素存在而不是将其添加到列表中,如果不继续。根据我的理解,使用try除了将停止添加列表中的数组中不存在的元素。这就是为什么我不知道为什么我在黑盒子测试我的代码时得到索引错误。我添加的输入,但我不知道黑盒测试使用了什么输入。
Here is my code
population = [[9, 3, 4, 5, 4], [1, 6, 5, 8, 9], [2, 3, 7, 3, 2], [4,5,1,4,3], [4, 5, 4, 3, 9]]
x = 2
y = 1
zombie = 5
def answer(population, x, y, zombie):
list = []
list.append([x,y])
while list:
print list
front_of_list = list.pop(0)
x = front_of_list[0]
y = front_of_list[1]
if population[front_of_list[0]][front_of_list[1]] <= zombie and population[front_of_list[0]][front_of_list[1]] >= 0:
population[front_of_list[0]][front_of_list[1]] = -1
if x-1 >=0:
try:
population[x-1][y]
list.append([x-1,y])
except:
pass
if y-1 >= 0:
try:
population[x][y-1]
list.append([x,y-1])
except:
pass
if x+1 < len(population):
try:
population[x+1][y]
list.append([x+1,y])
except:
pass
if y+1 < len(population[0]):
try:
population[x][y+1]
list.append([x,y+1])
except:
pass
answer(population, x, y, zombie)
print population
答案 0 :(得分:0)
根据您所做的try
测试,您的if
条款并非必要。让我们尝试简化和澄清代码,看看是否可以解决您的问题,因为我们无法直接重现它。
首先,front_of_list
和x
会继续使用y
;我们可以通过组合测试(Python特性)来简化if
子句; (x, y)
是自然元组,所以我换了它们;您重新定义了内置名称list
,因此我将其切换为array
;最后,我将测试减少到循环,以减少copy-n-paste错误的可能性。这给我们留下了:
def answer(population, x, y, zombie):
array = [(x, y)]
x_limit = len(population)
y_limit = len(population[0])
while array:
print array
x, y = array.pop(0)
if 0 <= population[x][y] <= zombie:
population[x][y] = -1
for dx in (-1, 1):
if 0 <= x + dx < x_limit:
array.append((x + dx, y))
for dy in (-1, 1):
if 0 <= y + dy < y_limit:
array.append((x, y + dy))
population = [
[9, 3, 4, 5, 4],
[1, 6, 5, 8, 9],
[2, 3, 7, 3, 2],
[4, 5, 1, 4, 3],
[4, 5, 4, 3, 9]
]
x, y = 2, 1
zombie = 5
answer(population, x, y, zombie)
print population
将其插入您的测试环境并传递确切的错误消息,如果它仍然失败。
你的代码假设是一个矩形矩阵,如果你的2D数组是不规则的,这将导致索引错误。 (需要仔细检查的东西。)
<强>更新强>
传统意义上的x是列而y是行但是你的代码(以及我的返工)却反过来了。在内部,它没有任何区别,但因为你被传递x&amp; y作为参数,从您插入的代码的角度来看,这可能意味着起点不正确并可能导致它使结果无效。 (再次,需要仔细检查。)