我可以使用Bit Shifting来简化此程序吗? (位移/标志)

时间:2017-11-14 03:43:56

标签: python binary bit-manipulation base boolean-operations

使用ReportLab处理一个有趣的Python项目,一次创建几十个PDF。 ReportLab要求您选择绘制字符串的位置。

在我生成的PDF文件中,我最多可以向接收者收取六项服务费用。如果接收客户端没有请求或接收这些服务,即(service == 0 / null),那么我将附带的布尔值设置为false,并继续测试其余的服务。我需要测试几个布尔值,以确定绘制服务字符串的位置。

在这个过程结束时,我最终得到一个由6个整数组成的字符串,例如001001(F,F,T,F,F,T)。在这组布尔值的情况下,我会在位置1和2处绘制字符串3和6,而不是留下空白区域。我将提供一个小视觉来帮助理解这个问题。 (例如Booleans 011011)

 c.drawstring(locationX1,LocationY1, "Service2")
 c.drawstring(locationX1,LocationY1, "Service3")
 c.drawstring(locationX1,LocationY1, "Service5")
 c.drawstring(locationX1,LocationY1, "Service6")

 {produces
  Service2
  Service3
  Service5
  Service6}


 {rather than

  Service2
  Service3

  Service5
  Service6}

目前在我的程序中,为了测试所有这些布尔字符,我有一个包含这些布尔字符串的所有64种可能组合的字典(000000-111111) 即。

 "010011" : print20,
 "010100" : print21,
 "010101" : print22,
 "010110" : print23,
 "010111" : print24,
 "011000" : print25,

为每个可能的结果编写的函数,例如

 #BitRep=111011
 def print60():
     c.setFont('Deja', 12, leading=None)
     c.drawString(100, YdrawLocationSVC1, "Service 1 ")
     c.drawString(250, YdrawLocationSVC1, str(service1))
     c.drawString(100, YdrawLocationSVC2, "Service 2 ") 
     c.drawString(250, YdrawLocationSVC2, str(service2)) 
     c.drawString(100, YdrawLocationSVC3, "Service 3 ")
     c.drawString(250, YdrawLocationSVC3, str(service3))
     c.drawString(100, YdrawLocationSVC4, "Service 5 ")
     c.drawString(250, YdrawLocationSVC4, str(service5))
     c.drawString(100, YdrawLocationSVC5, "Service 6 ")
     c.drawString(250, YdrawLocationSVC5, str(service6))

总而言之,感谢您抽出时间阅读所有这些内容,以及任何有任何想法我都希望听到它的人。到目前为止,我要添加的最后一件事是我最喜欢的解决方案,虽然它不能很好地适应我的问题,但我想更多地探索这个选项。我觉得答案在于转移,但我仍然是编程方面的新手,并且不确定如何最好地实现。非常感谢您的意见。

(@ maik-s的一部分回答我以前的帖子。

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

我被要求发布代码,其中空字符串留在我的输出PDF中。在这里。

对于n in Line:

Service1=n[1]
Service2=n[2]
Service3=n[3]
Service4=n[4]
Service5=n[5]
Service6=n[6]
           (X , Y  )
c.drawString(72, 120, str(Service1))
c.drawString(72, 105, str(Service2))
c.drawString(72, 90, str(Service3))
c.drawString(72, 75, str(Service4))
c.drawString(72, 60, str(Service5))
c.drawString(72, 45, str(Service6))

此代码的问题在于,如果n [5]为=“”,则会绘制一个空白字符串。

0 个答案:

没有答案