亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python - 隨機化函數的順序

Python - 隨機化函數的順序

慕碼人8056858 2023-09-05 20:50:59
我正在編寫一個代碼,其中有許多函數,這些函數是稍后在屏幕上呈現它們的步驟。有沒有辦法隨機化哪個組首先開始,然后所有連續的步驟分別隨機化?為您提供更多背景信息:我們有兩組(A 和 B),每組由多個函數組成(將它們想象為游戲的步驟)。正如您所看到的,我們從 A 組的步驟 1 開始,然后繼續進行 B 組的步驟 1,依此類推。:for i in range(x):      functionA1():      functionB1():      functionA2():      functionB2(): ....所以我們的想法是,游戲開始,步驟在 A 組和 B 組之間交替。 有沒有辦法讓 A 組或 B 組隨機開始,然后連續的步驟也發生變化?因此,這是一個選項(上面的選項),隨機選擇的另一個選項是:for i in range(x):      functionB1():      functionA1():      functionB2():      functionA2(): ....由于函數列表相當廣泛,我真的想避免只在代碼中寫下兩個可能的選項。謝謝您的幫助!
查看完整描述

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

這樣,就可以輕松地將其擴展為大量組,而無需更改該部分代碼。


查看完整回答
反對 回復 2023-09-05
?
拉莫斯之舞

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


查看完整回答
反對 回復 2023-09-05
?
鴻蒙傳說

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的答案。


查看完整回答
反對 回復 2023-09-05
?
慕村9548890

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


查看完整回答
反對 回復 2023-09-05
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

為了保持關卡的順序,您可以分別對它們進行洗牌。


您可以將函數視為一等公民。


import random


lst = [["a1", "b1"], ["a2", 'b2']]


for el in lst:

    random.shuffle(el)

print(ch)

示例輸出:


[['a1', 'b1'], ['b2', 'a2']]


查看完整回答
反對 回復 2023-09-05
  • 5 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號