Rachel
Rachel

Reputation: 383

summing the dice trials and histogram plot

I am stuck in a code in python which takes in number of dices and number of rolls and returns the sum of numbers obtained. It should also print the histogram of the sum. I am stuck in the first part of the code. Can someone help me fix this? Not sure where i am going wrong. Any help for the second part (returning histogram) would be helpful for me to learn it in python.

from random import choice

def roll(rolls,dice):
    d = []
    for _ in range(rolls):
        d[sum(choice(range(1,7)) for _ in range(dice))] += 1

return(d)

Upvotes: 0

Views: 1574

Answers (3)

inspectorG4dget
inspectorG4dget

Reputation: 114035

This should do it

import random

def rolls(N, r):  # N=number of dice. r=number of rolls
    myDie = [1,2,3,4,5,6]
    answer = {}
    for _rolling in range(r):
        rolls = []
        for _die in range(N):
            rolls.append(random.choice(myDie))
        total = 0
        for roll in rolls:
            total += roll
        if total not in answer:
            answer[total] = 0
        answer[total] += 1
    return answer

Upvotes: 0

cjohnson318
cjohnson318

Reputation: 3253

Try this,

from random import choice
import pylab

def roll( rolls, dice ):
s = list()
for d in range( dice ):
    for r in range( rolls ):
        s.append( choice( range(1,7) ) )
return s

s = roll( rolls, dice )

sum_of_rolls = sum( s )

# then to plot..
pylab.hist( s )

Upvotes: 0

jonrsharpe
jonrsharpe

Reputation: 122115

Your problem here is that you can't arbitrarily index into an empty list:

l = []
l[13] += 1 # fails with IndexError

Instead, you could use a defaultdict, which is a special type of dictionary that doesn't mind if a key hasn't been used yet:

from collections import defaultdict
d = defaultdict(int) # default to integer (0)
d[13] += 1 # works fine, adds 1 to the default

or Counter, which is designed for cases like this ("provided to support convenient and rapid tallies") and provides extra handy functions (like most_common(n), to get the n most common entries):

from collections import Counter
c = Counter()
c[13] += 1

To manually use a standard dict to do this, just add a check:

d = {}
if 13 in d: # already there
    d[13] += 1 # increment
else: # not already there
    d[13] = 1 # create

Upvotes: 1

Related Questions