J'ai fait un programme de génération de forage de calcul pour faire des impressions d'auto-apprentissage pour les classes inférieures de l'école primaire. Créez au hasard une formule avec python et convertissez-la en pdf au format A4. Si vous imprimez le fichier créé à la maison ou dans un dépanneur et que votre enfant apprend par lui-même, l'objectif sera atteint.
Pour imprimer la formule générée, utilisez ReportLab, une bibliothèque de conversion PDF.
$ sudo pip3 install ReportLab
La documentation détaillée sur ReportLab est ci-dessous. https://www.reportlab.com/docs/reportlab-userguide.pdf
Cette fois, l'addition, la soustraction et la multiplication à deux chiffres sont envoyées à l'impression.
Cette création d'impression est principalement réalisée en utilisant deux fonctions, drawString () et line (). Avant d'entrer dans le programme lui-même, je résumerai uniquement l'utilisation de base.
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A4
#Créez un canevas. Spécifiez le nom et la taille du fichier
c = canvas.Canvas("calc_train.pdf",pagesize=A4)
#Définir les coordonnées de sortie
x=0
y=0
# "hoge"Coordonne la chaîne de caractères(0,0)Exporter vers
c.drawString(x,y,"hoge")
#Tracez une ligne droite
c.line(x,y,x+10,y)
#Générer une page pdf1
c.showPage()
#Enregistrer le fichier
c.save()
L'origine des coordonnées ReportLab est le "bas à gauche" de la page.
Ce qui suit est le programme de génération automatique de forage de calcul utilisant ReportLab, qui est le but de cette fois.
import os, sys
import random
from reportlab.pdfgen import canvas
from reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.ttfonts import TTFont
from reportlab.lib.pagesizes import A4
#Coordonnées de base de la formule 5x5
x_list = [20, 130, 240, 350, 460]
y_list = [730, 580, 430, 280, 130]
#Il est également possible de spécifier la police
fontname = "Helvetica"
#Pour sortir le japonais, définissez comme suit.
#Veuillez vous référer à votre environnement pour le chemin.
#pdfmetrics.registerFont(TTFont(fontname,"/mnt/c/Windows/Fonts/msgothic.ttc"))
#Une fonction qui génère une formule de calcul aux coordonnées spécifiées
#Le calcul attendu est que chaque élément comporte 2 chiffres ou moins.
def Set_calc(c,x,y,ope,d1,d2):
# c: canvas
# x, y :Coordonner
# ope :Chaîne de symboles mathématiques
offset = 30
_d1 = str(d1)
_d2 = str(d2)
#Ajuster la largeur des caractères
if(d1<10):
_d1 = " " + _d1
if(d2<10):
_d2 = " " + _d2
c.drawString(x+offset, y, _d1)
c.drawString(x, y-offset, ope)
c.drawString(x+offset, y-offset, _d2)
c.line(x,y-offset-5,x+offset*2.5,y-offset-5)
#Une fonction qui génère une formule de calcul pour une page
def Make_page(c,ope,d1_max,d2_max):
# c: canvas
# ope :Chaîne de symboles mathématiques
# d1_max, d2_max :Réglage de la valeur maximale pour la valeur à calculer
c.setFont(fontname,20)
#Sortie de chaîne de caractères de la partie d'en-tête
c.drawString(5,800, " Name: Day: / ")
c.setFont(fontname,30)
# Set Value
for row in y_list:
for col in x_list:
#Générer aléatoirement des éléments dans la valeur maximale définie
d1 = random.randint(1, d1_max)
d2 = random.randint(1, d2_max)
#En cas d'ajout
if(ope=="+"):
Set_calc(c,col,row,"+ ",d1,d2)
#En cas de soustraction
elif(ope=="-"):
#Ne manipulez pas les valeurs négatives
if(d1<d2):
tmp=d1
d1=d2
d2=tmp
Set_calc(c,col,row,"- ",d1,d2)
#En cas de multiplication
elif(ope=="x"):
Set_calc(c,col,row,"× ",d1,d2)
else:
print("[Error] Not support operation:",ope)
c.showPage()
#Ci-dessous la fonction principale
print(" >>> Start")
c = canvas.Canvas("calc_train.pdf",pagesize=A4)
#Ajout (valeur maximale de chaque élément: 99)
Make_page(c,"+",99,99)
#Soustraction (valeurs d'élément maximales: 99 et 9)
Make_page(c,"-",99,9)
#Soustraction 2 (valeur maximale de chaque élément: 99)
Make_page(c,"-",99,99)
#Multiplication (valeurs d'élément maximales: 99 et 9)
Make_page(c,"x",99,9)
c.save()
print(" >>> Finish")
Lorsque l'exemple ci-dessus est exécuté, les formules de calcul 5x5 seront imprimées sur du papier de format A4. Veuillez modifier la plage de calcul en fonction de la note de votre enfant et ajuster le nombre de formules de calcul par feuille.
c'est tout. Je vous remercie pour votre travail acharné.
Recommended Posts