2013-05-28 65 views
0

我是一名初學者,我想知道是否有更簡單的方式在Python中編寫此代碼。我假設某種類型的字典,但我不知道如何寫出來。 幾天前我正在巡航,我玩胡扯。我想知道賠率是否有點正確。所以,我寫了這個,但我知道有一個更簡單的方法。我該如何簡化此代碼

import random 

dice2 = 0 
dice3 = 0 
dice4 = 0 
dice5 = 0 
dice6 = 0 
dice7 = 0 
dice8 = 0 
dice9 = 0 
dice10 = 0 
dice11 = 0 
dice12 = 0 

for i in range(100000): 
      dice1 = random.randint(1,6) 
      dice2 = random.randint(1,6) 
      number = dice1 + dice2 
      #print(dice1) 
      if number == 2: 
         dice2 +=1 
      elif number == 3: 
         dice3 += 1 
      elif number == 4: 
         dice4 += 1 
      elif number == 5: 
         dice5 += 1 
      elif number == 6: 
         dice6 += 1 
      elif number == 7: 
         dice7 += 1 
      elif number == 8: 
         dice8 += 1 
      elif number == 9: 
         dice9 += 1 
      elif number == 10: 
         dice10 += 1 
      elif number == 11: 
         dice11 += 1 
      elif number == 12: 
         dice12 += 1 

total = dice2+dice3+dice4+dice5+dice6+dice7+dice8+dice9+dice10+dice11+dice12 

在此結束時,它只打印出2-12數字的命中百分比。

+1

瞭解如何使用包含數據結構...您可以使用此列表,元組簡化,或字典。 –

+3

順便提一句,「骰子」的單數就是「死」。 – Cairnarvon

回答

3
from random import randint 

dice = [0]*11 
for i in range(100000): 
    dice[randint(1,6)+randint(1,6)-2] += 1 

total = sum(dice) #it is 100000, of course 
for i, v in enumerate(dice, 2): 
    print('{0}: {1}%'.format(i, v*100.0/total)) 
+1

我選擇了這個作爲正確的答案,但所有其他答案也適用,但我現在對我的基本理解了解最多。謝謝。 – nrvswreck

4

我會用Counter,因爲這就是它被用於製作:

from random import randint 
from collections import Counter 

counts = Counter(randint(1, 6) + randint(1, 6) for i in range(100000)) 
total = sum(counts.values()) 
number_of_tens = counts[10] 
+0

就我個人來說,看看你在那裏做了些什麼有點困難。 – Elazar

+0

這個答案只是讓我失望! BOOOOOM! – nrvswreck

+0

@Elazar我只是爲了有一個鏈接到python文檔的意見就在那裏。相反,我已將它添加到答案中。 –

2
import random 

def roll(n=6): 
    return random.randint(1, n) 

dice = dict.fromkeys(range(2, 13), 0) 

for i in range(100000): 
    number = roll() + roll() 
    dice[number] += 1 

total = float(sum(dice.values())) 
for k,v in dice.items(): 
    print "{}, {:.2%}".format(k, v/total) 
+0

或者'而不是'.fromkeys',你可以使用'collections.defaultdict(int)' –

+1

@AlexL,但是不能保證所有的鍵都會在那裏 –

+0

這是我的第二選擇,從我目前的理解。謝謝。 – nrvswreck