0

我想显示通过在数字旁边有一个符号来生成每个可能的随机数的次数。但它将符号放在数字下方的新行上,如下所示:

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
4

4 回答 4

2

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

print(index, end="")

我假设您也希望所有x在同一行上,在这种情况下,对 the 执行相同操作print(' x', end="");并在循环后添加换行符。

于 2013-04-28T08:51:13.453 回答
1

除了 Joachim 发布的内容之外,您还可以使用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)))
于 2013-04-28T09:01:31.490 回答
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
于 2013-04-28T09:12:10.487 回答
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
于 2013-04-28T09:00:55.347 回答