2016-10-10 2 views
1

임의의 순서로 함수를 실행하고 싶습니다. 변수 목록을 뒤섞는 "섞기 (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

'임의 수입 shuffle'에서 ... Run this Code 보인다. –

+0

아직 코드를 작성하지 않으셨습니까? 당신도 게시해야합니다. 나는 정수가되는 키와 함수 참조가되는 값으로 사전을 만든 다음, 임의의 정수를 사용하여 사전에서 함수를 조회한다고 생각합니다. – Brian

답변

5

random.shuffle은 적절한 조작입니다. 목록을 따로 보관하고 임의로 정리해야합니다.

functions = [a, b, c] 
shuffle(functions) 

는 이제 기능을 단행하고, 당신은 그들에게

for func in functions: 
    func() 

당신은 아마 기능이 저장할 수를 실행해야하고이

def run_functions_in_random_order(*funcs): 
    functions = list(funcs) 
    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) 
     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() 
1

또는이 목록을 임의 가지고 같은 :

여기
import random 

def a(): 
    print('a') 

def b(): 
    print('b') 

def c(): 
    print('c') 

my_list = [a, b, c] 
random.choice(my_list)() 
+0

루프에서이 함수는 동일한 함수를 여러 번 호출 할 수 있습니다 (\ *). (\ *) 각 사람이 한 번에 3 번만 호출 될 확률은 실제로는 너무 작습니다 (제가 맞으면 9 명 중 2 명이 "힘"이라고 부름). – usr2564301

1

내가 할 것이 방법이다. 기본적으로 무엇 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() 
관련 문제