Задать вопрос
RoMoN777
@RoMoN777
программист любитель на python

Как сделать рандомное число без повторений при вызове функции?

Как мне сделать функцию, при вызове которого будет генерироваться число которое еще не генерировалось?
К примеру:
randomaizer(1,5)
randomaizer(1,5)
randomaizer(1,5)
randomaizer(1,5)
randomaizer(1,5)
>4
>1
>5
>2
>3


нужно написать функцию что бы не получилось такого вывода:
>5
>5
>1
>3
>1
  • Вопрос задан
  • 668 просмотров
Подписаться 1 Простой 2 комментария
Решения вопроса 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Странные ответы тут приводят.
import random
lst = list(range(1, 5+1))
random.shuffle(lst)

Так у вас в списке будет случайно перемешанная последовательность.
Но у вас есть требование (не знаю насколько оно осозанное), чтобы это была непременно функция.
Надо понимать, что такая функция не будет чистой. Она должна выдать конечное количество разных значений и её придётся вернуть исключение, если от нее потребуют больше очерендым вызовом. Сделать это можно с помощью генератора.
def make_shuffled_gen(a, b):
    lst = list(range(a, b + 1))
    random.shuffle(lst)
    yield from lst

shuffled_getter = make_shuffled_gen(1, 5).__next__


Ну или одним выстрелом:
def make_shuffled_getter(a, b):
    lst = list(range(a, b + 1))
    random.shuffle(lst)
    return iter(lst).__next__

shuffled_getter = make_shuffled_getter(1, 5)
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Если вы хорошо подумаете, вы поймёте, что это практически тоже самое, что просто взять список уникальных значений, случайным образом перемешать его и вывести. Никакой принципиальной разницы по результату нет. Тогда зачем все усложнять? Шафл решит вашу проблему.
Ответ написан
@kisaa
Вы же понимаете, что таким образом "случайное число" перестаёт быть случайным? Это как если бы ввели правило "если монетка выпала решкой, то следующим броском должен выпасть орёл". Так не бывает, это несвязанные события.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы