2013-04-28 80 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