Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.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_List_Python 3.x_Iteration - Fatal编程技术网

Python列表理解和迭代

Python列表理解和迭代,python,list,python-3.x,iteration,Python,List,Python 3.x,Iteration,我收到了一个类似“网格”设计的文件,例如: 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]

我收到了一个类似“网格”设计的文件,例如:

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]
我必须重复使用:

[18.0, 20.0, 19.0, 17.0, 20.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


请注意:这适用于因地形造成的任何损失之前的每平方损失。它甚至将这些损失应用于第一个正方形。根据问题陈述,您可能需要更改顺序,和/或跳过将损失应用到第一个或最后一个方块。

根据评论,我认为您需要的是如下内容:

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


请注意:这适用于因地形造成的任何损失之前的每平方损失。它甚至将这些损失应用于第一个正方形。根据问题陈述,您可能需要更改顺序,和/或跳过将损失应用到第一个或最后一个方块。

在此基础上,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)。此外,成本确实需要在损失百分比之前,我忘了提到这一点


谢谢。

除此之外,奥斯汀·黑斯廷斯能够帮助解决我的问题。我必须根据我想要的结果编辑它。代码如下:

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)。此外,成本确实需要在损失百分比之前,我忘了提到这一点


谢谢。

我很困惑。你说要通过最后一条线才能获胜。一行(行)的结果是否会影响下一行(行)?同样,你是否应该使用浮动来分配你的口袋妖怪?或者你应该进行整数分配,可能的余数分布在整行?@Austinghts“网格”的第二行[2,0,1,3,0],因为每个数字都必须从攻击口袋妖怪的数字中减去。因此,是的,一行的结果一定会影响下一行。至于以浮点数形式存储的口袋妖怪,我的教授说,这些“口袋妖怪”是变异的,所以有些可能不是“完整”的口袋妖怪,而使用浮点数。这很奇怪。如果这是问题的话,你可以使用生成器来迭代改变iterable。我很困惑。你说要通过最后一条线才能获胜。一行(行)的结果是否会影响下一行(行)?同样,你是否应该使用浮动来分配你的口袋妖怪?或者你应该进行整数分配,可能的余数分布在整行?@Austinghts“网格”的第二行[2,0,1,3,0],因为每个数字都必须从攻击口袋妖怪的数字中减去。因此,是的,一行的结果一定会影响下一行。至于以浮点数形式存储的口袋妖怪,我的教授说,这些“口袋妖怪”是变异的,所以有些可能不是“完整”的口袋妖怪,而使用浮点数。这很奇怪。如果这是问题的话,你可以使用生成器来迭代改变iterable。非常感谢。我似乎没有解释“p”是如何正常工作的,但在剩下的答案中,我能够操纵它以获得我需要的输出。谢谢,我将在另一个问题中提交最终代码以显示结果。非常感谢。我似乎没有解释“p”是如何正常工作的,但在剩下的答案中,我能够操纵它以获得我需要的输出。谢谢,我将在另一个问题中提交最终代码以显示结果。