你能在Python中创建一个没有条件的switch case类型列表,它只选择一个随机的case吗?

wvt8vs2t  于 2023-02-06  发布在  Python
关注(0)|答案(2)|浏览(123)

这是一个关于写作方便(/懒惰)的问题。我知道我会花更多的时间来写这个问题,而不是我会节省多少,但我很好奇。编辑:我知道这可能不可能实现我想要的功能,但我很好奇,想知道是否有更了解Python的人知道一种方法。我还编辑了代码块,以澄清注解中出现的一些情况。
假设我有3种可能发生的情况,我的程序应该随机选择一种,现在我将添加第4种可能发生的情况,但是我不想增加random.randint(a,b)中的b,也不想增加elif Case == i:中的i
现在我有这个:

x_1 = 0
x_2 = 0
Case = random.randint(1, 3)

if Case == 1: ## a, b, and d are known
    mylist = [1, 1, 0, 1, 0, 0]
    x_1 += 1
        
elif Case == 2: ## a, b, and f are known
    mylist = [1, 1, 0, 0, 0, 1]
    x_2 += 1
        
elif Case == 3: ## a, c, and d are known
    mylist = [1, 0, 1, 1, 0, 0]
    x_1 += 2
    x_2 += x_1

然后,如果我想添加第四个case,我复制粘贴一个,并且只编辑case的主体。但是,我还需要更改第一行中的3,以及我刚刚粘贴的行中的3。而且,重要的部分,如果我想在case 1和case 2之间添加一个选项以提高可读性,这意味着我必须在新的案例2之后更新所有的整数--这是我不想做的事情。
有没有一种方法可以让Python随机选择一个elif?显然它们不一定是elif,我也试着查看了switch case,但是没有找到我想要的,就像这样:

ChooseRandomOption
    option ## a, b, and d are known
        mylist = [1, 1, 0, 1, 0, 0]
        x_1 += 1

    option ## a, b, and f are known
        mylist = [1, 1, 0, 0, 0, 1]
        x_2 += 1

    option ## a, c, and d are known
        mylist = [1, 0, 1, 1, 0, 0]
        x_1 += 2
        x_2 += x_1

然后我要做的就是添加这个而不改变其他任何东西:

option ## a, b, and e are known
        mylist = [1, 1, 0, 0, 1, 0]
        x_1 -= 1

谢谢!
附言
1.请记住,目的是写得更少,所以添加函数和挑选随机函数并不是我真正想要的。特别是因为每个函数的输入可能不同。
1.(编辑:这个PS现在已经集成到代码块中了)这个列表仅仅是可以完成的一个例子,但是也许在option内部必须执行多个操作,所以mylist = random.choice([[1, 1, 0, 1, 0, 0], [1, 1, 0, 0, 0, 1], [1, 0, 1, 1, 0, 0]])在这里可能可以工作,但是在其他情况下不行。我还想在每个情况下添加一个注解来澄清它是什么情况。

mum43rcc

mum43rcc1#

你可以有一个函数列表,然后执行一个随机的,这样你甚至可以有随机的行为,而不仅仅是列表,并且为了清晰起见,你也可以给它们命名。

def func1():
    return [1, 1, 0, 1, 0, 0]

def func2():
    return [1, 1, 0, 0, 0, 1]

def func3():
    return [1, 0, 1, 1, 0, 0]

myFuncs = [func1, func2, func3]
myFunc = random.choice(myFuncs)
myList = myFunc()

如果您真的不想更新myFuncs列表,您可以执行类似这样的操作,在函数名前面加上一个标识符

import inspect
import sys

def listFunc1():
    return [1, 1, 0, 1, 0, 0]

def listFunc2():
    return [1, 1, 0, 0, 0, 1]

def func3():
    return [1, 0, 1, 1, 0, 0]

myFuncs = [obj for name,obj in inspect.getmembers(sys.modules[__name__]) 
                                  if (inspect.isfunction(obj) 
                                  and name.startwith('listFunc')]
myFunc = random.choice(myFuncs)
myList = myFunc()
kmbjn2e3

kmbjn2e32#

import random
cases = {
    "a": 1,
    "b": 2,
    "c": 3
}

print(cases.get(random.choice(list(cases.keys()))))

使用dict存储案例允许您通过从字典的键中随机选择来从dict中随机选取条目。您可以轻松地随意添加或删除更多条目。

相关问题