什么是更有效的统计随机数并打印它们的方法?

2024-09-29 22:26:05 发布

您现在位置:Python中文网/ 问答频道 /正文

所以。。。代码做了我想让它做的事。虽然,据我所知,它似乎非常低效,我已经告诉它是。基本上,我掷2个骰子,所以它的范围从2到12(分别相加)。然后我会计算是否加起来2,3,4,等等。按照我的方法,我做了11个变量和11个if和elif语句,这些语句非常冗余,似乎效率低下。你知道吗

我不知道如何使它更有效,或者如果有一个更Python的方式做这件事。你知道吗

def distribution_of_rolls(amount: int) -> str:
    count2 = ''
    count3 = ''
    count4 = ''
    count5 = ''
    count6 = ''
    count7 = ''
    count8 = ''
    count9 = ''
    count10 = ''
    count11 = ''
    count12 = ''
        countList = [count2, count3, count4, count5, count6, count7, count8, count9, count10, count11, count12
]
resultStr = ''
for _ in range(amount):
    roll = roll2dice()
    if roll == 2:
        countList[0] += '*'
    elif roll == 3:
        countList[1] += '*'
    elif roll == 4:
        countList[2] += '*'
    elif roll == 5:
        countList[3] += '*'
    elif roll == 6:
        countList[4] += '*'
    elif roll == 7:
        countList[5] += '*'
    elif roll == 8:
        countList[6] += '*'
    elif roll == 9:
        countList[7] += '*'
    elif roll == 10:
        countList[8] += '*'
    elif roll == 11:
        countList[9] += '*'
    elif roll == 12:
        countList[10] += '*'

    for i in range(2, 13):
        resultStr += (str(i) + ':    ' + str(len(countList[i - 2])) + ' ' + countList[i - 2] + "\n")

    print(resultStr)
    distribution_of_rolls(200)

结果如下(没有问题,这是我想要的):

2:    3 ***
3:    11 ***********
4:    17 *****************
5:    18 ******************
6:    22 **********************
7:    37 *************************************
8:    32 ********************************
9:    23 ***********************
10:    15 ***************
11:    14 **************
12:    8 ********

Tags: ofif语句amountdistributionrollrollselif
1条回答
网友
1楼 · 发布于 2024-09-29 22:26:05

使用collections.Counter可以提高效率

>>> from collections import Counter
>>> c = Counter(roll2dice() for _ in range(200))
>>> for i in range(2,14):
        print (f'{i:2}:  {c[i]:2} {"*"*c[i]}')
... 
 2:  12 ************
 3:  20 ********************
 4:  13 *************
 5:  19 *******************
 6:  13 *************
 7:  20 ********************
 8:   9 *********
 9:  18 ******************
10:  15 ***************
11:  19 *******************
12:  22 **********************
13:  20 ********************

相关问题 更多 >

    热门问题