Examen d'ingénieur en information de base (FE) Examen de l'après-midi Exemple de question Python Explication

introduction

J'ai expliqué l 'exemple de problème Python publié par IPA (agence d'exécution des tests FE). Toute erreur ou partie déroutante sera corrigée et complétée une par une, veuillez donc poser des questions ou des commentaires. Bien sûr, la connaissance de Python est requise car il s'agit d'un problème de Python, mais en plus, une connaissance des mathématiques du premier cycle du secondaire (figures) et du secondaire (fonctions triangulaires) est requise.

question 1

Blank a1, a2

La position du marqueur (blanc a1) et le sens de déplacement (blanc a2) après exécution de la séquence d'instructions α (R3; R4; F100; T90; E0; F100; E0) sont demandés. La séquence d'instructions α consiste en un double intervalle de répétition, comme illustré sur la figure 2. Que l'intervalle de répétition extérieur indiqué par l'instruction 0 (R3) soit répété 0 (vert), et l'intervalle de répétition indiqué par l'instruction 1 (R4) soit répété 1 (rouge). image.png Lorsque la séquence d'instructions α est exécutée, l'instruction 2 (F100) trace la ligne en premier. Ensuite, la commande 3 (T90) pivote de 90 ° dans le sens antihoraire. Comme cela est répété 4 fois avec la commande 1, dessinez un carré (ligne pointillée rouge dans la figure ci-dessous). Ensuite, la commande 5 (F100) écrase la ligne déjà dessinée et arrive dans le coin inférieur droit du carré. Jusqu'à ce que vous atteigniez le côté droit de ce carré, c'est une répétition de la commande 0 (R3) (ligne pointillée verte dans la figure ci-dessous). Lorsque les deuxième et troisième répétitions de l'instruction 0 sont exécutées, les carrés augmentent de un. image.png Puisque la position du marqueur après l'exécution de la séquence d'instructions α est la partie inférieure droite du carré le plus à droite, c'est la position de ② sur la figure 3 (option a1). La direction du marqueur est vers la droite, c'est-à-dire la direction positive de l'axe des x (option a2). Par conséquent, la bonne réponse est la combinaison des options c (①, direction positive de l'axe des x).   Réponse: Choix C (a1: ②, a2: direction positive de l'axe des x)

Blanc b

La séquence de commandes qui dessine le pentagone régulier sur la figure 4 est demandée. Avant d'envisager la séquence de commandes, passons en revue les mathématiques de niveau secondaire. Rappelez-vous la propriété que la somme des angles extérieurs d'un polygone (cette fois un pentagone régulier) est de 360 °. Pour un pentagone régulier, l'angle extérieur est de 360 ° ÷ 5 = 72 °. image.png Pour dessiner le pentagone régulier de la figure 4, avancez de 100 ° et tournez-le de 72 ° dans le sens antihoraire 5 fois. image.png La commande d'avance de 100 est F100 et la commande de rotation antihoraire de 72 ° est T72. Pour répéter cela 5 fois, vous pouvez l'enfermer dans R5 et E0, ainsi la séquence d'instructions est R5; F100; T72; E0. Par conséquent, l'option F est la bonne réponse.

question 2

Blanc c


def parse(s):
    return [(x[0],Blanc c) for x in s.split(';')]

Le blanc C est une question à compléter qui répond à la valeur de retour de l'analyse de fonction. Cette question nécessite deux points: comprendre les spécifications de l'analyse de fonction montrées dans l'énoncé du problème et implémenter les spécifications comprises avec les connaissances grammaticales de Python. C'est un grand défi.

Comprendre la fonction Analyser à partir de l'énoncé du problème

La fonction Parse est une fonction qui analyse une chaîne de caractères donnée (par exemple, «R4: F100: T90: E0») et la convertit dans un format facile à interpréter pour le programme. Indique la partie pertinente de l'énoncé du problème. image.png La "chaîne de caractères donnée en argument" est "R4: F100: T90: E0". Il y a quatre taples, ('R', 4), ('F', 100), ('T', 90) et ('E', 0). Un taple (par exemple, ('R', 4)) correspond à une instruction. R est le code d'instruction et 4 est le paramètre numérique. Place ces taples (4) dans une liste et les renvoie comme valeur de retour.

grammaire

Les connaissances en grammaire Python requises pour cette question sont les suivantes. --Inclus --Taple --Liste

def parse(s):
  return [(x[0],Blanc c) for x in s.split(';')]

Une seule ligne de processus de retour "convertit la chaîne d'instructions donnée par l'argument en une liste dont les éléments sont des tapples". C'est un processus compliqué, mais comprenons-le en le décomposant en éléments individuels. Supposons que l'on vous donne «R4: F100: T90: E0» comme chaîne d'instructions. Cette chaîne a été affectée à la variable s. Le premier est divisé. split est une fonction qui divise une chaîne de caractères et la renvoie sous forme de liste. L'utilisation de la fonction de division sur la chaîne s renvoie une liste comme celle-ci: Puisque «;» est spécifié comme délimiteur, il est divisé en R4, F100, T90 et E0 et affiché sous forme de liste. image.png Vient ensuite l'instruction for. Cette instruction for est utilisée comme "inclusion". Pour la cible de traitement x de l'instruction for, x [0] et le blanc c sont sortis sous forme de taple. Je ne sais pas ce que vous dites, donc je vais vous expliquer dans l'ordre en utilisant le résultat de split ['R5', 'F100', 'T72', 'E0'] comme exemple. Tout d'abord, il y a des instructions simples. image.png Cela revient à renvoyer le contenu du tableau sous forme de liste. Le x le plus à gauche affiche simplement x comme un élément de la liste, de sorte que la même liste est affichée en conséquence. Ce n'est pas très intéressant. Alors, que diriez-vous de définir x [0] selon l'énoncé du problème? image.png x [0] représente le premier caractère de la variable x (chaîne de caractères). Par conséquent, le premier caractère de chaque élément est renvoyé sous forme de liste. Si vous souhaitez afficher le deuxième caractère, x [1], essayez ceci également. image.png Le deuxième caractère s'affiche. Dans l'énoncé du problème, les valeurs après le deuxième caractère sont traitées comme des "paramètres numériques". Par conséquent, envisagez une méthode pour extraire le deuxième caractère et les suivants sous forme de nombres. Utilisez x [1:] pour récupérer le deuxième caractère et les suivants. Le premier 1 est le deuxième caractère, et si rien n'est spécifié après :, cela signifie "tout après cela". Essayons d'utiliser des inclusions pour voir quel sera le résultat de x [1:]. image.png J'ai pu récupérer les chiffres en toute sécurité. Cependant, à ce stade, il s'agit d'une chaîne de caractères. Utilisez la fonction int pour convertir une chaîne de nombres en nombre. image.png J'ai pu récupérer les chiffres en toute sécurité. Maintenant, modifions-le légèrement pour que le premier caractère (x [0]) et les nombres après le deuxième caractère soient renvoyés sous forme de tapples. image.png Par conséquent, le blanc c est rempli avec l'option A "int (x [1:])".

Blanc d1, d2, e

Il s'agit d'un problème de remplissage du blanc pour la fonction de transfert. image.png

L'énoncé du problème décrit la méthode avancée de la classe Makert comme suit.

forward(val) Avancez les coordonnées de position du marqueur de la longueur spécifiée par val dans le sens de déplacement actuel et tracez un segment de ligne. Argument: longueur val

Donc, cette question porte sur "comment tracer une ligne". Des connaissances mathématiques de niveau secondaire (bases des fonctions triangulaires) sont requises. Comme prémisse, self.x et self.y contiennent les coordonnées de position actuelle du marqueur, et self.angle contient l'affichage de la fréquence (90 °, 180 °, etc.) dans le sens de déplacement actuel. La figure ci-dessous montre le fonctionnement de la méthode avant. image.png La flèche rouge est la ligne que vous souhaitez dessiner. Tracez une ligne de (x1, y1) en bas à gauche à (x2, y2) en haut à droite. Voici l'explication du programme.


rad = math.radians(self.angle)

Dans cette ligne, la valeur stockée dans l'angle variable (le sens de déplacement stocké dans la méthode de fréquence) est convertie en méthode de degré d'arc et stockée dans la variable rad. La méthode de puissance ou méthode de degré d'arc est une méthode de notation pour les angles. Dans la bibliothèque mathématique de Python (math. *), La méthode du degré d'arc est utilisée pour les angles, elle est donc ici convertie en méthode du degré d'arc (notation radian) par la méthode math.radians.

dx = val *Vierge d1
dy = val *Vierge d2

Trouvez la longueur dx dans la direction de l'axe x et la longueur dy dans la direction de l'axe y de la ligne dans la figure ci-dessus. D'après la définition de la fonction triangulaire, dx = val * cos (rad), dy = val * sin (rad). Par conséquent, le blanc d1 contiendra math.cos (rad) '' et le blanc d2 contiendra math.sin (rad) ''.

Dans le blanc e, la valeur à affecter à x1 et y1 est demandée. Quant à ce que sont x1 et y1, l'indication est que la ligne en dessous explique "dessiner une ligne" dans un commentaire. Les coordonnées du point de départ du segment de ligne sont x1 et y1. L'emplacement actuel du marqueur est stocké dans les variables self.x et self.y. Par conséquent, self.x et self.y sont les points de départ du segment de ligne. Par conséquent, x1 est self.x et y1 est self.y. Les self.x + dx '' et self.y + dy '' qui suivent le blanc e sont également d'excellents indices. dx et dy étaient la longueur de la ligne à tracer dans la direction de l'axe x et la longueur dans la direction de l'axe y. Par conséquent, la valeur obtenue en soustrayant dx de self.x + dx (c'est-à-dire self.x) est la coordonnée x du point de départ du segment de ligne, et la valeur obtenue en soustrayant dy de self.y + dy (c'est-à-dire self.y) est le segment de ligne. Il peut également être lu comme coordonnée y du point de départ. Par conséquent, dans le blanc e, l'option c "self.x, self.y" est entrée.

Blanc f

C'est un problème de remplissage du blanc de la fonction draw. Quant à la fonction draw, il y a une explication dans l'énoncé du problème, alors lisez le programme et l'énoncé du problème en association l'un avec l'autre.

(3) La fonction draw interprète et exécute chaque instruction dans la séquence d'instructions donnée en argument, et affiche le résultat du dessin. (Omis) Le contour du dessin de la fonction est illustré ci-dessous. (1) Convertissez la séquence d'instructions en une liste dont les éléments sont des taples à l'aide de la fonction parse. (2) Utilisez la classe Maker pour faire fonctionner le marqueur. ③ Utilisez une pile pour gérer l'imbrication d'intervalles répétés. (4) La pile est représentée par une liste, et chaque élément est un dictionnaire avec la position de départ opno de la répétition et le nombre de repos restants. ⑤ Utilisez la fonction d'impression à la position de programme β pour sortir le changement d'état de la pile.

La figure ci-dessous montre l'explication ci-dessus associée au programme. image.png

Le point à prêter attention est (1) intsts. Le résultat de l'utilisation de la séquence d'instructions "R2; R3; E0; E0" du résultat d'exécution 2 comme argument de la fonction d'analyse [('R', 2), ('R', 3), ('E', 0), (' La liste de E ', 0)] est affectée à intsts. Puisque insts est une liste, par exemple, la valeur de inst [0] est taple ('R', 2), et la valeur de inst [1] est taple ('R', 3). Ainsi, par exemple, si opno vaut 0 (valeur initiale) et que vous exécutez `code, val = insts [opno]` `, 'R' est affecté au code et 2 est affecté à val. En d'autres termes, le code d'instruction est affecté au code et le paramètre numérique est affecté à val. Notez que opno est une variable qui indique "le nombre de séquences d'instructions en cours d'exécution". Eh bien, c'est vierge f.


    if code == 'F':
        marker.forward(Blanc f)
    elif code == 'T':
        marker.turn(Blanc f)
    elif code == 'R':
        stack.append({'opno':opno, 'rest':Blanc f})

Lorsque le code d'instruction (variable de code) est 'F', 'T' ou 'R', l'argument à passer à chaque fonction de la classe Marker est demandé. Dans le précédent `` code, val = insts [opno] `, il est connu que la paire avec le code est val, donc vous pouvez le comprendre de manière relativement intuitive. L'espace f est rempli de val. Par exemple, lorsque le code d'instruction est 'F', un segment de ligne de la longueur spécifiée par le paramètre numérique (val) est dessiné comme indiqué dans le tableau 1. L'explication de la fonction forward dit également "Avancez de la longueur spécifiée par val et tracez une ligne", et vous pouvez voir que val doit être spécifié comme argument de forward. (La fonction de rotation correspond au code d'instruction 'T') Par conséquent, dans le blanc f, l'option d (val) est la bonne réponse.

