Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 已解决-程序不计算野外钻机的数量_Python_Minesweeper - Fatal编程技术网

Python 已解决-程序不计算野外钻机的数量

Python 已解决-程序不计算野外钻机的数量,python,minesweeper,Python,Minesweeper,我试着用python编程扫雷舰。计算被炸弹包围的区域的数量,我遇到了一个更糟糕的问题-没有错误 我的代码是: for i in range(len(bombs)): numbers[bombs[i]] = -1 if (bombs[i][0] > 0): if (numbers[(bombs[i][0]-step, bombs[i][1]+0)] != -1): numbers[(bombs[i][0]-step, bombs[i]

我试着用python编程扫雷舰。计算被炸弹包围的区域的数量,我遇到了一个更糟糕的问题-没有错误

我的代码是:

for i in range(len(bombs)):
    numbers[bombs[i]] = -1

    if (bombs[i][0] > 0):
        if (numbers[(bombs[i][0]-step, bombs[i][1]+0)] != -1):
            numbers[(bombs[i][0]-step, bombs[i][1]+0)] = numbers[(bombs[i][0]-step, bombs[i][1]+0)] + 1
            if (bombs[i][1] > 0):
                if (numbers[(bombs[i][0]-step, bombs[i][1]-step)] != -1):
                    numbers[(bombs[i][0]-step, bombs[i][1]-step)] = numbers[(bombs[i][0]-step, bombs[i][1]-step)] + 1
            if (bombs[i][1] < heigth-step-1):
                if (numbers[(bombs[i][0]-step, bombs[i][1]+step)] != -1):
                    numbers[(bombs[i][0]-step, bombs[i][1]+step)] = numbers[(bombs[i][0]-step, bombs[i][1]+step)] + 1

    if (bombs[i][0] < width-step-1):
        if (numbers[(bombs[i][0]+step, bombs[i][1]+0)] != -1):
            numbers[(bombs[i][0]+step, bombs[i][1]+0)] = numbers[(bombs[i][0]+step, bombs[i][1]+0)] + 1
            if (bombs[i][1] > 0):
                if (numbers[(bombs[i][0]+step, bombs[i][1]-step)] != -1):
                    numbers[(bombs[i][0]+step, bombs[i][1]-step)] = numbers[(bombs[i][0]+step, bombs[i][1]-step)] + 1
            if (bombs[i][1] < heigth-step-1):
                if (numbers[(bombs[i][0]+step, bombs[i][1]+step)] != -1):
                    numbers[(bombs[i][0]+step, bombs[i][1]+step)] = numbers[(bombs[i][0]+step, bombs[i][1]+step)] + 1

    if (bombs[i][1] > 0):
        if (numbers[(bombs[i][0]+0, bombs[i][1]-step)] != -1):
            numbers[(bombs[i][0]+0, bombs[i][1]-step)] = numbers[(bombs[i][0]+0, bombs[i][1]-step)] + 1

    if (bombs[i][1] < heigth-step-1):
        if (numbers[(bombs[i][0]+0, bombs[i][1]+step)] != -1):
            numbers[(bombs[i][0]+0, bombs[i][1]+step)] = numbers[(bombs[i][0]+0, bombs[i][1]+step)] + 1
范围内的i(len(炸弹)):
数字[炸弹[i]]=-1
如果(炸弹[i][0]>0):
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]+0)]!=-1):
数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]=数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]+1
如果(炸弹[i][1]>0):
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]!=-1):
数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]=数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]+1
如果(炸弹[i][1]0):
如果(数字[(炸弹[i][0]+步进,炸弹[i][1]-步进)]!=-1):
数字[(炸弹[i][0]+步骤,炸弹[i][1]-步骤)]=数字[(炸弹[i][0]+步骤,炸弹[i][1]-步骤)]+1
如果(炸弹[i][1]0):
如果(数字[(炸弹[i][0]+0,炸弹[i][1]-步骤)]!=-1):
数字[(炸弹[i][0]+0,炸弹[i][1]-步骤)]=数字[(炸弹[i][0]+0,炸弹[i][1]-步骤)]+1
如果(炸弹[i][1]
步长=字段的大小

炸弹=阵列中的所有炸弹

谢谢
[1] :

我认为这段代码有一个问题:

if(炸弹[i][0]>0):
#此炸弹不在网格最左边的列中
#打印(数字[(炸弹[i][0]-步骤,炸弹[i][1]+0)])
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]+0)]!=-1):
#左边的牢房不是炸弹,所以在它的数量上加一个
数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]=数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]+1
如果(炸弹[i][1]>0):
#这个炸弹不在网格的第一行。
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]!=-1):
#上面和左边的牢房不是炸弹,所以在其计数中加一个
数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]=数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]+1
请注意,我们只查看炸弹上方和左侧的单元,如果它不是炸弹,则添加一个,如果左侧的单元也不是炸弹。这是不正确的:对于任何炸弹,我们需要检查上面和左边的电池,看它左边的电池是否也是炸弹

您要做的是从上面的第三个
if
语句中删除缩进级别:

if(炸弹[i][0]>0):
#此炸弹不在网格最左边的列中
#打印(数字[(炸弹[i][0]-步骤,炸弹[i][1]+0)])
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]+0)]!=-1):
#左边的牢房不是炸弹,所以在它的数量上加一个
数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]=数字[(炸弹[i][0]-步进,炸弹[i][1]+0)]+1
#如果炸弹[i]左边还有另一颗炸弹,现在就可以到达这条线。
如果(炸弹[i][1]>0):
#这个炸弹不在网格的第一行。
如果(数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]!=-1):
#上面和左边的牢房不是炸弹,所以在其计数中加一个
数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]=数字[(炸弹[i][0]-步骤,炸弹[i][1]-步骤)]+1
您还可以对其他三个
if
语句进行相同的更改,这些语句处理将一个添加到其他方向的对角相邻正方形的计数中。
查看您的代码,我不确定您是否需要
-1
条件,例如
if(bombs[I][1]
。显然,这些检查试图阻止您脱离网格边缘,但额外的
-1
是不必要的。我也有点担心
步骤
:这是否等于
1
?您在检查是否从网格的右侧或底部跌落时包括了
步骤
,但在从网格的顶部或左侧跌落时不包括在内,因此如果
步骤
大于1,您可能会遇到问题。(例如,如果
步骤
为3且
炸弹[i][0]
为1,
炸弹[i][0]-步骤
将为
-2

另外,我可以从可读性的角度对您的代码提出一些建议吗?首先,你重复了很多次
bombs[i][0]
bombs[i][1]
:如果你在循环的其余部分添加行
x=bombs[i][0]
y=bombs[i][1]
你可以编写
x
y
,而不是
bombms[i][1]
。其次,您可以编写
some\u expression+=1
而不是编写
some\u expression+=1
。进行这些更改将缩短一行,例如

number[(bombs[i][0]-步骤,bombs[i][1]-步骤)]=number[(bombs[i][0]-步骤,bombs[i][1]-步骤)]+1

Tha
numbers[(x-step, y-step)] += 1