がこれについて前に投稿していますが、まだ問題は完全には解決していませんが、私はいくつかの実行可能なコードを持っていますが、私はこのサイトの誰かが修正することができるかもしれませんが、LOLを修正する方法を教えてくれるかもしれません。このIfステートメントの分岐を簡略化/自動化してください。
基本的に私が達成しようとしていることについての説明は、私が何をしているかは役に立たない、または十分な情報を提供していないことを何度も伝えられているので、ここでベストを尽くします。 PDFファイルに請求書を作成して印刷するプログラムがあります。 Pythonスクリプトは、必要なすべての顧客/サービス情報などのCSVファイルから供給されます。
これまでのところ私のコードの問題は、私が持っているサービスの数であり、Python Reportlabsでは、ページ上の文字列をどこに描画するかを選択します。このためのコマンド例は次のようになります。
cursor.drawstring(xLocation,yLocation,String)
一般的な方法は、文字列6に、上記のものの下に一つずつを通してストリング1を引くであろう。次の3つの例では、最初に、すべてのサービスが請求されている場合の関数の出力方法を示します。いくつかのサービスが顧客に請求されていない場合、第2(中間)は出力です。最終的な(RightMost)の例は、出力したいコードです。
Service 1 Service 1 Service 1
Service 2 Service 3
Service 3 Service 3 Service 4
Service 4 Service 4 Service 6
Service 5
Service 6 Service 6
ブール論理に基づいて
Unfortunalyを、そしてそこに6可能なサービスがあり、それぞれがお好みならば、空または満充電に充電できるか否かということ、そして、この同じことを書くの64の可能な方法があります。完璧な出力を達成する機能。
サービスごとにブール値を作成すると、0が空、1がフルとなると、 となります。000000-111111からすべての可能性をテストする必要があります。コード化するのは完全に合理的です。
しかし、私は6つ以上のサービスが必要であり、必要な機能の数は指数関数的に増加しています。代わりに、各機能を書いて、私はすなわち、0と1セットのファイルを取るプログラムに取り組んでいます:
0000000000
0000000001
0000000010
etc..
と各行に各ビットをテストします。この関数は、行のビットに基づいて、ファイル内の各行の関数を書き出します。今、誤った出力が生成されます。私が最初にあなたに私のスクリプトが表示されます:
はdef testFIle():
# This Function will be used to enumerate through the same file you
used to create the switch dictionary,
# but will define a function for each line.
# filepath = '/home/smiley/Desktop/sampletenbools'
filepath = '/home/smiley/Desktop/10boolsALL'
with open(filepath) as fp:
num = 1
for cnt, line in enumerate(fp):
var = line
b1 = str(var)[0]
b2 = str(var)[1]
b3 = str(var)[2]
b4 = str(var)[3]
b5 = str(var)[4]
b6 = str(var)[5]
b7 = str(var)[6]
b8 = str(var)[7]
b9 = str(var)[8]
b10 = str(var)[9]
# YdrawLocationSVC1=490
# YdrawLocationSVC2=475
# YdrawLocationSVC3=460
# YdrawLocationSVC4=445
# YdrawLocationSVC5=430
# YdrawLocationSVC6=415
# YdrawLocationSVC7=400
# YdrawLocationSVC8=375
# YdrawLocationSVC9=360
# YdrawLocationSVC10=345
if b1 == "0":
YdrawLocationSVC1=1111
YdrawLocationSVC2=1
if b1 == "1":
YdrawLocationSVC1 = 1
if b2 == "0":
YdrawLocationSVC2=1111
YdrawLocationSVC3=2
if b2 == "1":
YdrawLocationSVC2 = 2
if b3 == "0":
YdrawLocationSVC3=1111
YdrawLocationSVC4=3
if b3 == "1":
YdrawLocationSVC3 = 3
if b4 == "0":
YdrawLocationSVC4=1111
YdrawLocationSVC5=4
if b4 == "1":
YdrawLocationSVC4 = 4
if b5 == "0":
YdrawLocationSVC5=1111
YdrawLocationSVC6=5
if b5 == "1":
YdrawLocationSVC5 = 5
if b6 == "0":
YdrawLocationSVC6=1111
YdrawLocationSVC7=6
if b6 == "1":
YdrawLocationSVC6 = 6
if b7 == "0":
YdrawLocationSVC7=1111
YdrawLocationSVC8=7
if b7 == "1":
YdrawLocationSVC7 = 7
if b8 == "0":
YdrawLocationSVC8=1111
YdrawLocationSVC9=8
if b8 == "1":
YdrawLocationSVC8 = 9
if b9 == "0":
YdrawLocationSVC9=1111
YdrawLocationSVC10=9
if b9 == "1":
YdrawLocationSVC9 = 9
if b10 == "0":
YdrawLocationSVC10=1111
if b10 == "1":
YdrawLocationSVC10 = 10
print "# Bitrep ="+str(var).strip("\n")
print "def Print"+str(num)+"():"
print"\tc.setFont('Deja', 12, leading=None)"
print "\t# SERVICE NAME"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC1)+", stringn1)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC2)+", stringn2)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC3)+", stringn3)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC4)+", stringn4)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC5)+", stringn5)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC6)+", stringn6)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC7)+", stringn7)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC8)+", stringn8)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC9)+", stringn9)"+\
"\n\tc.drawString(100, "+str(YdrawLocationSVC10)+", stringn10)"
# print("{} : {}".format(str(line).strip("\n"), "Print" + str(num)))
num += 1
# print "\n"
testFIle()
Currntlyこのコードは限り唯一のサービスが不足している、ここで、このように適切な出力を生成します。
# Bitrep =1111111101
def Print1022():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 6, stringn6)
c.drawString(100, 7, stringn7)
c.drawString(100, 9, stringn8)
c.drawString(100, 1111, stringn9)
c.drawString(100, 10, stringn10)
# Bitrep =1111111110
def Print1023():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 6, stringn6)
c.drawString(100, 7, stringn7)
c.drawString(100, 9, stringn8)
c.drawString(100, 9, stringn9)
c.drawString(100, 1111, stringn10)
# Bitrep =1111111111
def Print1024():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 6, stringn6)
c.drawString(100, 7, stringn7)
c.drawString(100, 9, stringn8)
c.drawString(100, 9, stringn9)
c.drawString(100, 10, stringn10)
しかし以上で私のコードブレークでロジック1つの不足しているサービスは、ここで次のように:出力が出てファイル内のすべての行については、この次のビットのように見てくるように、誰もがこの問題を解決することができた場合は
# Bitrep =1111100101
def Print998():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 1111, stringn6)
c.drawString(100, 1111, stringn7)
c.drawString(100, 9, stringn8)
c.drawString(100, 1111, stringn9)
c.drawString(100, 10, stringn10)
# Bitrep =1111100110
def Print999():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 1111, stringn6)
c.drawString(100, 1111, stringn7)
c.drawString(100, 9, stringn8)
c.drawString(100, 9, stringn9)
c.drawString(100, 1111, stringn10)
は、私が見よ、あなたのうちの**** upvoteますl:
def Print999():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 3, stringn3)
c.drawString(100, 4, stringn4)
c.drawString(100, 5, stringn5)
c.drawString(100, 1111, stringn6)
c.drawString(100, 1111, stringn7)
c.drawString(100, 6, stringn8)
c.drawString(100, 7, stringn9)
c.drawString(100, 1111, stringn10)
def Print764():
c.setFont('Deja', 12, leading=None)
# SERVICE NAME
c.drawString(100, 1, stringn1)
c.drawString(100, 2, stringn2)
c.drawString(100, 1111, stringn3)
c.drawString(100, 3, stringn4)
c.drawString(100, 4, stringn5)
c.drawString(100, 1111, stringn6)
c.drawString(100, 1111, stringn7)
c.drawString(100, 5, stringn8)
c.drawString(100, 6, stringn9)
c.drawString(100, 1111, stringn10)
いつものように、あなたが私の記事の最後までそれを作っていたら、私は笑われた以上です。これに少しでも取り組んだ人、そしてこれまで私がこれを手伝ってくれたすべての人々に感謝します。
ちょうど考えがありました。おそらく、各ブール値に辞書のように名前と値を割り当てる方法があります。 0:s1,0:s2,1:s3,0:s4,0:s5,0:s6,1:s7,0:s8,1:s9,0:s10、ここで、0または1はブール状態であり、 ':'はセパレータであり、s1〜s10は対応するビットに関連付けられたサービス名である。 – Jake
上記のようなことがあったら^、空のサービスをすべて削除し、空文字列とそれらを参照する方法を知ることができます。誰かが彼らがその仕事のようなものを作ることができると思いますか? – Jake