аватар question@mail.ru · 01.01.1970 03:00

Рандомный текст на Python

Как сделать рандомный текст на Python? Чтобы он выводил только 1 переменную из двух? Например, я беру две переменные с таким значением:

import randomrole1 = ""Мирный житель""role2 = ""Мафия""role = randon.randomint(role1, role2)print(""Вы - "" + role)input("""")

И мне нужно, чтобы при выводе текста выводилась ТОЛЬКО ОДНА ПЕРЕМЕННАЯ. Причем с каждого раза - разная, то role1, то role2, то снова role1.

Надеюсь, понятно объяснил. Я новичок в Python и прошу по подробнее отвечать.

аватар answer@mail.ru · 01.01.1970 03:00

Случайный элемент из последовательности

использует криптографически-небезопасный PG в Питоне, поэтому если вы его используете в контексте, где не желательно, чтобы можно было угадать результат последовательных вызовов, например, при генерации паролей, то следует использовать CSPG такой как random.SystemRandom(), который использует , который в свою очередь использует возможности, предоставляемые OS:

#!/usr/bin/env python3import randomrandom_item = random.SystemRandom().choice([""Мирный житель"", ""Мафия""])

See also: . secrets модуль доступен с Python 3.6 -- его метод это как раз для SystemRandom().choice, показанного выше.

Каждый раз разная (неслучайная) строка

Чтобы при каждом запуске программы можно было печатать разные значения из заданной последовательности, можно создать бесконечный итератор, используя , который по кругу возвращает элементы из этой последовательности. Чтобы сохранить состояние итератора между запусками программы, чтобы каждый раз следующее значение возвращалось, можно использовать для сериализации:

#!/usr/bin/env python3""""""Print a different string on each run in a loop.""""""import itertoolsimport pathlibimport pickle# load itemspath = pathlib.Path('it.pickle')try:    data = path.read_bytes()  # XXX no file locking, ignore concurrent issuesexcept FileNotFoundError:  # 1st run    # create an infinite iterator that repeats the values    it = itertools.cycle(iter({""Мирный житель"", ""Мафия""}))else:    # NOTE: it is insecure if you can't trust it.pickle's content    it = pickle.loads(data)# print next itemprint(next(it))# save itemspath.write_bytes(pickle.dumps(it))  # XXX ignore data corruption issues

Чтобы избежать (маловероятного) повреждения файла (например, если питание вдруг пропадёт во время записи файла), можно использовать временный файл. See .

Последние

Похожие