我正在尝试编写一些代码来生成随机数,但我想要它生成的唯一数字是2,4,8,16,32和64(就像一个双骰子)。我已经把它写成如下所示,但似乎不能只显示数字,我不断得到2到64之间的任何数字。请帮忙。
rolling_result = random.randrange(2, 65)
print("You have rolled a ", rolling_result, sep = "")
答案 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会更有效。