Voir le sujet précédentAller en basVoir le sujet suivant
ycombe
Monarque

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par ycombe Mer 1 Juil 2020 - 21:34
Rwan a écrit:
Par contre non algobox c'était pas bien. Very Happy Un langage qui n'a pas de fonction, c'est mort.
Encore une fois, ça dépend des objectifs.
Tu serais donc pour l'abandon de Scratch au collège?
Comment te dire…

Il y a 40 ans, c'était la grande mode de logo. Il faut relire les textes enthousiastes de l'époque sur la tortue. Et puis, on s'est rendu compte que c'était bien joli, mais que ça prenait du temps pour un résultat… nul.
Aucune illusion à avoir: Scratch, c'est pareil. Poubelle. Ne pas perdre de temps avec cette merde. Allez en discuter avec des élèves de seconde, c'est édifiant.


Rwan
Rwan
Niveau 6

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Rwan Mer 1 Juil 2020 - 21:39
Aucune illusion à avoir: Scratch, c'est pareil. Poubelle. Ne pas perdre de temps avec cette merde. Allez en discuter avec des élèves de seconde, c'est édifiant.
Bon, je doit donc être un mauvais prof si je trouve mes séance Scratch intéressantes. Très déçu de "perdre mon temps avec cette merde".

Et très déçu aussi de la très faible qualités argumentative de certains commentaires. Je pensais naïvement qu'un échange constructif était possible, mais visiblement c'est plutôt la course à l'impression personnelle et aux remarques dénigrantes peu coûteuses, dommage.

Visiblement je perd mon temps à écrire ici, bonne continuation à tous.

_________________
Q est dénombrable, et dense dans R
Pourtant R est n'est pas dénombrable.

C'est beau.
avatar
Call_BB5A
Niveau 5

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Call_BB5A Mer 1 Juil 2020 - 22:24
Rwan a écrit:
et je trouve qu'il a beaucoup trop de pièges pour les débutants
Bah je veux bien des exemples. Je maîtrise très bien Python, et je l'ai enseigné sans problème. Mes élèves n'ont (presque) jamais été bloqués par le langage pour résoudre un exercice.

Bonjour, voici un premier piège sur B += A et la différence avec B = B + A :
Code:

>>> A = 1
>>> B = A
>>> B += A
>>> print(A, "==" if A == B else "!=", B)
1 != 2

>>> A = [1]
>>> B = A
>>> B += A
>>> print(A, "==" if A == B else "!=", B)
[1, 1] == [1, 1]

>>> A = [1]
>>> B = A
>>> B = B + A
>>> print(A, "==" if A == B else "!=", B)
[1] != [1, 1]

Un second exemple d'effet de bord avec f(0) qui ne renvoie pas toujours la même valeur (r se comporte comme une variable locale static à la C) :
Code:

>>> def f(x, r=[]):
>>>    r.append(x)
>>>    return x + len(r)
>>>
>>> print(f(0), f(0), f(0))
1 2 3
Simeon
Simeon
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Simeon Mer 1 Juil 2020 - 23:07
Rwan a écrit:
Par contre non algobox c'était pas bien. Very Happy Un langage qui n'a pas de fonction, c'est mort.
Encore une fois, ça dépend des objectifs.
Tu serais donc pour l'abandon de Scratch au collège?


Il y a qd même la mais création de bloc qui permet des choses. Mais oui, je suis pour le passage à un autre langage arrivé en lycée, car oui Scratch fini par être une impasse et pas que pour ça.
Après je connais mal le collège et la programmation par bloc, mais a priori, abandonner Scratch pour Snap pourrait être profitable.

voici un premier piège sur B += A et la différence avec B = B + A

Je ne vois pas de raison de présenter cette opération sur les listes au lycée. (et même sur les nombres, je trouve ça inutile)

def f(x, r=[])

Pareil, ça n'est pas à présenter au lycée, c'est éventuellement faisable en NSI où on parle un peu de portée.

Tout les langages ont ce genre de petits trucs, s'il faut aller voir du côté de chose qui ne sont pas à présenter au lycée pour les trouver, ça veut dire que Python est un bon langage pour le lycée.

Java n'en manque pas non plus, et si on va du côté de C, Javascript ou PHP ont trouve des choses bien pire avec les éléments les plus basiques.
avatar
Call_BB5A
Niveau 5

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Call_BB5A Jeu 2 Juil 2020 - 0:12
Simeon a écrit:Par contre non algobox c'était pas bien. Very Happy Un langage qui n'a pas de fonction, c'est mort.
Algobox permet de créer des fonctions locales :
[maths-SNT] Avantages du langage Python - Page 2 Shot1


