Exercice de calcul Python (extension)

Cette fois, nous allons étendre la fonction de "Calcul foret python" que j'ai écrit la dernière fois. Les fonctions à ajouter sont les suivantes.

Extension

・ Ajout du numéro de problème ・ Augmentation du nombre de questions à 100


Tout d'abord, nous ajouterons le numéro du problème. Puisque le code devient ici compliqué, nous résumerons le processus de sortie du problème et répondrons sous la forme d'une fonction. Le code est ci-dessous.

Code supplémentaire du numéro de problème

Fonction de sortie en question


def question_out_txt(): #Fonction de sortie du problème
    for cnt in range(10):
        num1 = random.randint(1,9)
        num2 = random.randint(1,9)
        if (cnt + 1) / 10 < 1: #Si le numéro du problème est à 1 chiffre
            question = "(" + str(cnt + 1) + ")  " + \
                       str(num1) + " + " + \
                       str(num2) + " = "
        else :
            question = "(" + str(cnt + 1) + ") " + \
                       str(num1) + " + " + \
                       str(num2) + " = "
        answers.append(num1 + num2)
        f.write(question + "\n")

Fonction de sortie de la réponse


def answer_out_txt(): #Fonction qui génère la réponse
    f.write("\nA. ")
    for i,answer in enumerate(answers,1):
        out_ans = "(" + str(i) + ") "  + \
                  str(answer) + " "
        f.write(out_ans)

La fonction de sortie de la réponse utilise la fonction d'énumération </ b> pour ajouter l'index. Cette fonction est une fonction pour obtenir l'index d'un objet itérable. J'ai défini le point de départ sur 1 et défini le numéro du problème.

Code entier

Foret de calcul


import random

answers = []

def question_out_txt(): #Fonction de sortie du problème
    for cnt in range(10):
        num1 = random.randint(1,9)
        num2 = random.randint(1,9)
        if (cnt + 1) / 10 < 1:
            question = "(" + str(cnt + 1) + ")  " + \
                       str(num1) + " + " + \
                       str(num2) + " = "
        else :
            question = "(" + str(cnt + 1) + ") " + \
                       str(num1) + " + " + \
                       str(num2) + " = "
        answers.append(num1 + num2)
        f.write(question+"\n")

def answer_out_txt(): #Fonction qui génère la réponse
    f.write("\nA. ")
    for i,answer in enumerate(answers,1):
        out_ans = "(" + str(i) + ") "  + \
                  str(answer) + " "
        f.write(out_ans)

with open("keisan.txt","w") as f:
    question_out_txt()
    answer_out_txt()

Résultat de sortie


(1)  7 + 1 = 
(2)  8 + 8 = 
(3)  5 + 2 = 
(4)  9 + 7 = 
(5)  5 + 9 = 
(6)  1 + 6 = 
(7)  4 + 5 = 
(8)  6 + 2 = 
(9)  5 + 3 = 
(10) 2 + 7 = 

A. (1) 8 (2) 16 (3) 7 (4) 16 (5) 14 (6) 7 (7) 9 (8) 8 (9) 8 (10) 9 

Augmentation à 100 questions

Ensuite, nous augmenterons le nombre de problèmes. Le format est 5x20, mais je veux aligner les retraits proprement, donc j'utiliserai des espaces demi-largeur pour aligner les retraits. Le code est ci-dessous.

Code d'augmentation du numéro de problème

Sortie de problème


def question_out_txt(): #Fonction de sortie du problème
    for cnt in range(100):
        num1 = random.randint(1,9)
        num2 = random.randint(1,9)
        if (cnt + 1) / 10 < 1: #Pour 1 chiffre
            question = "(" + str(cnt + 1) + ")  " + \
                       str(num1) + " + " + \
                       str(num2) + " = "
        else :
            question = "(" + str(cnt + 1) + ") " + \
                       str(num1) + " + " + \
                       str(num2) + " = "
        answers.append(num1 + num2)
        if (cnt + 1) % 5 == 0:
            f.write(question + "\n")
        else:
            f.write(question + " ")

Ici, l'indentation se décale selon que le numéro du problème est un ou deux chiffres, de sorte que le nombre d'espaces de demi-largeur est spécifié dans la branche conditionnelle pour aligner l'indentation. Lors de la sortie du problème, le problème est résolu à un multiple de 5.

Sortie de réponse


def answer_out_txt(): #Fonction qui génère la réponse
    f.write("\nA.\n")
    for i,answer in enumerate(answers,1):
        if (i / 10 < 1) and (answer / 10 < 1): #Numéro à 1 chiffre,Réponse à 1 chiffre
            out_ans = "(" + str(i) + ")  " + \
                      str(answer) + "  "
        elif (i / 10 < 1) and (answer / 10 >= 1): #Numéro à 1 chiffre,La réponse est à 2 chiffres
            out_ans = "(" + str(i) + ")  " + \
                      str(answer) + " "
        elif (i / 10 >= 1) and (answer / 10 < 1): #Numéro à 2 chiffres,Réponse à 1 chiffre
            out_ans = "(" + str(i) + ") " + \
                      str(answer) + "  "
        else:                                     #Numéro à 2 chiffres,La réponse est à 2 chiffres
            out_ans = "(" + str(i) + ") " + \
                      str(answer) + " "

        if i % 5 == 0: #Ligne de rupture pour chaque numéro de problème qui est un multiple de 5
            f.write(out_ans + "\n")
        else:
            f.write(out_ans + " ")

Le point est le traitement de la sortie de réponse. Étant donné que le nombre de chiffres de chacun des numéros de question et de la réponse est un ou deux chiffres, le branchement conditionnel est 2 ^ 2 et il y a quatre façons </ b>. Encore une fois, le numéro de la question casse tous les multiples de 5.

Code entier

Foret de calcul


import random

answers = []

def question_out_txt(): #Fonction de sortie du problème
    for cnt in range(100):
        num1 = random.randint(1,9)
        num2 = random.randint(1,9)
        if (cnt + 1) / 10 < 1: #Si moins de 2 chiffres
            question = "(" + str(cnt + 1) + ")  " + \
                       str(num1) + " + " + \
                       str(num2) + " = "
        else :
            question = "(" + str(cnt + 1) + ") " + \
                       str(num1) + " + " + \
                       str(num2) + " = "
        answers.append(num1 + num2)
        if (cnt + 1) % 5 == 0:
            f.write(question + "\n")
        else:
            f.write(question + " ")

def answer_out_txt(): #Fonction qui génère la réponse
    f.write("\nA.\n")
    for i,answer in enumerate(answers,1):
        if (i / 10 < 1) and (answer / 10 < 1): #Numéro à 1 chiffre,Réponse à 1 chiffre
            out_ans = "(" + str(i) + ")  " + \
                      str(answer) + "  "
        elif (i / 10 < 1) and (answer / 10 >= 1): #Numéro à 1 chiffre,La réponse est à 2 chiffres
            out_ans = "(" + str(i) + ")  " + \
                      str(answer) + " "
        elif (i / 10 >= 1) and (answer / 10 < 1): #Numéro à 2 chiffres,Réponse à 1 chiffre
            out_ans = "(" + str(i) + ") " + \
                      str(answer) + "  "
        else:                                     #Numéro à 2 chiffres,La réponse est à 2 chiffres
            out_ans = "(" + str(i) + ") " + \
                      str(answer) + " "

        if i % 5 == 0: #Ligne de rupture pour chaque numéro de problème qui est un multiple de 5
            f.write(out_ans + "\n")
        else:
            f.write(out_ans + " ")

with open("keisan.txt","w") as f: #Ouvrir un fichier texte
    question_out_txt()
    answer_out_txt()

Résultat de sortie


