2013-10-04 149 views
1

我在代碼中遇到問題,需要將六面模具滾動1000次,然後返回模具上每個數字滾動次數的列表。Python骰子滾動模擬

該代碼運行得很好,我可以在最後得到一個列表,但我的列表一直保持有0代替四個,所以看起來我的函數沒有保持標籤數字4被滾動或它沒有被滾動在所有。

我很難過,我想也許這裏有人可以幫忙。任何和所有的幫助表示讚賞。

這是我的代碼。

def rollDie(number): 
    one = 0 
    two = 0 
    three = 0 
    four = 0 
    five = 0 
    six = 0 
    for i in range(0, number): 
     roll=int(random.randint(1,6)) 
     if roll == 1: 
      one = one+1 
     elif roll == 2: 
      two = two+1 
     elif roll == 3: 
      three = three+1 
     elif roll == 4: 
      four == four+1 
     elif roll == 5: 
      five = five+1 
     elif roll == 6: 
      six = six+1 
    return [one,two,three,four,five,six] 

回答

8

您有一個小的錯字;您正在測試的平等,而不是分配:

four == four+1 

應該是:

four = four+1 

但是,你已經有1和6之間的數字,爲什麼不說成一個索引到結果列表?這樣你就不必使用這麼多的if陳述。保持你的數據從您的變量名:

def rollDie(number): 
    counts = [0] * 6 
    for i in range(number): 
     roll = random.randint(1,6) 
     counts[roll - 1] += 1 
    return counts 
+0

好吧,現在我覺得自己很蠢製造這種愚蠢的錯誤。感謝您成爲我的拼寫檢查,儘管我感謝您的時間。 –

+0

錯誤... @MartijnPieters總是比每個人都更快地重寫這種算法,該死的:p –

-1

你應該做random.randint(1, 7),否則你將永遠不會得到6

... 
roll = random.randint(1, 7) 
+3

不,'randint()'是*包括*。你正在考慮'randrange()'。 –

+0

不,這不是包容性的。 'randint'文檔字符串說: *將隨機整數從「低」(包括)返回到「高」(獨佔)* – user278064

+0

請參閱http://docs.python.org/2/library/random.html#random .randint,'返回一個隨機整數N,使得a <= N <= b'。 –

0

我不能的Martijn皮特斯的回答改善。 :-)但是這個問題可以使用列表更方便地解決。

import random 

def rollDie(number): 
    # create a list with 7 values; we will only use the top six 
    rolls = [0, 0, 0, 0, 0, 0, 0] 
    for i in range(0, number): 
     roll=int(random.randint(1,6)) 
     rolls[roll] += 1 
    return rolls 

if __name__ == "__main__": 
    result = rollDie(1000) 
    print(result[1:]) # print only the indices from 1 to 6 

而且,這是一個有點棘手,但這裏是一個更好的方式來創造7項都設置爲零的列表:

rolls = [0] * 7 

爲什麼自己算零點?讓Python爲你完成工作更容易。 :-)

編輯:該列表是長度爲7,因爲我們想要使用索引1到6.列表中還有一個位置0,但我們不使用它。

另一種方法是將骰子卷映射到索引上。這是一個非常簡單的映射:只需減去1.因此,1的模具卷將進入列表的索引0,2的模具卷將進入索引1,依此類推。現在我們將使用列表中的每個位置。

這裏是一個版本:

import random 

def rollDie(number): 
    rolls = [0] * 6 
    for i in range(0, number): 
     roll=int(random.randint(1,6)) 
     rolls[roll - 1] += 1 
    return rolls 

if __name__ == "__main__": 
    result = rollDie(1000) 
    print(result) 
+0

爲什麼7當它是一個六面死亡? – Fatlad

+0

因爲隨機數是從1到6,但列表索引從0開始。我也可以使列表長度爲6,但是然後從每卷減去1。嗯,我會添加到答案。 – steveha

+0

對不起,回頭看我的評論是相當挑剔的,我會溜走,並責怪它缺乏睡眠...... – Fatlad

-2
import random 

def dice(): 

    print random.randint(1,6) 

dice() 
+1

如果你解釋什麼是OP有什麼問題,爲什麼你會得到更好的答案,爲什麼你的回答比其他地方更好。 – zondo