我有3个骰子,每个有13个面。你必须“滚动”它们,直到三个值都相同(如下所示)。在
ct = 1
import random
min = 1
max = 13
roll_again = "yes"
while roll_again == "yes" or roll_again == "y" or roll_again == "":
print "This is attempt number: ", + ct
print "Now, rolling the dice..."
print "The values are...."
die1 = random.randint(min, max)
die2 = random.randint(min, max)
die3 = random.randint(min, max)
print die1
print die2
print die3
ct += 1
if die1 == die2:
if die2 == die3:
print "Congrats! You win! hooray! You got it on attempt number ", + ct
ct = 1
roll_again = raw_input("Roll the dice again? ")
这一切都很好
但我希望1面能比其他面高出5倍(就像一个加权骰子),而13面要比其他面高5倍(当然不包括1值)。这在Python2.7中是否可行?在
我曾经发布过an answer to a similar question(尽管是用Java编写的),其中有人想用不同的概率选择字母表中的字母。你可以采取我在那里建议的任何一种方法。在
最普遍的方法是计算选择每个数字的概率。例如,您可能有一个元组(number,probability)的列表
然后你可以选择一个介于0和1之间的随机数,在列表中迭代,在前进的过程中把概率加起来,当你得到一个大于你选择的随机数的和时,停止并返回相应的选择。在
^{pr2}$(请注意,
itertools.accumulate()
在python2中不存在,否则可以在这里使用它。)如果您碰巧使用的是Numpy,那么它的内置功能是
numpy.random.choice(numbers, p=probabilities)
。在如果所有的概率都是某个值的倍数,那么使用
random.choice()
可能会更好。要做到这一点,你需要创建一个没有概率的可能选择列表,重复每一个选项以得到你想要的相对比例。例如会导致}的三倍,而{}的可能性是{}或{}的两倍。然后每次你想掷骰子的时候只要打电话给
1
的可能性是2
或{random.choice(choices)
。在在您的情况下,第二种方法似乎非常适合,但是您可以使用任何一种方法。我将留给您来为您的案例找出
choices
的正确定义。;—)我想你要找的工具是numpy.random.choice()
此工具允许您通过给出所有事件的概率列表作为参数,生成一个遵循非等概率定律的数字
在你的情况下,你首先需要计算概率。在
如果知道数字“1”的权重为5,而数字“13”的权重为5,则可以通过以下方式生成向量(Python语言中的列表):
^{pr2}$最后呢
相关问题 更多 >
编程相关推荐