voici un premier piège sur B += A et la différence avec B = B + A
Je ne vois pas de raison de présenter cette opération sur les listes au lycée. (et même sur les nombres, je trouve ça inutile)
Les listes sont au programme de mathématiques de première et de terminale. Parmi les capacités attendues, figure celle de la génération de liste en extension. Et comme il n'est nulle part précisé que cela doit se faire par application de la méthode append() comme L.append(x), on peut très bien utiliser l'opération L += [x] . C'est en plein dans le programme officiel, même si beaucoup passent à côté.

Quant au cas des nombres, on en vient alors très facilement à l'opération n += 1 pour incrémenter n.

def f(x, r=[])
Pareil, ça n'est pas à présenter au lycée, c'est éventuellement faisable en NSI où on parle un peu de portée.
Alors que les programmes de première et terminale demandent de mettre l'accent sur la programmation modulaire en créant des fonctions, c'est l'occasion de rappeler une nouvelle fois la distinction entre une fonction mathématique et une fonction informatique.
Simeon
Simeon
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Simeon Jeu 2 Juil 2020 - 7:05
Call_BB5A a écrit:
Algobox permet de créer des fonctions locales :

Tu as la date de leur ajout ? Ça ne doit pas pouvoir avoir bcp plus que 2,3 ans.

Call_BB5A a écrit:
Et comme il n'est nulle part précisé que cela doit se faire par application de la méthode append() comme L.append(x), on peut très bien utiliser l'opération L += [x] .

Le += s'est un extend, voir l'ajout d'un élément comme l'extension par une liste à un élément s'est se tordre le bras pour rien.
On peut toujours très bien interpréter le programme de façon bizarre et aller à rebours de ce vers quoi il pointe, mais pourquoi le faire dans le cas présent ?

Call_BB5A a écrit:
Alors que les programmes de première et terminale demandent de mettre l'accent sur la programmation modulaire en créant des fonctions, c'est l'occasion de rappeler une nouvelle fois la distinction entre une fonction mathématique et une fonction informatique.

Bah, si tu as le temps de faire le programme de 1ère en faisant ce genre de subtilités, tant mieux, mais si tu veux les faire, il faut assumer les pièges que ça ajoute.
avatar
Call_BB5A
Niveau 5

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Call_BB5A Jeu 2 Juil 2020 - 13:47
L'intégration des fonctions locales dans Algobox date de juillet 2017.

La notation L.append(x) est moins naturelle que l'opération L += [x] pour certains élèves à qui on demande d'ajouter le nombre x à la liste L. Entre la syntaxe . (point) sur un objet et la méthode append dont on oublie facilement le nom, ça devient compliqué pour un élève de 2nde qui ne pratique pas la programmation régulièrement et qui n'est pas initié à la programmation orientée objet. À côté de cela, l'élève qui entend "ajouter" pensera facilement à l'opération +.

Cadrer systématiquement les activités pour éviter les pièges (comme 0.1+0.2 != 0.3), n'est pas forcément très pédagogique.
Simeon
Simeon
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Simeon Jeu 2 Juil 2020 - 14:55
Call_BB5A a écrit:

La notation L.append(x) est moins naturelle que l'opération L += [x] pour certains élèves à qui on demande d'ajouter le nombre x à la liste L. Entre la syntaxe . (point) sur un objet et la méthode append dont on oublie facilement le nom, ça devient compliqué pour un élève de 2nde qui ne pratique pas la programmation régulièrement et qui n'est pas initié à la programmation orientée objet.

Je dois dire que ça ne correspond pas du tout à mon expérience avec les élèves, truc.append est en général retenu assez facilement.
Au passage les listes ne sont pas au programme de seconde.

Call_BB5A a écrit:
À côté de cela, l'élève qui entend "ajouter" pensera facilement à l'opération +.

Il se ferait donc avoir par un faux ami.
avatar
Flo44
Érudit

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Flo44 Jeu 2 Juil 2020 - 15:23
[quote="Rwan"]
et je trouve qu'il a beaucoup trop de pièges pour les débutants
Bah je veux bien des exemples. Je maîtrise très bien Python, et je l'ai enseigné sans problème. Mes élèves n'ont (presque) jamais été bloqués par le langage pour résoudre un exercice.

[quote]
Moi si, au début, et pourtant j'ai appris une douzaine de langages, et c'est le premier auquel je n'ai vraiment pas réussi à accrocher (sauf Algobox mais ça ne compte pas).

Pour les types, je pensais à ça :
Code:

>>> var=4
>>> print(var+"toto")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'

Franchement, pour un débutant ? Quand le langage est fortement typé, tu commences par expliquer les types de données aux élèves. Quand il ne l'est pas, il devrait pouvoir se débrouiller pour les conversions de type, sans générer d'erreur incompréhensible pour un débutant... D'ailleurs pour ceux qui l'enseignent, notamment en seconde, vous faites comment?

Et la gestion de l'indice des tableaux. Berk. (sans compter que ça n'a aucun sens, le nombre d'éléments ne correspond pas à celui de l'intervalle)

Et l'absence de caractère de fin d'instruction (comment on fait pour faire une instruction sur plusieurs lignes? c'est peut-être possible, mais bon)

Et, l'ultime horreur pour moi, le décalage qui remplace les accolades ou autres indicateurs de début ou fin de bloc. Non seulement, c'est illisible, mais si ton éditeur n'est pas spécialement conçu, si ton élève jongle entre les tabulations et les espaces, tu fais comment pour voir les erreurs et débugger son programme ?

Il est vrai que je ne suis pas allée beaucoup plus loin, mais à côté de Perl ou Ruby, pour comparer les langages conçus dans le même but, "y'a pas photo ! ". Je précise que je ne conseille pas Perl pour les débutants, hein ! abi
Simeon
Simeon
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Simeon Jeu 2 Juil 2020 - 16:08
Flo44 a écrit:
Franchement, pour un débutant ? Quand le langage est fortement typé, tu commences par expliquer les types de données aux élèves. Quand il ne l'est pas, il devrait pouvoir se débrouiller pour les conversions de type, sans générer d'erreur incompréhensible pour un débutant... D'ailleurs pour ceux qui l'enseignent, notamment en seconde, vous faites comment?

Python est fortement typé, personnellement j'explique les types dès le départ, en prenant justement l'exemple du fait qu'additionner un nombre et une chaîne de caractère n'a pas de sens. En demandant de temps en temps de préciser les types, les élèves retiennent plutôt bien. Et franchement les langages qui te cast les trucs pour faire passer 4 + "toto", c'est juste l'horreur.

Flo44 a écrit:
Et la gestion de l'indice des tableaux. Berk. (sans compter que ça n'a aucun sens, le nombre d'éléments ne correspond pas à celui de l'intervalle)

Tu veux dire slice et indice négatif ? Ce n'est pas du tout au programme. (et je ne comprends pas la remarque sur le nbr d'éléments des intervalles, si on parle du range, ça correspond)

Flo44 a écrit:
Et l'absence de caractère de fin d'instruction (comment on fait pour faire une instruction sur plusieurs lignes? c'est peut-être possible, mais bon)

\ est un caractère de continuation.

Flo44 a écrit:
Et, l'ultime horreur pour moi, le décalage qui remplace les accolades ou autres indicateurs de début ou fin de bloc. Non seulement, c'est illisible, mais si ton éditeur n'est pas spécialement conçu, si ton élève jongle entre les tabulations et les espaces, tu fais comment pour voir les erreurs et débugger son programme ?

Le message d'erreur est plutôt clair dans ce genre de cas, et à moins de programmer avec notepad, l'éditeur gère les espaces correctement.

Flo44 a écrit:
Il est vrai que je ne suis pas allée beaucoup plus loin, mais à côté de Perl ou Ruby, pour comparer les langages conçus dans le même but, "y'a pas photo ! ".

Je connais pas Perl car dès que j'ai eu l'occasion de voir 2 lignes de Perl, je me suis dit: WTF.
Mais tout ce que tu reproches à Python en dehors de l'indentation se retrouve dans Ruby. Ruby est fortement et dynamiquement typé, il n'accepte donc pas de 4 + "toto", il y a des indices négatifs et du slice avec .. très proche de celui de Python.
kaktus65
kaktus65
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par kaktus65 Jeu 2 Juil 2020 - 17:39
Simeon a écrit:
Flo44 a écrit:
Franchement, pour un débutant ? Quand le langage est fortement typé, tu commences par expliquer les types de données aux élèves. Quand il ne l'est pas, il devrait pouvoir se débrouiller pour les conversions de type, sans générer d'erreur incompréhensible pour un débutant... D'ailleurs pour ceux qui l'enseignent, notamment en seconde, vous faites comment?

Python est fortement typé, personnellement j'explique les types dès le départ, en prenant justement l'exemple du fait qu'additionner un nombre et une chaîne de caractère n'a pas de sens. En demandant de temps en temps de préciser les types, les élèves retiennent plutôt bien. Et franchement les langages qui te cast les trucs pour faire passer 4 + "toto", c'est juste l'horreur.


Même en langage C, tu auras un avertissement du compilateur. D'ailleurs, le langage C n'est pas très typé statiquement contrairement au C++ (d'ailleurs, c'est un excellent langage d'apprentissage). Python te permet de faire par exemple des additions de type "string" non voulues, certainement pas C++ (ni C) si tu programmes correctement, un tas d'erreurs non contrôlées passent en Python et on obtient parfois n'importe quoi sans en trouver la cause.
C'est l'éternel débat entre langage typé statiquement et dynamiquement, il existe d'ailleurs P++, un dérivé de PHP typé statiquement sur la demande de la communauté de programmeurs. Le débat est éternel Smile


Flo44 a écrit:
Et la gestion de l'indice des tableaux. Berk. (sans compter que ça n'a aucun sens, le nombre d'éléments ne correspond pas à celui de l'intervalle)

Tu veux dire slice et indice négatif ? Ce n'est pas du tout au programme. (et je ne comprends pas la remarque sur le nbr d'éléments des intervalles, si on parle du range, ça correspond)

Bah si c'est au programme, et d'ailleurs présent dans un sujet zéro de NSI. Et effectivement une horreur car un indice, c'est un entier naturel à la base. On en a déjà parlé dans un topic précédent mais ta réponse avait été très différente.
Que dire de l'instruction a,b = b,a où les élèves croient que l'on "permute" simplement les données ...

Flo44 a écrit:
Et l'absence de caractère de fin d'instruction (comment on fait pour faire une instruction sur plusieurs lignes? c'est peut-être possible, mais bon)

\ est un caractère de continuation.
Ce n'est pas un problème par contre (selon moi).

Flo44 a écrit:
Et, l'ultime horreur pour moi, le décalage qui remplace les accolades ou autres indicateurs de début ou fin de bloc. Non seulement, c'est illisible, mais si ton éditeur n'est pas spécialement conçu, si ton élève jongle entre les tabulations et les espaces, tu fais comment pour voir les erreurs et débugger son programme ?

Le message d'erreur est plutôt clair dans ce genre de cas, et à moins de programmer avec notepad, l'éditeur gère les espaces correctement.
Pas mieux que Simeon.

Flo44 a écrit:
Il est vrai que je ne suis pas allée beaucoup plus loin, mais à côté de Perl ou Ruby, pour comparer les langages conçus dans le même but, "y'a pas photo ! ".

Je connais pas Perl car dès que j'ai eu l'occasion de voir 2 lignes de Perl, je me suis dit: WTF.
Mais tout ce que tu reproches à Python en dehors de l'indentation se retrouve dans Ruby. Ruby est fortement et dynamiquement typé, il n'accepte donc pas de 4 + "toto", il y a des indices négatifs et du slice avec .. très proche de celui de Python.



J'ai commencé par le C puis le C++ depuis plus de 20 ans. Après, Python, c'est quand même un bon choix lorsque l'on explique qu'il existe d'autres langages VRAIMENT typés (le typage dynamique, non merci) avec leurs avantages et inconvénients. Je crois que c'est le principal : tout langage de programmation est valable, après, chacun ses convictions.
Dire que Python est la panacée, c'est par contre un mensonge éhonté.

avatar
Call_BB5A
Niveau 5

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Call_BB5A Jeu 2 Juil 2020 - 17:52
Simeon a écrit:Je dois dire que ça ne correspond pas du tout à mon expérience avec les élèves, truc.append est en général retenu assez facilement. Au passage les listes ne sont pas au programme de seconde.
Je voulais dire 1ère... Les élèves que j'ai, oublient très rapidement, eux.

Call_BB5A a écrit:À côté de cela, l'élève qui entend "ajouter" pensera facilement à l'opération +.
Il se ferait donc avoir par un faux ami.
Effectivement. C'est la différence de comportements entre listes et entiers en Python qui est trompeuse, alors que chacun se justifie individuellement.

Simeon a écrit:Python est fortement typé, personnellement j'explique les types dès le départ, en prenant justement l'exemple du fait qu'additionner un nombre et une chaîne de caractère n'a pas de sens.
Dans ce cas pourquoi la multiplication d'une chaîne et d'un entier devrait en avoir ? Et donnez une valeur booléenne à un réel, une chaîne, une liste ? On encore permettre des opérations logiques comme : "" or 5 ?

Je ne dis pas que Python c'est mal, mais il possède des défauts pour un débutant.
Simeon
Simeon
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Simeon Jeu 2 Juil 2020 - 18:55
Call_BB5A a écrit:
Dans ce cas pourquoi la multiplication d'une chaîne et d'un entier devrait en avoir ?

Parce qu'on ne peut pas additionner un scalaire et un vecteur, et que pourtant on peut multiplier un vecteur par un scalaire. Cela dit, il n'y a aucune raison de montrer la concaténation de listes et la multiplication qui va avec en maths au lycée.
Python a coeur relativement classique, très proche du C mais avec moins de piège, tant qu'on reste sur cette base, tout se passe bien.

Call_BB5A a écrit:
Et donnez une valeur booléenne à un réel, une chaîne, une liste ? On encore permettre des opérations logiques comme : "" or 5 ?

Je ne dis pas que Python c'est mal, mais il possède des défauts pour un débutant.
 
T'es quand même ultra exigeant sur ce que tu attends d'un langage, qu'est ce que tu proposes comme langage avec moins de défauts ? Parce que là, il doit à peine rester Ocaml, (Pascal) ou Haskell qui peuvent vaguement encore passer.


kaktus65 a écrit:J'ai commencé par le C puis le C++ depuis plus de 20 ans. Après, Python, c'est quand même un bon choix lorsque l'on explique qu'il existe d'autres langages VRAIMENT typés (le typage dynamique, non merci) avec leurs avantages et inconvénients. Je crois que c'est le principal : tout langage de programmation est valable, après, chacun ses convictions.
Dire que Python est la panacée, c'est par contre un mensonge éhonté.

Je ne dis pas que Python est la panacée, mais que c'est un langage qui convient parmi pas mal d'autres.
Je trouve aussi qu'il y a beaucoup d'attaques infondés sur Python comme langage d'enseignement en lycée.

Par exemple, le typage du C est moins fort/strict que celui de Python, mais il a l'avantage d'être explicite, ce qui est un gros avantage pour écrire des programmes longs et fait pour durer dans le temps.
Dans un contexte où un programme de 10 lignes est déjà considéré comme extrêmement long, où les programmes n'auront aucune durée dans le temps, et où on expérimente surtout dans un interpréteur, les avantages d'un typage explicite et d'un compilateur ne me paraissent pas évident. Dans un programme de 5 lignes quels sont les chances d'oublier que total est une variable faisant référence à un nombre ?
Il y aurait l'avantage d'apprendre "le typage", je viens du C, j'ai aussi appris à programmer en C, et j'avais aussi l'idée que le typage non explicite de Python serait un problème à ce niveau, mais j'ai constaté que ce n'est pas du tout le cas, l'idée de type s'enseigne avec assez peu de difficultés en Python (et j'imagine avec n'importe quels langages non pathologiques).


Dernière édition par Simeon le Jeu 2 Juil 2020 - 19:07, édité 2 fois (Raison : b)
kaktus65
kaktus65
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par kaktus65 Jeu 2 Juil 2020 - 20:37
Le typage dynamique, désolé, n'est pas un vrai typage : et après, on va leur dire qu'il faut impérativement donner la nature de chaque champ dans une SGBD !
C'est aussi en contradiction avec l'algorithmique que les élèves voient en Seconde où dans la phase d'initialisation (et à juste titre), il y a bien le type de données à indiquer et pof ! il disparaît avec Python. C'est pour moi LE plus gros souci du langage et ce n'est pas une aide pour les élèves. A l'inverse de toi, j'ai eu des questions à ce sujet et cela a perturbé certains élèves.
Même chose pour les arguments des fonctions, d'ailleurs, je pense qu'ils ont pris la mesure du problème puisque l'on peut indiquer le type des arguments et celui de la valeur de retour (même si ce n'est qu'indicatif).

Je pense que tu sous-estimes ce problème de "typage" qui je le rappelle, divise la communauté informatique depuis plus de 20 ans (une éternité Smile ). Logique qu'il y ait débat, logique qu'il n'y ait aucun consensus, le langage dit "idéal" n'existe pas et n'existera jamais malgré les milliers de disponibles.

Après, je suis tout à fait d'accord pour dire que Python est plutôt un bon choix, si l'on ne reste pas obtus !


Dernière édition par kaktus65 le Jeu 2 Juil 2020 - 20:50, édité 1 fois
Prezbo
Prezbo
Vénérable

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Prezbo Jeu 2 Juil 2020 - 20:44
Rwan a écrit:
Code:

u_n = 1
repeter 50 000 fois
    u_n = 5 * u_n² - 5 * u_n
fin répéter

Tu préfères faire cet algo à la main, ou plutôt prendre 5 minutes pour l'implémenter et 1 seconde pour l'executer? Razz Razz

Dans ce cas précis, ni l'un ni l'autre : on peut montrer par récurrence qu'à partir de la première exécution de la boucle, u_n=0.

Par ailleurs, utiliser u_n comme non de variable est plutôt maladroit et mène à une écriture horrible :

u_n = 5 * u_n² - 5 * u_n

Il me semble là qu'il y a confusion entre la définition par récurrence d'une suite (u_n) en maths, auquel cas il faudrait écrire u_{n+1}=5 * u_n² - 5 * u_n, et le calcul des termes successifs de cette suite par un algorithme, auquel cas le programme n'a en mémoire à un moment donné que le dernier terme calculé, qu'il vaut mieux désigner par un nom sans indice comme u puisque l'indice varie justement à chaque étape...
kaktus65
kaktus65
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par kaktus65 Jeu 2 Juil 2020 - 20:47
Prezbo a écrit:
Rwan a écrit:
Code:

u_n = 1
repeter 50 000 fois
    u_n = 5 * u_n² - 5 * u_n
fin répéter

Tu préfères faire cet algo à la main, ou plutôt prendre 5 minutes pour l'implémenter et 1 seconde pour l'executer? Razz Razz

Dans ce cas précis, ni l'un ni l'autre : on peut montrer par récurrence qu'à partir de la première exécution de la boucle, u_n=0.

Par ailleurs, utiliser u_n comme non de variable est plutôt maladroit et mène à une écriture horrible :

u_n = 5 * u_n² - 5 * u_n


Certes mais le "=" n'est pas l'égalité mathématique mais une affectation, ce qui n'a rien à voir.
Bon après, la suite présentée n'est en effet pas la plus intéressante  :sourit:


Il me semble là qu'il y a confusion entre la définition par récurrence d'une suite (u_n) en maths, auquel cas il faudrait écrire u_{n+1}=5 * u_n² - 5 * u_n, et le calcul des termes successifs de cette suite par un algorithme, auquel cas le programme n'a en mémoire à un moment donné que le dernier terme calculé, qu'il vaut mieux désigner par un nom sans indice comme u puisque l'indice varie justement à chaque étape...
avatar
Flo44
Érudit

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Flo44 Jeu 2 Juil 2020 - 20:51
Comme je vous l'ai dit, Python j'ai essayé, mais comme je n'en ai finalement pas eu besoin, j'ai laissé tomber. Donc j'ai parlé de tableaux alors qu'il semblerait que je pensais plutôt aux listes. Bref. Voici ce que je supporte très mal :

Code:

x = range(3, 6)
for n in x:
  print(n)
Pour afficher les nombres de 1 à 5
Quand on a vu ça à l'Espe, tous les anciens développeurs de la salle ont été choqués. C'est totalement illogique (en tout cas ça va à l'encontre de tous les autres langages de programmation). Quand on donne un intervalle d'entier, on donne généralement le plus petit élément, et le plus grand...

Déjà, je n'aime pas trop les langages qui commencent leurs indices à zéro (vous comptez à partir de zéro, vous? vous prenez le 0-ième élément d'une liste?)

Code:
>>> squares = []
>>> for x in range(10):
...    squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Si on dit que c'est range(10), pour moi ça va de 1 à 10...
Mon cerveau ne doit pas être fait pour ça.

Mais peut-être qu'en fait je me trompe, et que les débutants ne sont pas dérangés par cela. Ou alors peut-être que vous n'utilisez jamais le parcours de liste avec les indices de position?
kaktus65
kaktus65
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par kaktus65 Jeu 2 Juil 2020 - 20:55
Flo44 a écrit:Comme je vous l'ai dit, Python j'ai essayé, mais comme je n'en ai finalement pas eu besoin, j'ai laissé tomber. Donc j'ai parlé de tableaux alors qu'il semblerait que je pensais plutôt aux listes. Bref. Voici ce que je supporte très mal :

Code:

x = range(3, 6)
for n in x:
  print(n)
Pour afficher les nombres de 1 à 5
Quand on a vu ça à l'Espe, tous les anciens développeurs de la salle ont été choqués. C'est totalement illogique (en tout cas ça va à l'encontre de tous les autres langages de programmation). Quand on donne un intervalle d'entier, on donne généralement le plus petit élément, et le plus grand...

Déjà, je n'aime pas trop les langages qui commencent leurs indices à zéro (vous comptez à partir de zéro, vous? vous prenez le 0-ième élément d'une liste?)

Code:
>>> squares = []
>>> for x in range(10):
...     squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Si on dit que c'est range(10), pour moi ça va de 1 à 10...
Mon cerveau ne doit pas être fait pour ça.

Mais peut-être qu'en fait je me trompe, et que les débutants ne sont pas dérangés par cela. Ou alors peut-être que vous n'utilisez jamais le parcours de liste avec les indices de position?

Pas du tout gênant. Le "x" dans la boucle for est un compteur en somme et donc un entier naturel. On parle bien de U0 pour des suites (Un) par exemple pour le premier terme. On accède bien au premier terme d'une liste "tab" par tab[0].
En revanche, parler d'indice négatif comme le permet Python est plus problématique niveau compréhension (à mon avis).
Eliette
Eliette
Niveau 9

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Eliette Jeu 2 Juil 2020 - 20:59
Ton premier exemple donne de 3 à 5 Wink
Ça ne me choque pas du tout que le premier élément d’une liste soit le numéro 0. Aucun souci avec ça, ça doit dépendre des gens.
Hélips
Hélips
Prophète

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Hélips Jeu 2 Juil 2020 - 21:02
Flo44 a écrit:Comme je vous l'ai dit, Python j'ai essayé, mais comme je n'en ai finalement pas eu besoin, j'ai laissé tomber. Donc j'ai parlé de tableaux alors qu'il semblerait que je pensais plutôt aux listes. Bref. Voici ce que je supporte très mal :

Code:

x = range(3, 6)
for n in x:
  print(n)
Pour afficher les nombres de 1 à 5
Quand on a vu ça à l'Espe, tous les anciens développeurs de la salle ont été choqués. C'est totalement illogique (en tout cas ça va à l'encontre de tous les autres langages de programmation). Quand on donne un intervalle d'entier, on donne généralement le plus petit élément, et le plus grand...

de 3 à 5 plutôt ? En même temps, ça a un côté vectoriel très sympa : si tu enchaines un range(3,6) avec un range(6,9), tu n'as pas deux fois le 6.
Flo44 a écrit:
Déjà, je n'aime pas trop les langages qui commencent leurs indices à zéro (vous comptez à partir de zéro, vous? vous prenez le 0-ième élément d'une liste?)
ben... quand je fais des suites, je commence plus souvent à 0 qu'à 1, donc ça ne me gêne pas.

Pour le range, honnêtement, c'est plus une question d'habitude qu'autre chose pour moi. Je suis plus gênée par les y croissant vers le bas des canvas de Tkinter.

_________________
Un jour, je serai prof, comme ça je serai toujours en vacances.
Simeon
Simeon
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Simeon Jeu 2 Juil 2020 - 21:06
Je trouve les hollandais très logiques:

https://www.cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html

Les élèves ont du mal avec le range Python, je peux en témoigner. (même si je le trouve logique)
Une fois qu'ils ont vu la relation de Chasles dire qu'il est fait de sorte que:
range(a, b) + range(b, c) = range(a, c)
peut aider à comprendre sa logique. Comme le fait que la longueur de range(a, b) vaut b - a.

(C'est rare les langages qui n'indice pas à partir de 0 quand même)


C'est aussi en contradiction avec l'algorithmique que les élèves voient en Seconde où dans la phase d'initialisation (et à juste titre)

Ça n'existe plus la phase d'initialisation dans l'algorithmique de Seconde.


Dernière édition par Simeon le Jeu 2 Juil 2020 - 21:08, édité 1 fois
Prezbo
Prezbo
Vénérable

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Prezbo Jeu 2 Juil 2020 - 21:07
kaktus65 a écrit:
Prezbo a écrit:
Rwan a écrit:
Code:

u_n = 1
repeter 50 000 fois
    u_n = 5 * u_n² - 5 * u_n
fin répéter

Tu préfères faire cet algo à la main, ou plutôt prendre 5 minutes pour l'implémenter et 1 seconde pour l'executer? Razz Razz

Dans ce cas précis, ni l'un ni l'autre : on peut montrer par récurrence qu'à partir de la première exécution de la boucle, u_n=0.

Par ailleurs, utiliser u_n comme non de variable est plutôt maladroit et mène à une écriture horrible :

u_n = 5 * u_n² - 5 * u_n


Certes mais le "=" n'est pas l'égalité mathématique mais une affectation, ce qui n'a rien à voir.
Bon après, la suite présentée n'est en effet pas la plus intéressante  :sourit:


Il me semble là qu'il y a confusion entre la définition par récurrence d'une suite (u_n) en maths, auquel cas il faudrait écrire u_{n+1}=5 * u_n² - 5 * u_n, et le calcul des termes successifs de cette suite par un algorithme, auquel cas le programme n'a en mémoire à un moment donné que le dernier terme calculé, qu'il vaut mieux désigner par un nom sans indice comme u puisque l'indice varie justement à chaque étape...

Je crois que tu t'es embrouillé dans tes balises.

Je sais bien que le signe "=" est une affectation en Python, ce qui me gène est d'utiliser u_n comme étiquette de variable : la notation suggère que n est un indice, or ici u_n est une étiquette fixe, l'indice n'est pas incrémenté à chaque étape.
avatar
Call_BB5A
Niveau 5

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Call_BB5A Jeu 2 Juil 2020 - 23:57
Simeon a écrit:
Call_BB5A a écrit:
Dans ce cas pourquoi la multiplication d'une chaîne et d'un entier devrait en avoir ?
Parce qu'on ne peut pas additionner un scalaire et un vecteur, et que pourtant on peut multiplier un vecteur par un scalaire.
Il n'y a pas de rapport avec les espaces vectoriels, on ne peut pas multiplier une chaîne par un flottant, ou bien par un entier négatif pour obtenir une forme d'opposé.

Cet exemple de multiplication d'un entier et d'une chaîne, est assez particulier. C'est une méthode spéciale des chaînes de caractères (type str), mais pas du point de vue des entiers (type int) où cette opération échoue. L'interpréteur Python, tente d'effectuer un __mul__ côté entier, il échoue à le faire mais il persiste en se rabattant sur le __rmul__ côté chaînes. On assiste donc à la transformation d'une multiplication impossible entre un entier et une chaîne, en la multiplication d'une chaîne par un entier.

T'es quand même ultra exigeant sur ce que tu attends d'un langage, qu'est ce que tu proposes comme langage avec moins de défauts ? Parce que là, il doit à peine rester Ocaml, (Pascal) ou Haskell qui peuvent vaguement encore passer.
Le choix d'un langage fonctionnel eu été intéressant pour les mathématiques, mais c'était sans compter la volonté de promouvoir la programmation dans d'autres matières comme la physique et même les SVT.

Donc de ce point de vue et malgré ses défauts, Python peut tout de même convenir.
avatar
Flo44
Érudit

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par Flo44 Ven 3 Juil 2020 - 5:43
Hélips et Siméon : merci pour vos réponses sur le range. fleurs
nc33
nc33
Niveau 10

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par nc33 Ven 3 Juil 2020 - 7:58
Je zappe les boucles for/range et me contente de while qui me semble plus générale. J'hésite à arrêter input aussi : le code devient pénible à tester et en plus il faut se préoccuper du type.
Autres trucs souvent piégeux : les listes modifiées en place (ils ont vite fait d'affecter), ainsi que les problèmes d'arrondis même s'ils ne sont pas propres à Python (si je veux vérifier qu'un triangle est rectangle, aie).

Sinon j'hésite à arrêter spyder parce que c'est très long à installer et à ouvrir à chaque fois sur un pc qui rame, mais je ne sais pas encore vers quoi me tourner.
ycombe
ycombe
Monarque

[maths-SNT] Avantages du langage Python - Page 2 Empty Re: [maths-SNT] Avantages du langage Python

par ycombe Ven 3 Juil 2020 - 10:03
Flo44 a écrit:Comme je vous l'ai dit, Python j'ai essayé, mais comme je n'en ai finalement pas eu besoin, j'ai laissé tomber. Donc j'ai parlé de tableaux alors qu'il semblerait que je pensais plutôt aux listes. Bref. Voici ce que je supporte très mal :

Code:

x = range(3, 6)
for n in x:
  print(n)
Pour afficher les nombres de 1 à 5
Quand on a vu ça à l'Espe, tous les anciens développeurs de la salle ont été choqués. C'est totalement illogique (en tout cas ça va à l'encontre de tous les autres langages de programmation). Quand on donne un intervalle d'entier, on donne généralement le plus petit élément, et le plus grand...

Déjà, je n'aime pas trop les langages qui commencent leurs indices à zéro (vous comptez à partir de zéro, vous? vous prenez le 0-ième élément d'une liste?)

Code:
>>> squares = []
>>> for x in range(10):
...     squares.append(x**2)
...
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Si on dit que c'est range(10), pour moi ça va de 1 à 10...
Mon cerveau ne doit pas être fait pour ça.

Mais peut-être qu'en fait je me trompe, et que les débutants ne sont pas dérangés par cela. Ou alors peut-être que vous n'utilisez jamais le parcours de liste avec les indices de position?
Je ne pense pas que de vrais développeurs puissent être choqués par le range(10) qui part de 0: cela correspond à l'usage de beaucoup de langage de programmation et en particuliers de tous ceux basés sur le C dans lequel les indices des tableaux commencent à 0 (pour une raison évidente: en C le tableau n'est rien d'autre que l'adresse de la première case). Les langages qui ne font pas commencer les tableaux à 0 existent mais sont beaucoup moins répandus.

L'idée de générer une liste par un range() pour faire des boucles for m'a personnellement choqué au début. Dans la plupart des langages une seule variable est utilisé,  en python c'était du gaspillage de mémoire. C'est un problème réglé depuis python3 avec l'apparition des générateurs: le range() ne renvoie plus une liste.

Ton exemple sur les squares peut maintenant s'écrire en extension:
Code:

>>> squares = [ x**2 for x in range(10) ]
>>> squares
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
L'évolution de Python apporte des outils très intéressants. Je suis beaucoup plus convaincu par Python3  que je ne l'étais par Python2 (mais je maintiens que ce n'est pas un bon outil pour enseigner à des débutants).

L'exemple ci-dessus utilise une fonction génératrice, comme on peut le voir en le réécrivant ainsi:
Code:

>>> squares = ( x**2 for x in range(10) )
>>> squares.__next__()
0
>>> squares.__next__()
1
>>> squares.__next__()
4
>>> squares.__next__()
9
>>> squares.__next__()
16
>>> squares.__next__()
25
>>> squares.__next__()
36
>>> squares.__next__()
49
>>> squares.__next__()
64
>>> squares.__next__()
81
>>> squares.__next__()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration


_________________
Assurbanipal: "Passant, mange, bois, divertis-toi ; tout le reste n’est rien".

Franck Ramus : "Les sciences de l'éducation à la française se font fort de produire un discours savant sur l'éducation, mais ce serait visiblement trop leur demander que de mettre leur discours à l'épreuve des faits".
Voir le sujet précédentRevenir en hautVoir le sujet suivant
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum