Python 掷骰子的频率,然后获得最多出现的骰子

Python 掷骰子的频率,然后获得最多出现的骰子,python,Python,所以,我写了这段代码,它首先列出了1000卷。然后我写了一个函数,它使用字典来计算每个模具辊的频率。然后我想打印发生最多的卷,以及它的频率 import random L = [] for i in range(1000): currentRoll = random.randint(1, 6) L.append(currentRoll) def diceFreq(L): rollCount = {} for roll in L: if roll

所以,我写了这段代码,它首先列出了1000卷。然后我写了一个函数,它使用字典来计算每个模具辊的频率。然后我想打印发生最多的卷,以及它的频率

import random
L = []
for i in range(1000):
    currentRoll = random.randint(1, 6)
    L.append(currentRoll)


def diceFreq(L):
    rollCount = {}
    for roll in L:
        if roll not in rollCount:
            rollCount[roll] = 1
        else:
            rollCount[roll] += 1
    print(rollCount)
    print(max(rollCount, key=rollCount.get))
    print(max(rollCount.values()))

diceFreq(L)

我不明白
print(max(rollCount,key=rollCount.get))
words到底在做什么

Max将收到一个iterable并计算Max值。 即:

默认情况下,
rollCount
是一个dict,它将遍历键

但是,当您将
添加到max函数时,它将根据您设置的可调用值计算要考虑的值
max

即:

在这种情况下,它将在将最大值发送给可调用对象后比较最大值。 (比较时,1,2,3将变为-1,-2,-3,但将返回原始值)

当您从dict调用
.get
时,它将期望传递一个
键。执行此操作时:

d = {"a": 10, "b": 5}
max(d, key=d.get)  # returns 'a'
它将执行
d.get('a')>=d.get('b')
,而不是比较
'a'>='b'


在本例中返回
'a'

我建议您利用这个类,它以一种更具python风格的方式完成
diceFreq
函数的所有工作。会的

  • 计算每个滚动的出现次数
  • 将卷从最常见到最不常见进行排序
  • 返回roll:count键值对的字典
因此,您可以用以下内容替换整个
diceFreq()
定义:

导入集合
进口经营者
打印(集合。计数器(L)。最常见(1)[0])

第3行从L创建了这样一个计数器。您可以打印出来验证它有六个项目,每卷一个。字典中的每一项都有一个相关的计数,总计为1000。然后它使用
most_common(1)
方法只返回最频繁滚动的值及其计数。最后,我们使用切片
[0]
从返回的
最常见()的列表中获取元组。

获取函数引用。不是一个被调用函数,是对它可以在排序时调用的函数的引用。所以,在
max()
执行其工作期间遇到的每个项目,都可以调用
rollCount
来查看
roll
发生了多少次(通过调用计数器字典中的
get
获取该特定值),这只是一个一般性建议:您应该查看计数器。它做的和diceFreq函数为您做的一样,理论上比在列表中循环更快。。林克:我同意有更好的方法,但问题是,
我不明白print(max(rollCount,key=rollCount.get))到底在用词做什么
。如果要使用
计数器
,那么最好使用
最常用的
方法,因为它比
max
更方便。好的观点@kaya3——忘记了那个真正有用的方法。我已经习惯于看到没有专门操作的词典,所以当我想对它们进行排序时,我只是使用
sorted()
和带有
itemgetter()
的lambda。更新了我的答案。
max([1,2,3], key=lambda x: -x) # >> returns 1
d = {"a": 10, "b": 5}
max(d, key=d.get)  # returns 'a'
d.get('a') # >> 10
d.get('b') # >> 5