Problem 9 (200pts)
实现max_scoring_num_rolls,它运行实验以确定,掷多少次(从1到10)骰子能让一轮的平均得分最大。
您的实现应使用make_averaged和roll_dice函数。
如果两个掷骰次数在最大平均得分上打平,则返回较小的数字。 例如,如果3次和6次都达到最大平均得分,则返回3。
建议在进行解锁测试之前阅读此问题的doctest和doctest中显示的示例。
重要: 为了通过我们所有的测试,请确保您从1开始测试掷骰次数一直到10,而不是从10开始到1。
在编写任何代码之前,请解锁测试以验证您对问题的理解:
python ok -q 09 -u
解锁完成后,开始实现您的解决方案。您可以使用以下命令检查正确性:
python ok -q 09
提供的run_experiments函数调用max_scoring_num_rolls(six_sided)并打印结果。
您会发现,掷6个骰子能最大化使用六面骰子的roll_dice结果。
要调用此函数并查看结果,请使用 -r 标志运行hog.py:
python hog.py -r
此外,run_experiments会将各种战略与always_roll(6)进行比较。
欢迎您根据需要更改run_experiments的实现。
请注意,在接下来的两个问题中实现picky_strategy和swine_strategy之前,运行实验不会产生准确的结果。
一些实验可能需要运行一分钟。
您可以通过减少调用make_averaged时的试验次数来加快实验速度。
运行实验不会影响您在项目中的得分。
Solutions
def max_scoring_num_rolls(dice=six_sided, total_samples=1000):
return max(range(1, 11), key=lambda x: make_averaged(roll_dice, total_samples)(i, dice))