正在开发一个有趣的小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种可能组合。
我很想听听你们的任何建议。 这肯定是一个棘手的问题。