Python 掷骰子的频率,然后获得最多出现的骰子
所以,我写了这段代码,它首先列出了1000卷。然后我写了一个函数,它使用字典来计算每个模具辊的频率。然后我想打印发生最多的卷,以及它的频率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
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