2017-04-03 5 views
1

を反復:Pythonのリスト内包し、私のようなデザインのような「グリッド」を持つファイルを与えられた

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(1平方キロあたりの損失率)、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] 

の残りの部分については行は更新されますが、更新リストを反復する方法はわかりません。私はそれが十分に簡単だと信じていますが、私は細部を欠いています。

+2

私はかなり混乱しています。勝つ最後のラインを過ぎて行くことについて話します。 1行(行)の結果が次の行(行)に影響を与えるべきか? –

+0

また、あなたはフロートを使ってあなたのポケモンを割り振るべきですか?または、可能な余りを行全体に分散して、整数の割り当てを行う必要がありますか? –

+0

@AustinHastings各番号の「グリッド」の2行目[2,0,1,3,0]は、攻撃するポケモンの数から減算する必要があります。だから1行の結果は次の行に影響する必要があります。フロートとして保管されているポケモンについては、私の教授はこれらの「ポケモン」は突然変異していると言いました。そのため、一部のポケモンは完全なポケモンではないかもしれません。非常に奇妙です。 – Cabbage363

答えて

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 

。グリッド内の各行を繰り返し処理し、各行に対して、各列に対して反復処理を行い、攻撃者の行の対応する列からグリッドの「コスト」を差し引きます。

さらに、「1平方キロメートル当たりの損失」を減算します。私は確信していませんが、これはそれが意味するものであると私は推測しています。基本的にp = 20の場合、1平方キロあたりの損失は-20%になるため、倍率は1.0 - 0.20 = 0.80になります。

注意:これは、地形による損失の前に、1平方キロメートルあたりの損失を適用します。そして、それらの損失を最初の広場にも適用します。問題のステートメントに応じて、注文を変更したり、損失を最初または最後の四角に適用するのをスキップしたりすることができます。

+0

ありがとうございます。 「p」がどのように適切に機能しているのか説明していないようですが、答えの残りの部分は必要な出力を得るために操作することができました。ありがとう、結果を示すために別の質問で最終コードを提出します。 – Cabbage363

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」はパーセンテージ、lossPerSquareとして使用されるようになったため0とn間のランダムな整数として作用する変数。ポケモンを攻撃する最終的な結果は(攻撃ポケモン - コスト1平方キロメートル) - (攻撃ポケモン* lossPerSquare)だった。また、忘れてしまったパーセンテージの前にコストが必要でした。

ありがとうございます。

関連する問題