(1)  5 + 8 =  (2)  2 + 4 =  (3)  8 + 7 =  (4)  2 + 4 =  (5)  7 + 9 = 
(6)  8 + 8 =  (7)  8 + 5 =  (8)  7 + 8 =  (9)  2 + 1 =  (10) 3 + 1 = 
(11) 8 + 1 =  (12) 7 + 2 =  (13) 9 + 8 =  (14) 6 + 2 =  (15) 3 + 4 = 
(16) 9 + 9 =  (17) 5 + 7 =  (18) 7 + 5 =  (19) 4 + 9 =  (20) 4 + 8 = 
(21) 7 + 3 =  (22) 1 + 7 =  (23) 4 + 5 =  (24) 1 + 6 =  (25) 5 + 1 = 
(26) 4 + 7 =  (27) 9 + 4 =  (28) 8 + 4 =  (29) 5 + 4 =  (30) 3 + 5 = 
(31) 2 + 7 =  (32) 8 + 1 =  (33) 5 + 6 =  (34) 7 + 6 =  (35) 2 + 8 = 
(36) 9 + 9 =  (37) 5 + 3 =  (38) 6 + 1 =  (39) 3 + 1 =  (40) 3 + 2 = 
(41) 7 + 7 =  (42) 2 + 5 =  (43) 9 + 1 =  (44) 7 + 9 =  (45) 6 + 5 = 
(46) 5 + 8 =  (47) 8 + 4 =  (48) 2 + 2 =  (49) 3 + 2 =  (50) 3 + 9 = 
(51) 6 + 4 =  (52) 7 + 9 =  (53) 5 + 5 =  (54) 9 + 5 =  (55) 6 + 5 = 
(56) 9 + 6 =  (57) 2 + 2 =  (58) 1 + 7 =  (59) 9 + 7 =  (60) 5 + 5 = 
(61) 9 + 5 =  (62) 3 + 1 =  (63) 2 + 8 =  (64) 4 + 1 =  (65) 6 + 6 = 
(66) 6 + 6 =  (67) 4 + 6 =  (68) 8 + 8 =  (69) 7 + 1 =  (70) 2 + 8 = 
(71) 5 + 1 =  (72) 8 + 8 =  (73) 4 + 8 =  (74) 2 + 3 =  (75) 5 + 2 = 
(76) 8 + 7 =  (77) 6 + 8 =  (78) 7 + 6 =  (79) 2 + 1 =  (80) 4 + 9 = 
(81) 9 + 3 =  (82) 6 + 5 =  (83) 5 + 7 =  (84) 7 + 7 =  (85) 9 + 6 = 
(86) 9 + 9 =  (87) 8 + 6 =  (88) 2 + 4 =  (89) 7 + 6 =  (90) 9 + 6 = 
(91) 8 + 2 =  (92) 5 + 3 =  (93) 3 + 3 =  (94) 2 + 7 =  (95) 4 + 2 = 
(96) 3 + 6 =  (97) 6 + 6 =  (98) 8 + 8 =  (99) 1 + 9 =  (100) 8 + 1 = 

A.
(1)  13  (2)  6   (3)  15  (4)  6   (5)  16 
(6)  16  (7)  13  (8)  15  (9)  3   (10) 4  
(11) 9   (12) 9   (13) 17  (14) 8   (15) 7  
(16) 18  (17) 12  (18) 12  (19) 13  (20) 12 
(21) 10  (22) 8   (23) 9   (24) 7   (25) 6  
(26) 11  (27) 13  (28) 12  (29) 9   (30) 8  
(31) 9   (32) 9   (33) 11  (34) 13  (35) 10 
(36) 18  (37) 8   (38) 7   (39) 4   (40) 5  
(41) 14  (42) 7   (43) 10  (44) 16  (45) 11 
(46) 13  (47) 12  (48) 4   (49) 5   (50) 12 
(51) 10  (52) 16  (53) 10  (54) 14  (55) 11 
(56) 15  (57) 4   (58) 8   (59) 16  (60) 10 
(61) 14  (62) 4   (63) 10  (64) 5   (65) 12 
(66) 12  (67) 10  (68) 16  (69) 8   (70) 10 
(71) 6   (72) 16  (73) 12  (74) 5   (75) 7  
(76) 15  (77) 14  (78) 13  (79) 3   (80) 13 
(81) 12  (82) 11  (83) 12  (84) 14  (85) 15 
(86) 18  (87) 14  (88) 6   (89) 13  (90) 15 
(91) 10  (92) 8   (93) 6   (94) 9   (95) 6  
(96) 9   (97) 12  (98) 16  (99) 10  (100) 9  

Regarder en arrière

Cela fait longtemps, mais cette fois, nous avons étendu la fonctionnalité en attribuant des numéros de questions et en augmentant le nombre de questions. J'ai eu du mal à penser à la ramification conditionnelle pour aligner les retraits. Cependant, la question est de savoir quoi faire avec l'indentation lorsque le nombre de problèmes devient arbitraire </ b>. Désormais, j'aimerais le résoudre tout en développant les fonctions.