2013-04-28 55 views
0

我想显示每个可能的随机数是通过在数字旁边有一个符号生成的。但它把符号在新行这样的数字之下:在python中显示随机数频率

Dice rolled: 
You rolled 2 and 4 

Roll again [y|n]? n 

Number Frequency: 
1 
2 
x 
3 
4 
x 
5 
6 

如何我可以使它显示在数字旁边的同一行的符号?

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 

回答

2

在Python3中,您可以使用可选参数end删除换行符;

print(index, end="") 

我假设你要在同一行的所有x过,在这种情况下,做同样与print(' x', end="");和循环后添加一个换行符。

+1

这将不利于OP。那么所有未计数的值也将在同一行上。 – 2013-04-28 08:58:59

0

您必须修改您的循环才能正确输出。如果循环未提前退出,则会访问for循环的else子句。

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 

例子:

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 
1

除了约阿希姆什么贴,你也可以使用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))) 
+0

+1。我喜欢谈论“集合”的每一个答案。 – StoryTeller 2013-04-28 09:08:06

+0

你写这个的方式,你不需要'roll ='y''在开始? – DSM 2013-04-28 12:30:54

+0

是的,但是这已经在原始代码中,我只是为计数器添加了位。更新。 – 2013-04-28 13:37:42

1

试试这个:

我创建了一个类掷骰子,在那里你可以自定义每个辊骰子和边的数量,以及跟踪辊。

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)) 

使用它:

>>> 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 
+0

OP使用Python 3. – DSM 2013-04-28 12:31:23

+0

@DSM将打印件固定为python 3 ... – 2013-04-28 12:53:59