Blanc g, h, i


    elif code == 'E':
        if stack[-1]['rest']Vierge g:
Blanc h
            stack[-1][['rest'] -= 1
        else:
Vierge i

Le traitement est demandé lorsque le code d'instruction est "E", c'est-à-dire le point final de la répétition. Pour expliquer cette déclaration si grossièrement --Si la condition de l'instruction if est vraie (pas à la fin de l'itération), elle revient au début de l'itération. --Dans tous les autres cas (sinon), terminer l'itération est ce que cela signifie. Regardons de plus près. stack [-1] signifie le dernier élément de la pile de listes. Par exemple, si le contenu de la pile est [{'opno': 0, 'rest': 2}, {'opno': 1, 'rest': 1}], stack [-1] sera Le dernier élément est {'opno': 1, 'rest': 1} `. Si le reste du dernier élément de la pile (itération la plus interne) est supérieur à 1 (c'est-à-dire supérieur ou égal à 2), alors opno reçoit la première valeur de l'itération (dans ce cas, 'opno': 1) , Substituer la pile par programme [-1] ['opno']). Cette opération ramène la position d'exécution de la séquence d'instructions au début de l'itération. Cependant, cela seul entraînera une boucle infinie, donc stack [-1] [['rest'] - = 1``` réduira le nombre de répétitions de 1. Si repos vaut 1, aucune autre répétition n'est requise, la répétition est donc terminée. Pour terminer l'itération, supprimez le dernier élément de la pile de listes. Utilisez pop () pour supprimer le dernier élément de la liste. En appliquant ces actions aux blancs, le blanc g est le choix o "> 1", le blanc h est le choix A "opno = stack [-1] ['opno'], et le blanc i est le choix c. "Stack.pop ()" de est entré respectivement.

