Python中的随机数介于2到64之间,但只有2 ** 2

时间:2016-03-14 09:27:32

标签: python-3.x

我正在尝试编写一些代码来生成随机数,但我想要它生成的唯一数字是2,4,8,16,32和64(就像一个双骰子)。我已经把它写成如下所示,但似乎不能只显示数字,我不断得到2到64之间的任何数字。请帮忙。

rolling_result = random.randrange(2, 65)

print("You have rolled a ", rolling_result, sep = "")

4 个答案:

答案 0 :(得分:3)

生成1到6之间的随机数。然后将2返回到该幂。

def roll_double_die():
    return 2 ** random.randint(1, 6)

答案 1 :(得分:2)

在1-6之间随机获取并使用shift(<<)或2 ** n来获取最终数字:

n = 1 << random.randrange(1, 7)
# or
n = 2 ** random.randrange(1, 7)

整数移位应该明显加快。

答案 2 :(得分:0)

和另一种方式,没有乘法:

rolling_result = 1
while not rolling_result%2==0:
    rolling_result = random.randrange(2, 65)
print("You have rolled a ", rolling_result, sep = "")

HTH,Edwin

[edit]我刚发现random.randrange需要一个&#34;步骤&#34;价值,所以现在你的代码变得如此简单:

rolling_result = random.randrange(2, 65, 2)
print("You have rolled a ", rolling_result, sep = "")

答案 3 :(得分:0)

如果您需要多次执行此操作,预生成有效值并使用random.choice()会很有效。

import random

valid = tuple(2 ** x for x in range(1, 7))

def my_random():
  return random.choice(valid)

P.S。依赖于有效值的大小,使用list而不是tuple会更有效。