#python #function #python-3.x #random
#python #функция #python-3.x #Случайный
Вопрос:
Я хочу запускать функции в случайном порядке. Это похоже на функцию «shuffle», которая перетасовывает список переменных.
Ввод:
def a():
print('a')
def b():
print('b')
def c():
print('c')
shuffle([a,b,c])
Это вывод того, что я хочу:
a
b
c
или
a
c
b
или
c
b
a
или и т. Д
Как запускать функции в случайном порядке?
Комментарии:
1.
from random import shuffle
… Похоже, вы практически на месте.2. Вы уже пробовали писать какой-либо код? Вы должны опубликовать это тоже. Я думаю создать словарь, в котором ключи будут целыми числами, а значения — ссылками на функции, затем найдите функцию в словаре, используя случайное целое число.
Ответ №1:
random.shuffle
это операция на месте. Итак, вам нужно сохранить список отдельно и перетасовать его.
import random
functions = [a, b, c]
random.shuffle(functions)
Теперь функции перемешиваются, и вам просто нужно их выполнить
for func in functions:
func()
Вероятно, вы можете сохранить это в функции и сделать это следующим образом
def run_functions_in_random_order(*funcs):
functions = list(funcs)
random.shuffle(functions)
for func in functions:
func()
run_functions_in_random_order(a, b, c)
Или вы можете просто использовать функции в замыканиях, например
def run_functions_in_random_order(*funcs):
def run():
functions = list(funcs)
random.shuffle(functions)
for func in functions:
func()
return run
random_exec = run_functions_in_random_order(a, b, c)
random_exec()
random_exec()
random_exec()
Ответ №2:
Или составьте список и возьмите случайный:
import random
def a():
print('a')
def b():
print('b')
def c():
print('c')
my_list = [a, b, c]
random.choice(my_list)()
Комментарии:
1. В цикле это может (*) вызывать одну и ту же функцию несколько раз. (*) Вероятность того, что каждая из них вызывается только один раз 3 раза подряд, на самом деле слишком мала (2 из 9, если я прав), чтобы называть это «может».
Ответ №3:
Вот как я бы поступил. В основном то, что предложил thefourtheye. Запустите этот код
from random import shuffle
def a():
print('a')
def b():
print('b')
def c():
print('c')
def main():
lis = [a,b,c]
shuffle(lis)
for i in lis:
i()