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

#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()