質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1140閲覧

Python3.x もっとコードを短くわかりやすくしたい!!

Kawachan99

総合スコア114

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/05/25 05:33

Python3.xでPDFの計算プリントを作りたいと思って作ってみたのですが、あまりにもコードが長く汚く思えたのでよろしければアドバイスご教授ください!

from fpdf import FPDF import random pdf = FPDF('P', 'mm', 'Letter') pdf.set_auto_page_break(auto=True, margin = 10) pdf.add_page() pdf.set_font('helvetica', "", 16) def Addition(): global Add_FormerNumbers, Add_LatterNumbers, Add_SumNumbers Add_FormerNumbers = [] Add_LatterNumbers = [] Add_SumNumbers = [] for i in range(25): Add_FormerNumber = random.randint(2, 1000) Add_LatterNumber = random.randint(2, 100) Add_FormerNumbers.append(Add_FormerNumber) Add_LatterNumbers.append(Add_LatterNumber) Add_Sum = Add_FormerNumber + Add_LatterNumber Add_SumNumbers.append(Add_Sum) pdf.cell(50, 10, f"{Add_FormerNumber} + {Add_LatterNumber} =", ln=1) def Substraction(): pdf.set_xy(65, 10) global Sub_FormerNumbers, Sub_LatterNumbers, Sub_SumNumbers Sub_FormerNumbers = [] Sub_LatterNumbers = [] Sub_SumNumbers = [] for i in range(25): pdf.set_x(65) while True: Sub_FormerNumber = random.randint(1, 1000) Sub_LatterNumber = random.randint(1, 100) if Sub_FormerNumber > Sub_LatterNumber: Sub_Sum = Sub_FormerNumber - Sub_LatterNumber Sub_SumNumbers.append(Sub_Sum) Sub_FormerNumbers.append(Sub_FormerNumber) Sub_LatterNumbers.append(Sub_LatterNumber) pdf.cell(50, 10, f"{Sub_FormerNumber} - {Sub_LatterNumber} =", ln=1) break def Multiplication(): global Mul_FormerNumbers, Mul_LatterNumbers, Mul_SumNumbers Mul_FormerNumbers = [] Mul_LatterNumbers = [] Mul_SumNumbers = [] pdf.set_xy(110, 10) for i in range(25): pdf.set_x(110) Mul_FormerNumber = random.randint(1, 100) Mul_LatterNumber = random.randint(1, 10) Mul_SumNum = Mul_FormerNumber * Mul_LatterNumber Mul_FormerNumbers.append(Mul_FormerNumber) Mul_LatterNumbers.append(Mul_LatterNumber) Mul_SumNumbers.append(Mul_SumNum) pdf.cell(50, 10, f"{Mul_FormerNumber} × {Mul_LatterNumber} =", ln=1) def Division(): global Div_FormerNumbers, Div_LatterNumbers, Div_SumNumbers Div_FormerNumbers = [] Div_LatterNumbers = [] Div_SumNumbers = [] pdf.set_xy(160, 10) for i in range(25): pdf.set_x(160) while True: Div_FormerNumber = random.randint(1, 1000) Div_LatterNumber = random.randint(2, 100) Div_Sum = Div_FormerNumber % Div_LatterNumber if Div_Sum == 0: Div_SumNum = round(Div_FormerNumber / Div_LatterNumber) Div_FormerNumbers.append(Div_FormerNumber) Div_LatterNumbers.append(Div_LatterNumber) Div_SumNumbers.append(Div_SumNum) pdf.cell(50, 10, f"{Div_FormerNumber} ÷ {Div_LatterNumber} =", ln=1) break def AnswerSheet(): for n in range(25): pdf.cell(50, 10, f"{Add_FormerNumbers[n]} + {Add_LatterNumbers[n]} = {Add_SumNumbers[n]}", ln=1) pdf.set_xy(65, 10) for n in range(25): pdf.set_x(65) pdf.cell(50, 10, f"{Sub_FormerNumbers[n]} - {Sub_LatterNumbers[n]} = {Sub_SumNumbers[n]}", ln=1) pdf.set_xy(110, 10) for n in range(25): pdf.set_x(110) pdf.cell(50, 10, f"{Mul_FormerNumbers[n]} × {Mul_LatterNumbers[n]} = {Mul_SumNumbers[n]}", ln=1) pdf.set_xy(160, 10) for n in range(25): pdf.set_x(160) pdf.cell(50, 10, f"{Div_FormerNumbers[n]} ÷ {Div_LatterNumbers[n]} = {Div_SumNumbers[n]}", ln=1) def CalculateMaker(): Addition() Substraction() Multiplication() Division() AnswerSheet() for k in range(2): CalculateMaker() pdf.output("pdf_1.pdf")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

おはようございます。

問題文読ませていただきました。

こちらにて自分なりにまとめてみました。
https://github.com/kuroroblog/create-pdf

分かりにくい箇所もあるかと思いますが、ご確認いただけますと幸いです。????‍♂️

投稿2021/05/26 00:41

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kawachan99

2021/05/26 09:25

ご回答ありがとうございます。とても分かりやすくて勉強になりました! また、ご機会ありましたらよろしくお願いいたします!
退会済みユーザー

退会済みユーザー

2021/05/26 10:54

いえいえ。こちらこそ貴重な経験をありがとうございます。????‍♂️ また困ったこととかありましたら、気軽にご相談ください。
guest

