试图生成一系列独特的随机数

red*_*fia 2 python random

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

这是代码.它应该永远不会打印出我理解的相同的两件事,但它有时会这样做.关键是p1为1应该防止p2为1,如果p2为1,则p2应该以相同的p1值再次运行,但是应该生成一个新的随机数.它可能再次为1,但是函数应该继续返回并运行直到它们不同,对吧?

#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()
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 9

相反,选择随机整数的,洗牌列表,并挑选前两个项目:

import random

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

item1, item2 = choices[:2]
Run Code Online (Sandbox Code Playgroud)

因为我们首先将可能的选择列表混乱,然后选择前两个,你可以保证item1并且item2永远不会彼此相等.

使用random.shuffle()离开选项打开以对剩余选项执行某些操作; 你只有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())
Run Code Online (Sandbox Code Playgroud)

会给你100个随机数而不重复.

如果您只需要随机抽样2,请使用random.sample():

import random

choices = ['Candy', 'Steak', 'Vegetables']

item1, item2 = random.sample(choices, 2)
Run Code Online (Sandbox Code Playgroud)

  • 或者`random.sample(choices,2)` (5认同)

Inb*_*ose 5

您可以使用randomPython 中的模块为您完成繁重的工作,特别是random.sample()

>>> import random
>>> random.sample(['candy', 'steak', 'vegetable'], 2)
['vegetable', 'steak']
Run Code Online (Sandbox Code Playgroud)