Explication supplémentaire

Explication supplémentaire de l'inclusion

L'inclusion est une grammaire qui extrait un élément qui satisfait à la condition C pour un certain tableau B et renvoie le résultat du traitement A pour cet élément sous forme de liste.

[Traitement pour x A pour x dans le tableau B si x condition C]

(Notez que le tout est entouré de []). Cela signifie que le résultat du processus A est renvoyé sous forme de liste pour les éléments du tableau B qui satisfont à la condition C. Par exemple, pour un nombre pair de 0 à 9, la valeur au carré de ce nombre pair est renvoyée sous forme de liste. image.png Bien sûr, vous pouvez faire de même en initialisant le tableau, en écrivant une instruction if dans la boucle for et en l'ajoutant au tableau. Cependant, cette méthode nécessite environ 4 lignes. C'est assez puissant de pouvoir écrire ceci en une seule ligne. À propos, le blanc c était une utilisation simplifiée sans la partie if de l'inclusion.

Méthode de fréquence et méthode de degré d'arc

En mathématiques jusqu'au collège, l'angle est exprimé dans la méthode des degrés (90 °, etc.), mais en mathématiques dès le lycée, c'est la méthode des degrés arc (π / 2, etc.). En effet, il est particulièrement compatible avec l'intégration différentielle. L'unité est ° pour la méthode de fréquence et [rad](lu en radian) pour la méthode de degré d'arc. La conversion entre la méthode de fréquence et la méthode de degré d'arc est effectuée par l'équation suivante.  1 [rad] = 180°/π  1° = π/180 [rad] C'est compliqué, il vous suffit donc de vous souvenir des valeurs typiques. Par exemple, 45 ° = π / 4 [rad], 90 ° = π / 2 [rad], 180 ° = π [rad], 360 ° = 2π [rad], etc.

Recommended Posts

Examen d'ingénieur en information de base (FE) Examen de l'après-midi Exemple de question Python Explication
[Examen d'ingénieur d'information de base] J'ai écrit l'algorithme de la méthode de division mutuelle euclidienne en Python.
[Examen d'ingénieur d'information de base] J'ai écrit un algorithme de recherche linéaire en Python.
Résumé de l'algorithme de tri de base python (examen d'ingénieur d'information de base)
L'histoire du téléchargement de la dernière question PDF de l'examen d'ingénieur d'information de base avec Python à la fois
[Examen d'ingénieur d'information de base] J'ai écrit un algorithme pour la valeur maximale d'un tableau en Python.
Expérience de passer l'examen d'ingénieur en technologie de l'information appliquée