使用python 2.7。運行循環monte carlo sim時拉鍊的麻煩; python
我確定代碼有點笨拙,但我會盡量簡單地解釋它。
我有兩個列表:
T = [[1,0], [1,0], [0,5]]
S = [[1], [3], [2]]
我需要從b添加相應的值,以T中的對應列表的末尾,所以使用拉鍊,我把它們放在一起。
然後,我計算每個列表的第一個值從第三個減去的結果,並使用另一個zip函數附加該值。所以當我運行我的函數時,T變量現在看起來像[[1,0,1,0],[1,0,3,-2],[0,5,2,-2]] 。
然後我有一系列的if語句,如果某些值高於或低於其他值,則列表返回勝利,損失或平局。
我想多次模擬我的函數(starterTrans)的結果。問題是,當我使用:
def MonteCarlo(T, S, x):
for i in range(0, x):
starterTrans(T, S)
對於每一個模擬我得到那麼通過模擬T A不同版本T的第一次在每個列表(四)個元素的適當數量,但經過每一個都會經過,越來越多的變量被添加。
我需要一種方法將T鎖定到原來的四個變量,無論我想使用它多少次。我正在努力尋找一種方式來這樣做。有任何想法嗎?
我知道我的代碼是令人費解的,但在這裏它是如果它可以幫助任何人都跟着我試圖說明我的問題:
def starterTrans(team, starter):
wins = 0
losses = 0
nd = 0
random.shuffle(team)
for t, s in zip(team, starter):
t.extend(s)
score_add(team, exit_score(team, starter))
length = len(starter)
for i in range(0, length):
if team[i][4] > 0 and (team[i][1] > -team[i][4]) and team[i][2] >= 5:
wins += 1
elif team[i][4] < 0 and (team[i][1] <= -team[i][4]):
losses += 1
elif (team[i][4] <= 0 and team[i][1] >= -team[i][4]):
nd += 1
return wins, losses, nd
def score_add(team, exit_scores):
for t, e in zip(team, exit_scores):
t.append(e)
return team
def exit_score(team, starter):
exit_scores = []
length = len(starter)
for i in range(0, length):
score = team[i][0]-team[i][3]
exit_scores.append(score)
return exit_scores
def MonteCarlo(team, starter, x):
for i in range(0, x):
starterTrans(team, starter)
感謝您的幫助。
我想我可能已經修好了。 –
如果我更改了代碼,starterTrans只需要一個參數(啓動器) –
然後我有團隊= [[1,0],[1,0],[0,5]],團隊始終保持不變。 –