0

各演算のメソッドを定義していますが、似たような処理を行っているので、演算自体(例えばCalculation)のクラスなりメソッドなりを定義してから、各演算をCalculationを用いて記述すると簡潔になると思います。

投稿2021/05/25 07:12

goto_yuta_

総合スコア211

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

既に解決済みのようですが、一応回答しておきます。

python

1from fpdf import FPDF 2import random 3import operator 4 5pdf = FPDF('P', 'mm', 'Letter') 6 7pdf.set_auto_page_break(auto=True, margin = 10) 8pdf.add_page() 9 10pdf.set_font('helvetica', "", 16) 11 12rows = 25 13add_sub_min1 = 2 14add_sub_max1 = 900 15add_sub_min2 = 2 16add_sub_max2 = 100 17mul_div_min1 = 1 18mul_div_max1 = 100 19mul_div_min2 = 2 20mul_div_max2 = 10 21 22def numbers(min, max, count): 23 from random import randint 24 return [randint(min, max) for _ in range(count)] 25 26def calc(Former, Latter, op): 27 return [op(l, r) for l, r in zip(Former, Latter)] 28 29def Addition(): 30 FormerNumbers = numbers(add_sub_min1, add_sub_max1, rows) 31 LatterNumbers = numbers(add_sub_min2, add_sub_max2, rows) 32 ResultNumbers = calc(FormerNumbers, LatterNumbers, operator.add) 33 return {'op':'+', 'L_F':FormerNumbers, 'L_L':LatterNumbers, 'R':ResultNumbers} 34 35def Substraction(): 36 ResultNumbers = numbers(add_sub_min1, add_sub_max1, rows) 37 LatterNumbers = numbers(add_sub_min2, add_sub_max2, rows) 38 FormerNumbers = calc(ResultNumbers, LatterNumbers, operator.add) 39 return {'op':'-', 'L_F':FormerNumbers, 'L_L':LatterNumbers, 'R':ResultNumbers} 40 41def Multiplication(): 42 FormerNumbers = numbers(mul_div_min1, mul_div_max1, rows) 43 LatterNumbers = numbers(mul_div_min2, mul_div_max2, rows) 44 ResultNumbers = calc(FormerNumbers, LatterNumbers, operator.mul) 45 return {'op':'×', 'L_F':FormerNumbers, 'L_L':LatterNumbers, 'R':ResultNumbers} 46 47def Division(): 48 ResultNumbers = numbers(mul_div_min1, mul_div_max1, rows) 49 LatterNumbers = numbers(mul_div_min2, mul_div_max2, rows) 50 FormerNumbers = calc(ResultNumbers, LatterNumbers, operator.mul) 51 return {'op':'÷', 'L_F':FormerNumbers, 'L_L':LatterNumbers, 'R':ResultNumbers} 52 53def ProblemSheet(AddData, SubData, MulData, DivData): 54 for n in range(rows): 55 pdf.cell(50, 10, f"{AddData['L_F'][n]} {AddData['op']} {AddData['L_L'][n]} =", ln=1) 56 pdf.set_xy(65, 10) 57 for n in range(rows): 58 pdf.set_x(65) 59 pdf.cell(50, 10, f"{SubData['L_F'][n]} {SubData['op']} {SubData['L_L'][n]} =", ln=1) 60 pdf.set_xy(110, 10) 61 for n in range(rows): 62 pdf.set_x(110) 63 pdf.cell(50, 10, f"{MulData['L_F'][n]} {MulData['op']} {MulData['L_L'][n]} =", ln=1) 64 pdf.set_xy(160, 10) 65 for n in range(rows): 66 pdf.set_x(160) 67 pdf.cell(50, 10, f"{DivData['L_F'][n]} {DivData['op']} {DivData['L_L'][n]} =", ln=1) 68 69 70def AnswerSheet(AddData, SubData, MulData, DivData): 71 for n in range(rows): 72 pdf.cell(50, 10, f"{AddData['L_F'][n]} {AddData['op']} {AddData['L_L'][n]} = {AddData['R'][n]}", ln=1) 73 pdf.set_xy(65, 10) 74 for n in range(rows): 75 pdf.set_x(65) 76 pdf.cell(50, 10, f"{SubData['L_F'][n]} {SubData['op']} {SubData['L_L'][n]} = {SubData['R'][n]}", ln=1) 77 pdf.set_xy(110, 10) 78 for n in range(rows): 79 pdf.set_x(110) 80 pdf.cell(50, 10, f"{MulData['L_F'][n]} {MulData['op']} {MulData['L_L'][n]} = {MulData['R'][n]}", ln=1) 81 pdf.set_xy(160, 10) 82 for n in range(rows): 83 pdf.set_x(160) 84 pdf.cell(50, 10, f"{DivData['L_F'][n]} {DivData['op']} {DivData['L_L'][n]} = {DivData['R'][n]}", ln=1) 85 86def CalculateMaker(): 87 AddData = Addition() 88 SubData = Substraction() 89 MulData = Multiplication() 90 DivData = Division() 91 ProblemSheet(AddData, SubData, MulData, DivData) 92 AnswerSheet(AddData, SubData, MulData, DivData) 93 94for k in range(2): 95 CalculateMaker() 96 97pdf.output("pdf_2.pdf")

投稿2021/05/26 13:42

ppaul

総合スコア24666

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問