生成三个不同的随机数。

20

我这里有一个东西,但是我无法使其按照我喜欢的方式工作:

def nested_loops():
    import random
    option1 = random.randint(1, 3)
    option2 = random.randint(1, 3)
    option3 = random.randint(1, 3)

上面的代码生成数字,但它们可能是相同的。 下面的代码应该解决这个问题,但实际上并没有完全解决,只是似乎减少了出现相同数字的概率:

while option1 == option2:
    option1 = random.randint(1,3)
    while option1 == option3:
        option1 = random.randint(1, 3)
        while option2 == option3:
            option2 = random.randint(1, 3)

print(option1)
print(option2)
print(option3)

很明显,它只是将它们打印出来。


1
同意基于被接受的答案,这是一个重复的问题,但我觉得有必要指出 import random;alist = [x+1 for x in range(3)]; random.shuffle(alist) 可以处理列表为 1 到 N(在这种情况下为 3)的情况。 - Foon
2个回答

36
您可以使用 random.sample 方法从可迭代对象中获取任何数量的唯一的“随机”项-无需使用嵌套循环。
>>> option1, option2, option3 = random.sample(range(1, 4), 3)
>>> option1, option2, option3
(3, 1, 2)

1
你代码中的问题是,如果 option1option2 不同,第一个 while 就不会进入,你就无法检查它们是否等于 option3

如果你正在寻找一个无拒绝实现,我建议你查看我昨天在另一个线程中的答案:http://stackoverflow.com/questions/22563558/bug-in-random-numbers-in-android/22571791#22571791 - 我知道它是用Java编写的,但你可以得到灵感。 - elias

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接