我想帮助找到一个更好的方法,使我的骰子程序的概率。你知道吗
以下是我的全部代码:
import random,collections
probabiltyOfDice = {}
rolls = 100
#Counters
counter1 = 0
counter2 = 0
counter3 = 0
counter4 = 0
counter5 = 0
counter6 = 0
for x in range(rolls):
output = random.randint(1,6)
if output == 1:
counter1 += 1
probabiltyOfDice[1] = counter1
elif output == 2:
counter2 += 1
probabiltyOfDice[2] = counter2
elif output == 3:
counter3 += 1
probabiltyOfDice[3] = counter3
elif output == 4:
counter4 += 1
probabiltyOfDice[4] = counter4
elif output == 5:
counter5 += 1
probabiltyOfDice[5] = counter5
elif output == 6:
counter6 += 1
probabiltyOfDice[6] = counter6
ordered = collections.OrderedDict(sorted(probabiltyOfDice.items()))
print(ordered)
我的方法是有效的,如果将恒定转鼓数设置为100,则输出如下:
OrderedDict([(1, 15), (2, 16), (3, 14), (4, 22), (5, 21), (6, 12)])
OrderedDict显示骰子编号以及该编号出现的次数。我可以通过使用6个计数器变量和一组if-elif
语句来解决这个问题。你知道吗
我正在使用集合库订购词典以供展示。但我希望有人能给我一个更好的方法来解决这个问题。你知道吗
显然,使用6个变量和许多if
语句可能是解决这种情况的冗长方法。你知道吗
因此,python有一个非常方便的字典子类Counter,本质上,它在计算计数方面非常快。 我精心设计了以下内容:
现在,问题是它只能在一个合理的大范围内工作。因此,为了避免创建中间列表,我们可以采用以下方法: 随机导入 从集合导入计数器
编辑:添加第三个版本(基本上是第一个版本),放弃中间列表,使用更方便的生成器,正如@Mark Dickinson建议的那样:
我们可以通过使用列表来简化代码。这里的列表包含六个元素,最初都设置为零:
跑步时,它会在我的机器上打印:
我们可以通过生成一个介于
0
和5
(两者都包含在内)之间的数字来略微提高代码的效率:相关问题 更多 >
编程相关推荐