Reputation: 1
I want to display how many times each of the possible random numbers were generated by having a symbol next to the number. But it is putting the symbols on a new line beneath the number like this:
Dice rolled:
You rolled 2 and 4
Roll again [y|n]? n
Number Frequency:
1
2
x
3
4
x
5
6
How could I make it display the symbol on the same line beside the number?
import random
diceCount = [0,0,0,0,0,0,0]
roll='y'
while roll=='y':
die1=random.randint(1,6)
die2=random.randint(1,6)
diceCount[die1] = diceCount[die1] + 1
diceCount[die2] = diceCount[die2] + 1
print('Dice rolled:')
print('You rolled',die1,'and',die2)
if roll=='y':
roll=input('\nRoll again [y|n]? ')
while roll!='y' and roll!='n':
roll=input("Please enter either 'y' or 'n': ")
if roll=='n':
print('\nFace Freqeuncy:')
index=1
while (index<len(diceCount)):
print(index)
for number in range (diceCount[index]):
print(' x')
index+=1
Upvotes: 0
Views: 984
Reputation: 174624
In addition to what Joachim posted, you can also use collections.Counter
:
from collections import Counter
rolls = []
roll = 'y'
while roll=='y':
die1=random.randint(1,6)
die2=random.randint(1,6)
rolls.append(die1)
rolls.append(die2)
print('Dice rolled:')
print('You rolled',die1,'and',die2)
if roll=='y':
roll=input('\nRoll again [y|n]? ')
while roll!='y' and roll!='n':
roll=input("Please enter either 'y' or 'n': ")
counted_rolls = Counter(rolls)
for i range(1,7):
print("{} {}".format(i,'x'*counted_rolls.get(i,0)))
Upvotes: 1
Reputation: 43437
Try this:
I have created a class for rolling dice, where you can customize the amount of dice in each roller and the sides, as well as keep track of rolls.
import random
from collections import defaultdict
class roller():
def __init__(self, number_of_dice=2, dice_sides=6):
self.dice = defaultdict(dict)
for die in range(number_of_dice):
self.dice[die]['sides'] = dice_sides
self.dice[die]['count'] = dict((k,0) for k in range(1, dice_sides+1))
def roll(self, times=1):
print ("Rolling the Dice %d time(s):" % times)
total = 0
for time in range(times):
roll_total = 0
print ("Roll %d" % (time+1))
for die, stats in self.dice.items():
result = random.randint(1, stats['sides'])
roll_total += result
stats['count'][result] += 1
print (" Dice %s, sides: %s, result: %s" % (die, stats['sides'], result))
print ("Roll %d total: %s" % (time+1, roll_total))
total += roll_total
print ("Total result: %s" % total)
def stats(self):
print ("Roll Statistics:")
for die, stats in self.dice.items():
print (" Dice %s, sides: %s" % (die, stats['sides']))
for value, count in stats['count'].items():
print (" %s: %s times" % (value, count))
Using it:
>>> a = roller()
>>> a.roll(4)
Rolling the Dice 4 time(s):
Roll 1
Dice 0, sides: 6, result: 6
Dice 1, sides: 6, result: 3
Roll 1 total: 9
Roll 2
Dice 0, sides: 6, result: 3
Dice 1, sides: 6, result: 3
Roll 2 total: 6
Roll 3
Dice 0, sides: 6, result: 1
Dice 1, sides: 6, result: 6
Roll 3 total: 7
Roll 4
Dice 0, sides: 6, result: 5
Dice 1, sides: 6, result: 4
Roll 4 total: 9
Total result: 31
>>> a.stats()
Roll Statistics:
Dice 0, sides: 6
1: 1 times
2: 0 times
3: 1 times
4: 0 times
5: 1 times
6: 1 times
Dice 1, sides: 6
1: 0 times
2: 0 times
3: 2 times
4: 1 times
5: 0 times
6: 1 times
Upvotes: 1
Reputation: 180887
In Python3, you can use the optional parameter end
to remove the newline;
print(index, end="")
I'm assuming that you'll want all the x
on the same line too, in that case, do the same with the print(' x', end="");
and add a newline after the loop.
Upvotes: 2
Reputation: 7944
You must modify your loop to have it output properly. The else clause of a for loop is visited if the loop doesn't exit prematurely.
while (index<len(diceCount)):
print(index,end="") #let the next print appear on same line
for number in range (diceCount[index]):
print(' x',end="") #print the correct number of x's on the same line
print() #we now need to print a newline
index+=1
Examples:
Dice rolled: You rolled 1 and 5 Roll again [y|n]? n Face Freqeuncy: 1 x 2 3 4 5 x 6 Dice rolled: You rolled 6 and 6 Roll again [y|n]? y Dice rolled: You rolled 3 and 4 Roll again [y|n]? n Face Freqeuncy: 1 2 3 x 4 x 5 6 x x
Upvotes: 0