5 回答

TA貢獻1864條經驗 獲得超2個贊
一種選擇是這樣的:
def functionA1():
print('A1')
def functionA2():
print('A2')
def functionA3():
print('A3')
def functionB1():
print('B1')
def functionB2():
print('B2')
def functionB3():
print('B3')
groupA = (functionA1, functionA2, functionA3)
groupB = (functionB1, functionB2, functionB3)
groups = [groupA, groupB]
import random
random.shuffle(groups)
for function1, function2 in zip(*groups):
function1()
function2()
輸出
B1
A1
B2
A2
B3
A3
另外 - 如果有超過 2 個組,最好這樣做:
for functions in zip(*groups):
for my_function in functions:
my_function()
這樣,就可以輕松地將其擴展為大量組,而無需更改該部分代碼。

TA貢獻1820條經驗 獲得超10個贊
像這樣的東西:
from random import shuffle
functions = ([functionA1, functionB1], [functionA2, functionB2])
for i in range(x):
for group in functions:
shuffle(group)
for func in group:
func()

TA貢獻1865條經驗 獲得超7個贊
如果您有很多功能,最好以某種方式組織它們。例如在單獨的模塊中:
# file group_a.py
def function1():
print("A1")
# file group_b.by
def function1():
print("B1")
# file main.py
import group_a
import group_b
import random
first, second = random.sample((group_a, group_b), k=2)
for i in range(1, x):
getattr(first, f"function{i}")()
getattr(second, f"function{i}")()
如果您的函數命名方案是這樣的,您可以使用getattr來查找正確的函數。
如果它們具有任意名稱,您將需要在每個模塊中創建一個列表,其中的函數按正確的順序排列。這將類似于buran的答案。

TA貢獻1884條經驗 獲得超4個贊
以下可以擴展到任意數量的組和功能。將為三組進行說明。
from random import randrange
def rotate(arr, r):
' Roates an array '
return arr[r:] + arr[:r]
# Generate groups of functions
n = 4 # number of functions in a group
groupA = [lambda i = i: f'A{i}' for i in range(1, n+1)]
groupB = [lambda i = i: f'B{i}' for i in range(1, n+1)]
groupC = [lambda i = i: f'C{i}' for i in range(1, n+1)]
# Random starting index (i.e. 0 to n-1)
index = randrange(0, n)
# Create function selections (rotate based upon index)
selection = [rotate(x, index) for x in zip(groupA, groupB, groupC)]
for funcs in selection:
for f in funcs:
print(f())
輸出
例1:
B1
C1
A1
B2
C2
A2
B3
C3
A3
B4
C4
A4
前任。2
A1
B1
C1
A2
B2
C2
A3
B3
C3
A4
B4
C4

TA貢獻1848條經驗 獲得超6個贊
為了保持關卡的順序,您可以分別對它們進行洗牌。
您可以將函數視為一等公民。
import random
lst = [["a1", "b1"], ["a2", 'b2']]
for el in lst:
random.shuffle(el)
print(ch)
示例輸出:
[['a1', 'b1'], ['b2', 'a2']]
添加回答
舉報