【发布时间】:2021-03-12 06:15:06
【问题描述】:
我一直在查看堆栈并花了几个小时浏览以尝试解决此问题。
任务是:
编写一个名为 dicerolls 的 Python 函数来模拟掷骰子。你的函数应该有两个参数:骰子的数量 k 和掷骰子的次数 n。该函数应模拟随机滚动 k 骰子 n 次,跟踪每个总面值。然后它应该返回一个字典,其中包含每个可能的总面值出现的次数。因此,将函数调用为 diceroll(k=2, n=1000) 应该返回一个字典,如:{2:19,3:50,4:82,5:112,6:135,7:174,8:133 ,9:114,10:75,11:70,12:36}
到目前为止,我已经设法定义了 dice 函数,但我正在努力将 k(掷骰数)添加到 dicerolls 函数中。到目前为止我所拥有的:
from numpy import random
def dice():
return random.randint(1, 7)
def diceroll(number_of_times):
counter = {n : 0 for n in range(2, 13)}
for i in range(number_of_times):
first_dice = dice()
second_dice = dice()
total = first_dice + second_dice
counter[total] += 1
return counter
diceroll(1000)
输出: {2:19, 3:49, 4:96, 5:112, 6:150, 7:171, 8:151, 9:90, 10:89, 11:47, 12:26}
欢迎提出任何建议。
回答后编辑代码
import random
def diceroll(k, n, dice_sides=6):
# prepare dictionary with zero values for all possible results
counter = {n : 0 for n in range(k, k*dice_sides + 1)}
# roll all the dice
for i in range(n):
dice_sum = sum(random.choices(range(1, dice_sides + 1), k = k))
counter[dice_sum] += 1
return counter
diceroll(k=2, n=1000)
输出: {2:20, 3:49, 4:91, 5:116, 6:140, 7:138, 8:173, 9:112, 10:72, 11:65, 12:24}
【问题讨论】: