Cet article est l'article du 8ème jour du DSL Advent Calendar 2019.
Cet article peut être plus un rapport pour les éducateurs en programmation. De plus, je n'essaie pas de critiquer une personne ou un groupe en particulier, il serait donc utile que vous compreniez cela.
À partir de cette année, une conférence intitulée "Introduction à la programmation" a débuté pour les étudiants de première année de premier cycle de tous les départements de l'Institut de technologie de Muroran. Dans ce cours, vous apprendrez systématiquement la programmation et le traitement des données en utilisant le langage de programmation "Python". L'exercice utilise le Jupyter Notebook fourni par National Institute of Informatics (NII). De plus, un .ipynb est distribué pour chaque exercice et un devoir pour chaque classe, et les questions sont traitées sous forme de questions et réponses.
Je participe à la conférence en tant qu'assistant pédagogique. Je voudrais présenter quelques points que les débutants en programmation qui ont remarqué dans ce processus trébuchent particulièrement lors de l'apprentissage de Python. J'espère que les personnes et les enseignants dans la même position qui ont vu cet article seront utiles.
Je présenterai le genre d'erreurs que j'ai commises à ce sujet et le type de mesures à prendre avec des exemples.
--Espace pleine largeur
La saisie pleine largeur est également commune aux débutants en programmation. S'il y a un espace pleine largeur, une erreur se produira et le programme ne fonctionnera pas. Notez également que Python peut être facilement utilisé comme str même s'il s'agit d'un caractère pleine largeur. Ceux qui doivent être particulièrement prudents sont ceux qui tapent en pleine largeur de base. Surtout dans les temps modernes, certaines personnes ne sont pas habituées à la saisie au clavier plutôt qu'à la programmation, comme on dit que c'est la génération des smartphones. Dans ce cas, il n'est pas possible de connaître l'emplacement du symbole.
Je pense que la meilleure solution est de s'habituer au clavier. En dehors de cela, il peut être préférable de transformer le problème lui-même en un problème qui ne nécessite pas d'entrée pleine largeur. (Par exemple, toutes les parties qui produisent des phrases japonaises sont remplacées par l'anglais)
Je vois souvent cette erreur.
for i in range(10):
for j in range(10):
print(f'i + j = {i + j}') #Erreur:Le retrait n'est pas aligné
A l'origine, j'ai dû abaisser le retrait avec print ()
, mais il n'a pas été abaissé correctement. S'il s'agit d'une instruction double for comme ci-dessus, il n'y a pas tellement d'erreur, mais il semble que le nombre d'erreurs augmentera à mesure que le nombre de structures imbriquées augmente, comme l'inclusion de branches conditionnelles telles que if.
Ceci est favorisé par le copier / coller du programme et la fonction d'auto-indentation du jupyter. Il semble que beaucoup de gens trébuchent lorsqu'ils copient et collent un programme, plutôt que de tirer le programme d'une autre personne, lorsqu'ils conçoivent un problème en utilisant une partie du problème précédent et en l'incorporant dans le problème suivant. Par exemple, si le problème est que seule la branche conditionnelle est créée dans la première question et qu'elle est incorporée dans la boucle for de la deuxième question, la structure d'imbrication peut être en désordre avec la fonction d'indentation automatique et elle peut ne pas fonctionner en raison d'une erreur. De plus, il existe certains modèles dans lesquels la structure devient de plus en plus difficile à comprendre lorsque le retrait est pris dans plusieurs espaces.
--Comprendre la structure de nidification
Je pense que ces trois points fonctionnent généralement. En Python, contrairement au langage C, les boucles sont contrôlées par des retraits au lieu de parenthèses, une attention particulière doit donc être accordée à la structure d'imbrication. Il devient important que la commande nous dise d'abord l'importance du retrait quel que soit le programme. De plus, l'utilisation de la touche Tab rend la fonction de complétion et le travail de retrait un peu plus facile, donc je pense qu'il est important d'apprendre à l'utiliser tôt pour résoudre ce problème. Et lire l'erreur est la meilleure solution, mais je pense qu'il est essentiel de comprendre la structure car certains codes ne savent pas ce qui ne va pas.
C'est une telle erreur.
#modèle 1
a = 1
b = "1"
print(a + b) #Erreur: int +str ne peut pas
print(a + int(b)) # 2
#Motif 2
a = (1, 2, 3)
b = [1, 2, 3]
a.append(4) #Erreur:Taple ne peut pas ajouter
b.append(4) # [1, 2, 3, 4]
Le modèle 1 est courant pour les débutants en programmation, mais comme il déclare des types dans des langages autres que Python, puis déclare des variables, je pense que vous devez être particulièrement prudent si vous apprenez un langage de programmation pour la première fois en Python. .. La même chose est vraie pour le modèle 2, où a est un taple et b est une liste, mais lorsque vous voulez ajouter des éléments à ces "tableaux", vous utilisez append, mais si vous êtes un débutant en programmation, vous pouvez utiliser des tapples même si le tableau est une liste. Il semble que cela ressemble presque au même (même dans un dictionnaire).
Je ne connais pas l'histoire difficile du type, donc je suis désolé, mais ça va car il est rapide de vérifier le type de variables etc. que je ne comprends fondamentalement pas en Python avec type (). De plus, si vous comprenez la différence entre les types, ce qui précède ne devrait pas se produire, il peut donc être préférable de passer plus de temps à enseigner. Et comme cela peut également être résolu en lisant l'erreur, l'affichage d'erreur est toujours excellent. Le reste concerne le module de saisie. Cela dépend de l'environnement Python, mais cette utilisation seule est susceptible de nécessiter un article, je vais donc omettre une explication détaillée, mais l'utilisation du module de saisie peut rendre le type plus conscient. ..
Il est particulièrement difficile de donner un exemple ici, je voudrais donc proposer une petite solution. En outre, cela peut être le plus important car la plupart des problèmes énumérés ci-dessus doivent être résolus simplement en étant capable de lire l'erreur.
――Résumé les phrases des erreurs attendues et leurs solutions
Je pense que ces deux points peuvent être facilement abordés. Tant que le contenu de l'erreur résout le même problème, on pense que la plupart des gens trébuchent souvent au même endroit. Par conséquent, je pense qu'il est bon de résumer à l'avance le contenu des erreurs attendues et leurs contre-mesures. De plus, en ce qui concerne la recherche Web, les débutants en programmation n'ont pas l'habitude des erreurs googlées. Avec Python, la plupart des erreurs peuvent être résolues simplement en copiant l'instruction d'erreur et en copiant les résultats de la recherche, il peut donc être plus facile de prendre une telle habitude.
À partir de là, je voudrais énumérer brièvement ce qui semble être une erreur causée par l'utilisation de matériel didactique et de jupyter plutôt que la cause de l'erreur. Je pense que c'est un problème qui peut être facilement résolu à la fois du côté de l'enseignement et du côté de l'enseignement en comprenant les spécifications de jupyter.
Dans l'environnement Jupyter Notebook actuellement fourni, lorsque la cellule est exécutée, le vert est affiché s'il n'y a pas d'erreur et le rouge est affiché s'il y a une erreur. Fondamentalement, il n'y a pas de problème si tout le vert est affiché, mais au contraire, cela peut gêner la progression. Par exemple, dans une cellule qui ne définit qu'une fonction, même si le comportement du contenu est un peu étrange, aucune erreur n'est affichée, donc la cellule peut être exécutée sans aucun problème. Par conséquent, il existe un problème que vous ne savez pas où chercher lorsqu'une erreur se produit après avoir effectué un traitement à l'aide de cette fonction dans la cellule inférieure.
Ce problème est lié à ipynb distribué par mon université dans la conférence, et il est étroitement lié au problème ci-dessus, mais le problème est divisé en plusieurs cellules et le comportement lors de l'exécution est étrange. .. Veuillez vous référer à l'image ci-dessous pour un exemple.
Si chaque problème dépend du résultat de l'exécution de la cellule ci-dessus comme ci-dessus, le comportement peut être suspect. Dans l'exemple ci-dessus, q3 est demandé en utilisant la liste et la fonction créées par q1 et q2, mais en réalité, cela peut être un processus ou un problème plus compliqué. Le problème, c'est que l'ordre d'exécution de la cellule est supposé être uniquement de haut en bas. Par conséquent, si vous l'exécutez à nouveau, le résultat peut être différent de la sortie existante. De plus, lorsque le notebook cesse de répondre en raison d'une erreur de serveur, etc., il peut être nécessaire de redémarrer le noyau, mais de nombreuses personnes ne l'exécutent qu'au milieu de la cellule. (C'est parce que je ne comprends pas que toutes les variables etc. sont réinitialisées en redémarrant)
Étant donné que les spécifications de ce jupyter sont maladroites, je pense qu'il est prudent de combiner un problème dans une seule cellule pour le résoudre.
J'ai brièvement évoqué ce que je pensais lorsque je faisais de l'AT pour l'introduction à la programmation Python, mais j'ai eu l'impression que je trébuchais souvent parce que les professeurs n'y accordaient pas assez d'importance. Je suis fatigué d'écrire trop longtemps, donc je vais mettre un pinceau ici, mais en réalité, je trébuche sur un point plus trivial, donc c'est toujours difficile d'enseigner la programmation. se sentait. J'espère que cet article aide quelqu'un.
Recommended Posts