我得到了一个像'grid'这样设计的文件,如:
5,20,13
2,0,1,3,0
1,2,1,2,1
2,1,2,1,0
0,2,0,2,2
0,3,3,3,1
制作攻击模拟器。 并且第一行代表n(网格大小),p(每平方损失百分比),k(必须使其超过最后一行才能赢得的总数)。
我遇到的问题是模拟部分,我理解如何迭代代码行并进行数学编辑,例如:
numAP = numAttackPokemon
gridRules = gymData[0]
gymGrid = gymData[1]
n = gridRules[0]
p = gridRules[1]
k = gridRules[2]
numPRC = float(numAP/n)
numPRCR = [numPRC] * n
for numRow in range(0, n):
gymGridNum = gymGrid[numRow]
aList = []
for num in gymGridNum:
numDefSub = numPRCR[num] - gymGridNum[num]
if numDefSub <= 0:
print("You have failed, restart the program and try again!")
break
else:
aList.append(numDefSub)
returns:
[18.0, 20.0, 19.0, 17.0, 20.0]
[19.0, 18.0, 19.0, 18.0, 19.0]
[18.0, 19.0, 18.0, 19.0, 20.0]
[20.0, 18.0, 20.0, 18.0, 18.0]
[20.0, 17.0, 17.0, 17.0, 19.0]
从某种意义上说,这是正确的。但是我也必须为每个网格方格应用一个“随机”百分比丢失,这是我已经完成的(不是在那行代码中,删除它以预先计算这个问题)。我想说的是,我必须编辑此代码的第一行(扣除数量和百分比损失),然后在网格的其余部分使用该行重复数学。我对如何保留,编辑和使用网格中每一行的列表感到有些迷茫。
正确的输出是这样的,但没有随机百分比损失:(numPRC = 100)
[18.0, 20.0, 19.0, 17.0, 20.0]
[17.0, 18.0, 18.0, 15.0, 19.0]
[15.0, 17.0, 16.0, 14.0, 19.0]
[15.0, 15.0, 16.0, 12.0, 17.0]
[15.0, 12.0, 13.0, 9.0, 16.0]
我必须重复使用:
[18.0, 20.0, 19.0, 17.0, 20.0]
对于其余的行,但我不确定如何使用更新列表进行迭代。我相信这很简单,但我错过了一个小细节。
答案 0 :(得分:0)
根据评论,我认为你需要的是这样的:
attackers = [ numAttackPokemon / n ] * n
lost_per_square = 1.00 - p / 100.0
for row in grid:
for col, cost in enumerate(row):
attackers[col] *= lost_per_square
attackers[col] -= cost
这将构建攻击口袋妖怪的“行”,每列中的编号相同。然后它将迭代网格中的每一行,并且每行将遍历每一列,从攻击者行中的相应列中减去网格的“成本”。
此外,它还减去了“每平方损失”。我猜这就是这个意思,虽然我不确定。基本上,如果p = 20
,那么每平方的损失将是-20%,因此乘数将是1.0 - 0.20 = 0.80。
请注意:这适用于因地形造成的任何损失之前的每平方损失。它甚至将这些损失应用到第一个方块。您可以更改订单,和/或跳过将损失应用到第一个或最后一个方格,具体取决于问题陈述。
答案 1 :(得分:0)
在此之上,Austin Hastings能够帮助解决我的问题。我必须编辑它以获得我想要的输出。代码如下:
numAP = numAttackPokemon # Number of Mutant Pokemon they wish to attack with
gridRules = gymData[0] # Rules such as n,p,k
gymGrid = gymData[1] # Gym Array
n = gridRules[0] # Size of grid
p = gridRules[1] # Number of defending Pokemon
k = gridRules[2] # Number of War-Pokemon that must pass
attPoke = [numAttackPokemon / n] * n # Number of Pokemon Per-Column-Row, Float value
randPerc = np.random.randint(0, n)
lossPerSquare = randPerc / 100.0
for row in gymGrid:
for col, cost in enumerate(row):
attPoke[col] -= cost
attPoke[col] = attPoke[col] - (attPoke[col] * lossPerSquare)
注意:变量“p”充当 0和n 之间的随机整数,以 lossPerSquare 为百分比。然后,总攻击口袋妖怪的最终结果是(攻击口袋妖怪 - 每平方成本) - (攻击宠物小精灵* lossPerSquare)。此外,成本确实需要在失去的百分比之前,我忘了提及。
谢谢。