我正在使用random.choice()隨機呼叫串列中的函式。它作業正常,但有時不滿足被呼叫函式中的條件之一,因此它不會運行。發生這種情況時,我想從串列中呼叫另一個不同的函式。
func_list 是動態填充的,串列中可能有一個或多個函式。
這是代碼:
func_list[func_one, func_two, func_three]
random.choice(func_list)()
因此,例如, sayfunc_two被呼叫但不滿足函式中的條件我想呼叫func_one或func_three隨機選擇。如果不滿足該功能中的條件,我想呼叫另一個。
是否有可能做到這一點?
uj5u.com熱心網友回復:
為了避免兩次呼叫同一個函式,我建議改組串列并一個一個地嘗試這些函式,例如
func_list = [func_one, func_two, func_three]
func_list_shuffled = func_list[:] # shallow copy
random.shuffle(func_list_shuffled)
for func in func_list_shuffled:
try:
func()
else:
# no exception ocurred
break
else:
print("all functions errored")
uj5u.com熱心網友回復:
一種天真的方法是將func_list作為引數添加到您的所有函式中,并在您的函式中呼叫random.choice()if 默認函式條件不滿足。這將創建一個遞回解決方案,直到其中一個函式被執行。
缺點:如果沒有任何功能滿足條件,則可能會無限繼續。
uj5u.com熱心網友回復:
繼續嘗試直到它最終作業并從串列中洗掉該專案,這樣就不能再次呼叫它:
func_list[func_one, func_two, func_three]
while true:
i = random.choice(range(func_list))
try:
return func_list[i]()
except:
func_list = func_list.remove(i)
uj5u.com熱心網友回復:
只需嘗試隨機選擇的功能,直到某些功能起作用,但如果它們沒有提供所需的結果,則將它們從串列中洗掉
# let functions follow this pattern
def base_func():
if criterium:
return False
else:
# Do something
return True
func_list[func_one, func_two, func_three]
result = False
while result is False:
if func_list == []:
break
chosen_func = random.choice(func_list)
func_list.remove(chosen_func) # Remove used function
result = chosen_func()
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324046.html
標籤:Python
