2016-10-10 31 views
1

我想用隨機順序運行函數。它看起來像洗牌變量列表的「洗牌」功能。如何以隨機順序運行函數?

輸入:

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 

or 如何以隨機順序運行函數?

+1

'從隨機導入shuffle' ...看起來像你幾乎在那裏。 –

+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

在循環中,這可能會(\ *)多次調用相同的函數。 (\ *)連續三次每次只被調用一次的機會實際上太小(如果我是對的話,9箇中的2個)稱之爲「可能」。 – usr2564301

1

這裏是我會怎麼做。基本上什麼四眼已經建議。 Run this Code

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