Python 试图生成一系列唯一的随机数

Python 试图生成一系列唯一的随机数,python,random,Python,Random,对不起,如果这是显而易见的,我是新来的 这是代码。 它不应该像我理解的那样打印两件东西,但有时确实如此。关键是p1为1应防止p2为1,如果p2为1,p2应使用相同的p1值再次运行,但应生成一个新的随机数。它可能又是1,但是函数应该继续返回else并运行,直到它们不同,对吗 #Random Test with Exclusion P1Item = 'Empty' P2Item = 'Empty' import random import time def P1(): global P1I

对不起,如果这是显而易见的,我是新来的

这是代码。 它不应该像我理解的那样打印两件东西,但有时确实如此。关键是p1为1应防止p2为1,如果p2为1,p2应使用相同的p1值再次运行,但应生成一个新的随机数。它可能又是1,但是函数应该继续返回else并运行,直到它们不同,对吗

#Random Test with Exclusion
P1Item = 'Empty'
P2Item = 'Empty'
import random
import time

def P1():
    global P1Item
    global P2Exclusion
    P1Local = random.randint(1,3)
    if P1Local == 1:
        P1Item = 'Candy'
        P2(P1Local)
    elif P1Local == 2:
        P1Item = 'Steak'
        P2(P1Local)
    elif P1Local == 3:
        P1Item = 'Vegetables'
        P2(P1Local)


def P2(A):
    global P2Item
        P2Local = random.randint(1,3)
        if P2Local == 1 and A != 1:
            P2Item = 'Candy'
        elif P2Local == 2 and A != 2:
            P2Item = 'Steak'
        elif P2Local == 3 and A != 3:
        P3Item = 'Vegetables'
        else:
            B = A
            P2(B)

def Test():
    print('Test')
    print('Define')
    P1()
    print(P1Item + ' ' + P2Item)
    time.sleep(1)
    input()
    Test()

Test()

不要随机选取整数,而是将列表洗牌并选取前两项:

import random

choices = ['Candy', 'Steak', 'Vegetables']
random.shuffle(choices)

item1, item2 = choices[:2]
因为我们首先洗牌了可能的选择列表,然后选择了前两个,所以您可以保证
item1
item2
永远不会相等

使用会使选项保持打开状态,以便对剩余的选项执行操作;此处只有1个,但在较大的集合中,您可以继续拾取到目前为止尚未拾取的项目:

choices = list(range(100))
random.shuffle(choices)
while choices:
    if input('Do you want another random number? (Y/N)' ).lower() == 'n':
        break
    print(choices.pop())
会给你100个随机数而不重复

如果您只需要2个随机样本,请改用:


您可以使用Python中的
random
模块来完成繁重的工作,特别是:


如果要保留原始逻辑,以下是一些伪代码:

while(P2Local == A)
   P2Local = random.randint(1,3)
来自随机导入选择
x=['foo','bar','fight']
num_uniq=2
uniq_rand=set()
而len(uniq_rand)

正如@Martijn所指出的,这肯定不如
random.sample()
=)

random.sample(选择,2)
+1 random并不意味着“真正的随机”,它只是意味着“很难提前知道你会得到哪个数字。”一个随机数生成器可以(理论上)只要没有人知道什么时候会发生这种情况,就可以多次返回相同的结果。啊,比我快2分钟:)为什么你的第一个示例不使用更明显的“示例”?@InbarRose:因为不太明显的示例有时更有趣?:-p更多种类:
heapq.nlargest(2,choices,key=lambda L:random.random())
:)这只选择一个值,OP需要两个。如何避免重复选取相同的值?;P打字错误,哈哈哈。有点
>>> import random
>>> random.sample(['candy', 'steak', 'vegetable'], 2)
['vegetable', 'steak']
while(P2Local == A)
   P2Local = random.randint(1,3)
from random import choice
x = ['foo','bar','fight']
num_uniq = 2
uniq_rand = set()
while len(uniq_rand) < num_uniq:
  uniq_rand.add(choice(x))
print uniq_rand