实现这个复杂的字典最有效的方法是什么?

2024-10-02 16:35:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在从事一个有趣的小python项目,我一直在尝试将switch语句改编成字典。我访问了多种可能的解决方案,但仍然不确定如何最好地实现此功能

我有六个布尔值(bool1-bool6),很明显可以是T或F,我需要测试这些布尔值的每一个可能的组合,这样我就可以告诉我的程序在哪里绘制图像

有64种可能的组合

我们可以用3个布尔值来实现这一点,为了简单起见,3个布尔值有8种可能的组合

如果我们假设1=真,0=假,那么可能的组合可以这样表示

 000 (F,F,F) : drawstrings1()
 001 (F,F,T) : drawstrings2()
 010 (F,T,F) : drawstrings3()
 011 (F,T,T) : drawstrings4()
 100 (T,F,F) : drawstrings5()
 101 (T,F,T) : drawstrings6()
 110 (T,T,F) : drawstrings7()
 111 (T,T,T) : drawstrings8()

表示这一点的if循环是

if(bool1==false,bool2==false,bool3==false) 做些事情 elif(bool1==false,bool2==false,bool3==true) 做些事情 elif(bool1==false,bool2==true,bool3==false) 做些事情

等等

如果这些条件为真,我要运行的是一个pdf文件上的Canvas.drawstring。实际上,我有一个制作发票的程序,我有多个名为service1-service6的服务

如果所有服务都要向客户端计费,那么布局将是 服务1 服务2 服务3 服务4 服务5 服务6

但是,如果客户没有收到服务3或5的账单,那么我希望我的发票是这样开的 服务1 服务2 服务4 服务6

而不是这样,如果没有字典的话。 服务1 服务2

服务4

服务6

目前我有一个字典,包含000000-111111的所有64个可能的变体,以及相应的命令。即。 {000000 000001 000010 000011 等。 111111个

这一切工作暂时还不错,但我担心如果我必须添加更多的服务,这个程序,我将如何着手测试所有可能的布尔集

我看到了一些有趣的有点变化的解决方案,尽管向我建议的那个并没有很好地适应

state = bool6 << 5
state = state ^ (bool5 << 4)
state = state ^ (bool4 << 3)
state = state ^ (bool3 << 2)
state = state ^ (bool2 << 1)
state = state ^ (bool1)

我看到了一个使用itertools的好建议,比如

 import itertools
 for i in itertools.product((0, 1,), repeat=3):
   stuff ...

但是,这个选项仍然需要我为每个键编写单独的函数/方法。对于10种可能的服务,即1024种可能的10位布尔值组合

我很想听听你们的建议。 这肯定是个棘手的问题


Tags: 程序falsetrueif字典解决方案事情建议