首页 > 解决方案 > 有没有更好的方法来编写这些函数

问题描述

我正在尝试创建一个 5 轴老虎机。我想知道是否有一种更快的方法可以只使用我的函数一次而不是多次返回每个卷轴的选定值。每个卷轴有 3 个符号。该函数对数组进行洗牌,然后必须随机选择一个项目并将其从数组中删除,这样相同的符号就不会出现在同一个卷轴上两次。我正在使用以下代码 5 次(对于每个卷轴),但我想知道我是否可以只使用一个功能并在选择并删除 3 个项目后为每个卷轴重置它。

def my_function():

symbolsreel1 = ['Symbol1', 'Symbol2', 'Symbol3', 'Symbol4', 'Symbol5', ' 
Symbol6', 'Symbol7', 'Symbol8', 'Symbol9',
        'Symbol10', 'Symbol11', 'Symbol12',]


random.shuffle(symbolsreel1)
symbolItem = random.choice(symbolsreel1)
symbolsreel1.remove(symbolItem)


return(symbolItem)

a1 = my_function()
b1 = my_function()
c1 = my_function()

def my_function():

symbolsreel2 = ['Symbol1', 'Symbol2', 'Symbol3', 'Symbol4', 'Symbol5', 
'Symbol6', 'Symbol7', 'Symbol8', 'Symbol9',
        'Symbol10', 'Symbol11', 'Symbol12',]


random.shuffle(symbolsreel2)
symbolItem = random.choice(symbolsreel2)
symbolsreel2.remove(symbolItem)


return(symbolItem)

a2 = my_function()
b2 = my_function()
c2 = my_function()

我这样做 5 次并打印以下内容

print (a1, "\t", a2, "\t", a3, "\t", a4, "\t", a5)
print (b1, "\t", b2, "\t", b3, "\t", b4, "\t", b5)
print (c1, "\t", c2, "\t", c3, "\t", c4, "\t", c5)

标签: python-3.xfunction

解决方案


如果您已经在打乱符号列表,则不需要从中随机选择,因为元素已经随机排列。

只需像您一样使用 random.shuffle() ,然后一次返回前 3 个元素:

def my_function():
    symbolsreel = ['Symbol1', 'Symbol2', 'Symbol3', 'Symbol4', 'Symbol5', 'Symbol6', 'Symbol7', 'Symbol8', 'Symbol9', 'Symbol10', 'Symbol11', 'Symbol12',]
    random.shuffle(symbolsreel)
    return symbolsreel[:3]

[a1, b1, c1] = my_function()

如果所有 5 个卷轴上可供选择的符号都相同,那么您也可以在一个函数调用中完成所有 5 个卷轴:

def my_function():
    symbolsreel = ['Symbol1', 'Symbol2', 'Symbol3', 'Symbol4', 'Symbol5', 'Symbol6', 'Symbol7', 'Symbol8', 'Symbol9', 'Symbol10', 'Symbol11', 'Symbol12',]
    reels = []
    for i in range(5):
        random.shuffle(symbolsreel)
        reels[i] = symbolsreel[:3]
    return reels

[[a1, b1, c1], [a2, b2, c2], [a3, b3, c3], etc...] = my_function() # replace "etc..." with actual code

推荐阅读