Попытка создать серию уникальных случайных чисел

Извините, если это очевидно, я довольно новый.

Вот код. Он никогда не должен печатать те же две вещи, что и я, но иногда это происходит. Дело в том, что 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() 

4 Solutions collect form web for “Попытка создать серию уникальных случайных чисел”

Вместо того, чтобы выбирать случайные целые числа, перетасуйте список и выберите первые два элемента:

 import random choices = ['Candy', 'Steak', 'Vegetables'] random.shuffle(choices) item1, item2 = choices[:2] 

Поскольку мы сначала перетасовали список возможных вариантов, а затем выбрали первые два, вы можете гарантировать, что 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()) 

даст вам 100 случайных чисел без повторения.

Если вам нужно всего лишь случайный random.sample() из 2, вместо этого используйте random.sample() :

 import random choices = ['Candy', 'Steak', 'Vegetables'] item1, item2 = random.sample(choices, 2) 

Вы можете использовать random модуль в Python для выполнения тяжелой работы для вас, в частности random.sample() :

 >>> 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 

Как отметил @Martijn, это не так эффективно, как random.sample() =)

  • Создание списка случайных чисел, суммирование до 1
  • random.choice сломан с dicts
  • Создание случайного числа в кольцевом пространстве
  • почему эта программа python не работает?
  • Случайный вообще не случайен?
  • Случайный int без импорта 'random'
  • Как вы можете выбрать случайный элемент из списка и удалить его?
  • random.sample () каждый раз возвращает одну и ту же случайную последовательность?
  • Python - лучший язык программирования в мире.