我正在从事一个有趣的小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位布尔值组合
我很想听听你们的建议。 这肯定是个棘手的问题
目前没有回答
相关问题 更多 >
编程相关推荐