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

时间:2017-11-12 21:55:51

标签: python dictionary pdf canvas binary

正在开发一个有趣的小python项目,我不得不尝试将我的switch语句调整为Dictionary。我已经访问了多个可能的解决方案,但我仍然不确定如何最好地实现此功能。

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

有64种可能的组合。

我们可以用3个布朗来做到这一点简单,有3种布尔可能的组合。

如果我们想象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。基本上我有一个发票的程序,我有多个名为Service 1-Service 6的服务。

如果所有服务都向客户收费,那么布局就是 服务1 服务2 服务3 服务4 服务5 服务6

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

而不是这个,没有字典就会发生。 服务1 服务2

服务4

服务6

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

这一切都可以正常工作,但是我担心如果我必须为这个程序添加更多服务,我将如何测试所有可能的布尔集?

我已经看到了一些有趣的Bit Shifting解决方案,虽然建议给我的不适应。

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种可能的服务,即10种数字布尔值的1024种可能组合。

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

0 个答案:

没有答案