我有一个程序可以生成“扫雷板”值列表。列表中的每个项目现在都是字符串“0”或“BOMB”。
我一直在努力提高程序效率,抽象和分解,递归等等。显然我可以挂入 for 循环并从那里移动(我已经完成了lol) ,但我希望这能够在(半)大规模工作。
我如何能够有效地计算给定列表中单元格中的炸弹数量?
class Sweeper:
'''
Sweeper(xin, yin) : xin = far right x int, yin = bottom y int
0
|
y|_____
0 x
'''
def __init__(self, xin, yin):
'''generates values, number of mines and starts gears'''
self.values = list("0" * xin * yin)
#self.mines = int(yin * xin ** 1.11 - yin * xin)
self.genmines(self.mines)#Start Generation
def genmines(self, amt):
'''Generates Mines'''
for ite in range(amt):
self.values[random.randint(0, len(self.values) - 1)] = 'BOMB'
def getvalues(self):
######
Sweeper(9, 9).getvalues()
将输出:
['0', '0', '0', '0', 'BOMB', '0', '0', '0', '0', '0', '0', 'BOMB', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', 'BOMB', '0', 'BOMB', '0', '0', '0', '0', '0', '0', 'BOMB', '0', 'BOMB', '0', 'BOMB', '0', 'BOMB', '0', '0', '0', 'BOMB', '0', '0', 'BOMB', '0', '0', '0', 'BOMB', 'BOMB', 'BOMB', '0', 'BOMB', '0', '0', 'BOMB', '0', '0', '0', '0', '0', '0', '0', '0', 'BOMB', '0', '0', '0', '0', 'BOMB', '0', '0', '0', 'BOMB', 'BOMB', '0', '0', 'BOMB', '0', '0']
我有一些方程式的想法使用似乎有用的(x)变量,但我不知道如何有效地实现它们。如果在评论中提示,将详细阐述它们,因为我觉得他们只会堵塞帖子。谢谢!
答案 0 :(得分:0)
<iframe src="http://players.brightcove.net/4338955589001/Bkh63tBcx_default/index.html?videoId=5347595845001" width="320" height="240" allowfullscreen></iframe>
这将为您创建一个地图。 您可以使用
访问地图索引from random import randint
minelist = []
cols = 20
rows = 20
chanceofbomb = 10
for x in range(cols):
xlist = []
for y in range(rows):
isBomb = randint(0,chanceofbomb)
if isBomb == 0:
xlist.append("Bomb!")
else:
xlist.append('0')
minelist.append(xlist)
实施例
minelist[requiredx][requiredy]
答案 1 :(得分:0)
def findValue(x, y):
valueOfSpot = 0
for xa in range(cols):
for ya in range(rows):
if abs(minelist[xa] - (x*10)) < 2 and abs(minelist[ya] - (y*10)) < 2:
valueOfSpot += 1
minelist[x][y] = valueOfSpot
这可能会使过程更快。
for xb in range(cols):
for yb in range(rows):
findValue(xb, yb)