Генерация случайных анонимных (lambda) функций
Мне нужно сгенерировать список анонимных функций (lambda), каждая из которых будет выполнять какое-либо математическое действие непосредственно c x и случайным числом. Но по какой-то причине, каждый раз элементы списка редактируются. Код программы:
from random import choice, randint
random_choices = ['+', '-', '*', '/']
random_actions = [lambda x: eval(f'{x} {choice(random_choices)} {randint(1, 50)}') for _ in range(len(random_choices))]
for i in range(4):
print(random_actions[i](5))
print('\n')
for i in range(4):
print(random_actions[i](5))
Вывод:
15
90
0.7142857142857143
12
0.10638297872340426
15
32
0.22727272727272727
Как можете заметить, при исполнении двух одинаковых циклов получаются разные результаты, как мне сделать так чтобы такого не было?
Ответы (1 шт):
Почему данные "редактируются"? Вы будете получать разные результаты, ведь каждый каждый вызов лямбда функции используется случайное действие choice(random_choices) и случайное число randint(1, 50). Вероятность, что что-то случайно окажется одинаковым, крайне мала. (ответ @andreymal)
Могу предложить данное решение проблемы:
from random import choice, randint
random_choices = ['+', '-', '*', '/']
commands = ["{0}" + f"{choice(random_choices)} {randint(1, 50)}" for _ in range(len(random_choices))]
random_actions = lambda x: [eval(command.format(x)) for command in commands]
for i in range(4):
print(random_actions(5)[i])
print('\n')
for i in range(4):
print(random_actions(5)[i])
Вывод:
120
215
5
15
120
215
5
15