[PYTHON] Faire une impression de forage de calcul

introduction

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.

environnement

Installation de ReportLab

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

Image de sortie

Cette fois, l'addition, la soustraction et la multiplication à deux chiffres sont envoyées à l'impression. image002.png

Comment utiliser les fonctions de sortie PDF drawString et line

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.

Programme de génération automatique de forage de calcul

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.

image003.png

c'est tout. Je vous remercie pour votre travail acharné.

Recommended Posts

Faire une impression de forage de calcul
Faisons un jeu de squash
Faire un décorateur de fonction
Faire une matrice de distance
Je vais créer un mot de passe!
Créer un bouton Nyan
Créez un jeu à la Tetris!
Créer un décodeur Base64
Créons facilement un gif mathématique en utilisant Google Colaboratory
Faisons un robot Discord.
Créer un backend Blueqat ~ Partie 1
Créer un backend Blueqat ~ Partie 2
[Django] Créer un menu déroulant
Créer un LINE BOT (chat)
Créer un bookmarklet en Python
Faites une loterie avec Python
Faire de Responder un démon (service)
Comment faire une traduction japonais-anglais
Faisons une rumba distante [Logiciel]
Créer une boîte à Tweet pour Pepper
Faisons une interface graphique avec python.
Faisons un service de vente au comptant 2
Créer un outil de reconnaissance de visage à l'aide de TensorFlow
Comment créer un bot slack
Faisons un service de vente au comptant 1
Comment créer un robot - Avancé
Comment créer une fonction récursive
Rendre la compilation C un peu plus facile
python / Créer un dict à partir d'une liste.
[Python] Faire de la fonction une fonction lambda
Créer un système de recommandation avec python
[Blender] Comment créer un plug-in Blender
Créer un filtre avec un modèle django
Faisons un graphe avec python! !!
Faisons un spacon avec xCAT
Comment créer un robot - Basic
Créer un itérateur de modèle avec PySide
Faire un joli graphique avec plotly
Créez un générateur de rideaux avec Blender
Faisons un service de vente au comptant 3