Reputation: 21
Write a simulation of the rolling of 2 six-sided dice. Your program should have a function Roll() that returns the sum of rolling your dice. You may assume that each of the six sides is equally likely to be rolled (that is, the dice are "fair"). Run your simulation 1000 times and report the frequency that each sum occurred.
I have this so far but my program wont seem to add up the sums. I may be completely wrong. Any help please. I think my main issue is in my printing statement. I need the output to print how many times does the sum of 2 shows, sum of 3, sum of 4, etc till 12.
def Roll():
for i in range(1000):
one = 0
two = 0
three = 0
four = 0
five = 0
six = 0
dice1= float(0)
dice2= float(0)
dice1 = random.randint(1,6)
if dice1 == 1:
one = one + 1
count= 1
return count
elif dice1 == 2:
two = two + 1
count= 1
return count
elif dice1 == 3:
three = three + 1
count= 1
return count
elif dice1 == 4:
four = four + 1
count= 1
return count
elif dice1 == 5:
five = five + 1
count= 1
return count
else:
six = six + 1
count= 1
return count
dice2 = random.randint(1,6)
if dice2 == 1:
one = one + 1
elif dice2 == 2:
two = two + 1
elif dice2 == 3:
three = three + 1
elif dice2 == 4:
four = four + 1
elif dice2 == 5:
five = five + 1
else:
six = six + 1
total = one + two + three + four + five + six
print("2", dice1 + dice2)
print("3", dice1 + dice2)
print("4", dice1 + dice2)
print("5", dice1 + dice2)
print("6", dice1 + dice2)
print("7", dice1 + dice2)
print("8", dice1 + dice2)
print("9", dice1 + dice2)
print("10", dice1 + dice2)
print("11", dice1 + dice2)
print("12", dice1 + dice2)
Upvotes: 1
Views: 10536
Reputation: 47402
Here's a quick and dirty method
from collections import Counter
import random
def roll():
return random.randint(1,6) + random.randint(1,6)
counter = Counter( roll() for _ in range(1000) )
for num, cnt in counter.iteritems():
print '%2d: %.3f' % (num, cnt / 1000.0)
which results in
2: 0.022
3: 0.063
4: 0.072
5: 0.104
6: 0.154
7: 0.174
8: 0.141
9: 0.112
10: 0.077
11: 0.057
12: 0.024
Upvotes: 1
Reputation: 32449
I already answered a friend of yours with the same assignment:
import random
from collections import defaultdict
def main():
dice = int(input("Enter the number of dice: "))
sides = int(input("Enter the number of sides: "))
rolls = int(input("Enter the number of rolls to simulate: "))
result = roll(dice, sides, rolls)
maxH = 0
for i in range(dice, dice * sides + 1):
if result[i] / rolls > maxH: maxH = result[i] / rolls
for i in range(dice, dice * sides + 1):
print('{:2d}{:10d}{:8.2%} {}'.format(i, result[i], result[i] / rolls, '#' * int(result[i] / rolls / maxH * 40)))
def roll(dice, sides, rolls):
d = defaultdict(int)
for _ in range(rolls):
d[sum(random.randint(1, sides) for _ in range(dice))] += 1
return d
main()
You can take out the parts which are useful to you. This should also cover the follow-up questions like: "How do I print it neatly" and "How do I draw a histogram".
Example:
Enter the number of dice: 2
Enter the number of sides: 6
Enter the number of rolls to simulate: 1000
2 28 2.80% ######
3 59 5.90% #############
4 84 8.40% ###################
5 96 9.60% ######################
6 155 15.50% ####################################
7 170 17.00% ########################################
8 147 14.70% ##################################
9 102 10.20% #######################
10 80 8.00% ##################
11 50 5.00% ###########
12 29 2.90% ######
Upvotes: 2