Pourquoi uniquement Python au lycée?

Bonjour,
Sans que le caractère obligatoire soit clairement affirmé, les décideurs ont fait le choix implicite de Python au lycée.
Tous les rédacteurs de manuels et les fabricants de calculatrices suivent, sans proposer d'alternative.
Pourquoi uniquement Python? n'y a-t-il pas d'autres langages aussi formateurs pour le lycée et utilisés plus tard?
C'est très dommage, notamment pour Xcas qui me semble une excellente alternative pédagogique sur tous les plans.(richesse des différents modules, possibilité de programmer en français...)
Pourquoi imposer sans concertation? pourquoi ne pas laisser un choix raisonné?
Il y a longtemps, j'ai enseigné l'option informatique en lycée avec Turbo-Pascal, c'était formidable pour les élèves.

Le combat est-il perdu?
J'aimerais avoir des avis autorisés de professionnels plus compétents que moi, simple professeur de mathématiques en lycée depuis bientôt 40 ans.
Je poste également sur le forum Xcas.
Cordialement à tous.

PG
«1

Réponses

  • Sans que le caractère obligatoire soit clairement affirmé, les décideurs ont fait le choix implicite de Python au lycée.

    C'est sur qu'ils auraient pu expliquer leur choix... mais quel prof explique à ses élèves le choix des chapitres du cours?
    Par habitude, certainement très peu d'entres eux.
    Tous les rédacteurs de manuels et les fabricants de calculatrices suivent, sans proposer d'alternative.
    Pourquoi uniquement Python? n'y a-t-il pas d'autres langages aussi formateurs pour le lycée et utilisés plus tard?

    Pourquoi Python?
    Déjà il n'y a que deux versions dont une (python 2) qui va disparaitre tôt ou tard.

    Comparé aux innombrables versions de JAVA, du C++ (0x,11, 14 et 17)... c'est très stable le python.

    D'autre part c'est un langage prévu pour les scientifiques dès le départ mais utilisable pour les interfaces graphiques, le bash, le réseau.
    Entre autre il est très utilisé en data mining et IA.

    Les autres langages : C et C++ sont trop compliqués, R est très spécialisé, JAVA est une horreur et C#, haskell sont peu utilisés, je ne parlerais pas des langages pour le web.

    C'est très dommage, notamment pour Xcas qui me semble une excellente alternative pédagogique sur tous les plans.(richesse des différents modules, possibilité de programmer en français...)

    On programme en anglais.
    Ce point n'est pas discutable. Et on met des commentaires dans son code dans la langue de Trump.
    Pourquoi imposer sans concertation? pourquoi ne pas laisser un choix raisonné?
    Il y a longtemps, j'ai enseigné l'option informatique en lycée avec Turbo-Pascal, c'était formidable pour les élèves.

    Le combat est-il perdu?

    Le pascal avait-t-il été un choix discuté?
    A la fac on me l'avait imposé, j'aurais préféré du C.
  • @ PG.

    Une seule raison, toujours la même depuis 1986 (plan IPT):

    Les marottes de l'inspection sont priées de dégringoler la voie hiérarchique descendante.
    Et gare à celui ou celle qui voudrait s'écarter pour éviter de se les prendre dans la gueule.

    Turbo-Pascal 3.0 était idéal pour travailler en classe.
    TP 4.0 beaucoup moins. Mais comme l'inspection était passée à la version 4, les bahuts ont été priés de s'équiper en fonction.

    etc.

    Bien entendu, entre temps, les élèves ont profité de ces améliorations didactiques pour faire des progrès foudroyants en maths. N'est-ce pas ?

    e.v.
    Personne n'a raison contre un enfant qui pleure.


  • Python a quand même beaucoup d'avantages pour l'enseignement au lycée, c'est un langage d'assez haut niveau (donc exit les complications niveau gestion de mémoire genre en C), il dispose de nombreuses bibliothèques pour faire des choses sympas en maths sans mettre en branle toute une machinerie et surtout c'est un langage extrêmement utilisé ailleurs que dans l'enseignement secondaire, que ce soit dans le supérieur, le milieu académique ou les entreprises. C'est aussi un langage qui est vivant, toujours mise à jour et sur lequel énormément de gens bossent.

    J'ajouterais également que c'est un langage de programmation générique, contrairement à Xcas qui est clairement orienté maths. Mon demi-frère qui est au lycée a ainsi pu se servir de ce qu'il a appris en Python pour commencer des projets perso.

    Je ne vois vraiment pas quel autre langage dispose de tous ces avantages.

    Le seul truc que je regrette c'est qu'il ne soit pas fortement typé, je trouve que c'est assez formateur pour les élèves d'avoir les idées très claires sur la nature de la variable qu'ils manipulent.

    En tout cas je ne vois vraiment pas l'intérêt d'apprendre le Pascal, qui est un langage mort et enterré depuis bien longtemps.
  • Le programme "Hello, world!" en Python ne demande pas de charger une bibliothèque standard comme en C.
  • @ Héhéhé,

    Il ne s'agit pas nécessairement d'apprendre un langage utilisé dans l'industrie.
    Il s'agit d'apprendre un langage qui permet de programmer proprement.

    Pascal était un langage pour apprendre les bonnes pratiques de programmation.
    Pas pour envoyer une fusée sur la Lune.

    e.v.
    Personne n'a raison contre un enfant qui pleure.


  • Pourquoi Python ? Parce que le nom est ludique : tous les élèves pensent qu'on va manipuler un serpent ! Et c'est important que tout soit ludique de nos jours, sinon les élèves ne veulent pas travailler.
    C'est la seule explication rationnelle qui soit valable....lol...
  • A ev : Python permet d'apprendre à programmer proprement. Quel langage préconises-tu à la place ?

    A djedje_bzh : relis mon message plus haut tu verras qu'il y a plein de bonnes raisons d'adopter Python.
  • Héhéhé a écrit:
    Le seul truc que je regrette c'est qu'il ne soit pas fortement typé, je trouve que c'est assez formateur pour les élèves d'avoir les idées très claires sur la nature de la variable qu'ils manipulent.

    Il est fortement typé mais à typage implicite et dynamique.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Moi j'aime bien Python, je trouve cela très bien ! C'est juste que tu ne connais pas encore mon adoration pour l'humour ;-)

    J'ai même réussi à faire écrire quelques lignes de code à ma nièce de 7 ans (alors que certains de mes élèves de seconde en sont incapables...)
  • Python est propre?
    On ne doit pas parler du même langage.

    On affecte n'importe comment en Python, il te donne un résultat même si tu écris presque n'importe quoi. Python commence l'indicage à zéro, c'est la marque d'un langage d'informaticien. La gestion des listes n'est également pas sympa alors que les listes c'est la base des programmes utiles.

    Scilab est propre et parfait.

    Ce sont donc sûrement des lobbys d'informaticiens qui ont fait prévaloir Python... comme si on formait de futurs programmeurs.
  • Peut-être plus que de matheux professionnels...
  • Ce sont donc sûrement des lobbys d'informaticiens qui ont fait prévaloir Python... comme si on formait de futurs programmeurs.

    La majorité des programmes de l'industrie sont en JAVA, C/C++, PHP et javascript (web) ou C# pour les inconditionnel de windows.

    Python peut être utilisé à leurs place mais il reste très minoritaire.
    Python et R sont vraiment beaucoup utilisés pour le data mining et l'IA.

    Si il y a un lobby ce n'est pas celui des développeurs informatiques.
  • Je ne pense même pas aux matheux professionnels quand je parle de Scilab/Matlab.

    De toute façon peu importe: qui pourrait proposer un langage plus adapté que Scilab/Matlab? Ca me semble évident que Python n'est pas une bonne réponse à cette question. Mais ce n'est pas important.

    @soleil_vert: bizarre! je suis un peu surpris, je pense que les programmeurs voient en Python un langage d'avenir non? il est rapide aussi, beaucoup plus que Scilab/Matlab. On se contrefout au lycée de tout cela, mais peut être que ces arguments assez vides ont charmé les décideurs.
  • taimanov a écrit:
    Python est propre? On ne doit pas parler du même langage.

    En quoi il est sale ?
    On affecte n'importe comment en Python,

    C’est-à-dire ?
    il te donne un résultat même si tu écris presque n'importe quoi.

    Comme n’importe quel langage. Garbage in, garbage out.
    Python commence l'indiçage à zéro, c'est la marque d'un langage d'informaticien.

    Heu ?
    La gestion des listes n'est également pas sympa alors que les listes c'est la base des programmes utiles.

    C’est-à-dire ?
    Scilab est propre et parfait.

    Il va falloir que tu expliques.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • OK, je comprends, je vais expliciter clairement (demain si je peux).
  • Pourquoi Python ?

    Comme souvent c'est le fait d'une poignée de personnes influantes. Pour Python au lycée, une personne bien placée m'a dit que cela venait d'un prof de prépa dont je n'ai pas retenu le nom.

    D'ailleurs, c'est marrant la plupart des algorithmes de bacs, contenaient des entrées/sorties pendant des années. Et du jour au lendemain c'est complétement tabou, il ne faut surtout plus faire ça, c'est catastrophique, il faut faire tous les programmes sous forme de fonctions. D'ailleurs, comme je n'ai aucune explicaion, je ne sais pas pourquoi c'est aussi horrible les entrées/sorties. Pour débuter avec mes secondes, ça passe très bien.

    A titre personnel, j'ai choisi Python pour mes élèves un peu au hasard en 2012, quand c'était le début de l'algo. Au final, j'aime plutôt bien, les élèves aussi. Après, je n'ai aucune compétences, ni recul pour dire si c'est mieux ou pas qu'un autre langage.
    Karl Tremblay 1976-2023, je t'appréciais tellement.
  • Reprocher à Python de ne pas être propre et d'affecter n'importe comment puis de recommander MATLAB/SCILAB qui sont aussi voire pire à ce niveau là, faut pas avoir peur...

    J'adore MATLAB, j'ai fait 90% de ma thèse dessus, mais je ne le recommanderais vraiment pas pour apprendre la programmation.
  • Cela s'apparente a de l'integrisme.
    J'ai deja eu l'occasion de soutenir le point de vue que d'autres langages sont tres bien pour enseigner l'algorithmique au lycee. Qu'on laisse donc chaque enseignant choisir (et si l'enseignant est tres a l'aise il peut meme laisser le choix a ses eleves!) et qu'on evalue sur un algorithme pas sur un programme. Je pense que les eleves gagneraient a voir une certaine diversite au cours de leur scolarite, d'ailleurs le langage mainstream dans 10 ou 20 ans sera probablement un autre langage (en sciences, ce sera peut-etre Julia) et de toutes facons, ce n'est pas le role du lycee de former des programmeurs professionels prets a l'emploi!
    Xcas est tres bien adapte pour faire de l'algoritmique dans le cadre du cours de maths, on fait la distinction entre affectation et egalite, on peut ecrire x^2, utiliser i pour sqrt(-1), travailler avec des indices commencant a 0 ou 1 au choix, utiliser des rationnels de maniere naturelle (1/2 par exemple), travailler avec des expressions, le tout avec une bibliotheque mathematique tres complete... Et on peut utiliser le mode de compatibilite Python de Xcas si on veut faire tourner les programmes des manuels!
  • Un rappel ?

    e.v.

    [ ça nous rajeunit pas ]
    Personne n'a raison contre un enfant qui pleure.


  • Bonjour ,

    ce n'est pas le langage qui compte mais ce qu'on en fait .

    Peut-être qu'il serait souhaitable que les élèves manipulent deux ou trois langages informatique différents mais est-ce possible ?

    Moi , j'ai commencé avec fortran , puis pascal , puis C , C++ , puis ADA , puis java . Et j'oublie logo .
    Maintenant je me trouve très bien avec python . Demain ...

    Cordialement
  • De mon point de vue python a de nombreux avantage :

    - langage script, il est simple à prendre en main
    - il a des utilisations extrêmement variées (calcul scientifique, learning, web...) et de très nombreuses bibliothèques. Ce qui permet aux élèves de l'utiliser pour tout plein de projets différents (site web perso, projet TPE, exercices....)
    - il est utile dans la vie, ce qui permet de dire aux élèves qu'ils apprennent une compétence utile pour leur CV plus tard
    - python te force à présenter ton code proprement

    Pour ce qui est de mettre des langages différents, en théorie c'est bien, mais ça rajoute à la charge d'apprentissage des élèves et masque encore plus la partie algorithmique (si on passe 20' à retrouver comment on fait une boucle for je suis pas sûr que ça apporte grand chose)
  • Je ne suis pas d'accord avec vous Sylviel, les environnements de developpement ont la plupart du temps un assistant pour saisir les structures de controle. Par exemple dans Xcas, on clique sur le bouton Boucle, Test ou Fonction et on a une boite de dialogue avec des champs a remplir, il n'est donc pas du tout necessaire de passer 20 minutes a retrouver la syntaxe.
    Pour les eleves, travailler une annee avec un langage et une autre annee avec un autre langage a l'occasion du changement d'enseignant aide certainement a faire la part des choses entre ce qui est specifique au langage (et ressort donc de la programmation, par exemple l'affectation avec = en Python ou := en Xcas, les indices qui commencent a 0 ou a 1) et ce qui est universel (l'algorithme, la notion de fonction et de variables, d'affectation, de tableau/liste, etc.).
    Quant aux domaines varies, en general ils ont un langage plus particulierement adapte, par exemple si on veut faire de la programmation web, Javascript me parait plus adapte que Python! En calcul scientifique, Julia parait avoir un tres bel avenir (en particulier en terme de rapidite).
  • Comme il n'est pas envisageable de pratiquer plusieurs langages , il faut bien en choisir un .
    Chacun ayant son idée sur celui qui est le meilleur , il faut en final trancher et le choix implicite de python ne me parait pas un mauvais choix au lycée .
    Encore une fois , ce n'est pas le langage qui compte mais ce qu'on en fait .
    Un élève ayant pratiqué python pendant sa scolarité pourra plus tard s'adapter aisément à d'autres environnements plus spécialisés si nécessaire .
  • fm_31: je ne vois pas pourquoi "il n'est pas envisageable de pratiquer plusieurs langages". Bien sur, une annee donnee, on ne va pas changer de langage, et je ne soutiens absolument pas qu'un enseignant doit maitriser plusieurs langages, c'est deja bien d'en maitriser un. Mais qu'est-ce qui empeche un eleve de changer de langage lorsqu'il change de prof? C'est d'ailleurs ce qui se passe entre le college et le lycee.
    Si vous pensez reellement que "ce n'est pas le langage qui compte mais ce qu'on en fait", pourquoi soutenir l'idee d'imposer a tous les enseignants de lycee d'utiliser Python? Pourquoi pas Xcas, Scilab, Javascript, ...?
    J'ai donne des arguments en faveur de la diversite. J'attends toujours des arguments convaincants de ceux qui veulent imposer Python.
    Aujourd'hui, les programmes n'imposent aucun langage. Chaque enseignant peut exercer sa liberte de choix, y compris bien sur Python qui est un bon choix de langage mais ce n'est pas le seul!
    Plus il y aura d'enseignants qui defendront cette liberte de choix (meme si eux-memes utilisent Python), plus le risque sera faible que les integristes Python imposent la dictature du langage unique.
  • parisse, je ne sais pas si tu fréquentes des élèves de seconde mais leur présenter déjà un langage est le bout du monde alors deux…
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Faudrait déjà que les profs traitent le programme... Demandez autour de vous. En étant optimiste, je dirais que 30 % des enseignants de Seconde ont fait utiliser Python à leurs élèves et 10 % suffisamment. On peut pinailler sur le langage le plus adapté mais si ça avait été Xcas ou Scilab le problème aurait été le même!
  • Evidemment qu'on va pas donner des cours de programmation alors qu'on n'arrive pas à finir le programme de seconde :-S. Les maths d'abord, l'info ensuite!
  • Je fais cours en AP (possible dans mon établissement), c’est le seul moyen.
  • Oui c'est une bonne idée, mais l'AP, on n'a pas tout à fait la main dessus. Pour une histoire de vitrine (il n'y a que ça qui compte pour la nouille en communication qui nous dirige) l'AP doit apparaître ''trans-disciplinaire'' (+ un volet relation entreprise).
  • " Pourquoi pas Xcas, Scilab, Javascript, ...? " Comme je l'ai déjà dit , il faut bien trancher pour un langage et python ne me semble pas un mauvais choix . Comme il n'est pas explicitement imposé , chaque enseignant reste libre de choisir un autre langage . Il n'y a d'ailleurs que l'embarras du choix . Mais quel que soit le langage , ce qui compte en final c'est ce qu'on fait avec . Donc pourquoi se polariser sur le choix retenu ? Ne serait-il pas plus positif de l'accompagner au mieux .
  • nicolas.patrois: je discute au sein de l'IREM de Grenoble avec des profs qui eux ont des secondes, cf. cette page avec 3 TP experimentes cette annee. Il ne s'agit pas de presenter plusieurs langages a des eleves de seconde au cours de la meme annee, mais de ne pas s'interdire de changer de langage d'une annee a l'autre.
    Pour qu'une seance de programmation se passe bien, le point essentiel c'est la maitrise par l'enseignant du langage et de l'environnement de developpement, pour qu'il puisse debloquer efficacement les erreurs de syntaxe puis de runtime. Beaucoup d'eleves ont deja du mal a recopier un programme tout fait sans erreurs, on leur demande souvent juste de modifier un programme existant. Le choix du langage est donc determinant pour l'enseignant, pas pour l'eleve.
    fm_31: on s'est peut-etre mal compris, ce que je conteste c'est la pression tres forte venant de la hierarchie pour imposer Python comme l'unique langage utilise au lycee, avec a terme le risque de demander des programmes Python dans les enonces de bac au lieu d'algorithmes.
  • J'écris ça mais cette année, j'ai testé Algobox puis Python. :-D
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Si l'objectif est d'apprendre l'algorithmique, il n'y a pas besoin de langage de programmation. C'est même potentiellement contre-productif au départ.

    Si l'objectif est d'apprendre à programmer, alors d'une part cela ne semble pas être au programme du lycée, et d'autre part je ne recommanderais pas Python pour tout un tas de raison déjà évoquées dans ce fil.

    Globalement ici il me semble qu'il s'agit surtout de permettre aux élèves de bidouiller pour reproduire "vite fait mal fait" un algorithme sur ordinateur, sans prendre aucun recul. Pour de la bidouille, Python est parfait. Et ce choix permet d'envoyer le message "nous sommes modernes et à l'écoute du monde qui nous entoure" (Python étant le langage à la mode du moment comme ont pu l'être le C, C++, Perl ou Java avant lui).

    Pour finir je pense que cette décision est validée au plus haut niveau, comme l'atteste par exemple un sujet d'oral 2 du 3e concours du capes 2018 où une fonction était définie par... un programme en Python. Bonne chance à ceux qui ne connaissent pas ce langage de programmation.

    Petite remarque @nicolas.patrois ;) : quand j'entends typage fort je pense plutôt à Ada qu'à Python. Le typage en Python est pour moi un cauchemar, et les élèves ont tôt fait, de par leurs erreurs, d'en trouver les limites. On se retrouve à devoir faire du typecasting dans tous les sens pour être sûr qu'un programme fasse bien ce que l'on veut... Je ne trouve pas cela particulièrement propre.
  • Python est un langage à typage fort car si tu tapes :
    2 is 2.0
    
    il répond :
    False
    
    Par ailleurs, chaque variable a un type bien défini. En revanche, le typage est dynamique et à la volée.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Trouver des défauts à python pour récuser son choix , c'est oublier que tout langage a ses avantages et ses défauts . De plus c'est assez subjectif . Et comme en final il faut faire un choix ....
    Plus tard , dans l'industrie , le langage pourra aussi être imposé (d'en haut par des nouilles en com comme dirait irrespectueusement Blueberry) . Qu'est-ce que ça change ?

    Mais la question était je crois "pourquoi uniquement python ?" . Comme il a été dit , python n'est pas au programme du lycée et les enseignants sont libres de choisir un autre langage ou même pas de langage . Par contre en choisir plusieurs ne parait pas facilement réalisable . Alors pourquoi pas python ?
  • Dès le début, Python a été pensé pour être facilement lisible par un être humain (certes anglophone mais humain quand même). Voir par exemple le zen de Python. Tout est fait pour être, dans les cas simples, le plus proche possible d'une espèce de pseudo-code ou d'explications en langage naturel.

    Quand je vois les posts de Parisse, sans accent ni ligne blanche, je me dis que la lisibilité n'est peut-être pas au cœur des préoccupations des concepteurs d'Xcas. Or je pense que pour un langage devant être proposé à des débutants complets, "la lisibilité compte".

    Par ailleurs, Python bénéficie d'aspects fonctionnels qui je crois manquent à Xcas. Notamment, les listes en compréhension et produits (enfin, plutôt sommes, mais bon) dérivés sont bien utiles, et rendent l'utilisation de Python profitable dans les sections "informatique pour tous" du supérieur : les expressions $\#\{n : n\in [\![0,20]\!],\ n \equiv 3\pmod{4}\}$ ou $\sum_{k=0}^{10}k^2$ sont immédiatement traduisibles en Python (j'ai passé vingt fois plus de temps à les écrire en LaTeX que je n'en aurais passé en Python !). Pas sûr que cela marche aussi bien en Xcas.

    Après, j'avoue ne pas m'être penché suffisamment longtemps sur le X-cas pour en voir tous les avantages...
  • Je partage l'avis de Skilveg concernant la lisibilité, perso j'utilise sage. C'est très reposant d'écrire
    A = [k for k in range(20) if (k-3)%4 == 0]
    
    Ou encore
    Delta = q*prod((1-q^n)^24 for n in range(1,50)) 
    
    C'est vraiment très proche de la syntaxe mathématique.

    Un truc un peu pourri je trouve :
    a = 115
    print " je suis %s"%a   <  ---   peut-être autrement ? je n'ai pas trouvé mais c'est pourri de chez pourri là 
    
    c'est pas lisible pour le coup .. je viens de regarder Julia, la syntaxe semble proche de python.Le truc pourri n'est plus trop pourri, ça ressemble à php (enfin il me semble) c'est-à-dire :
    legume = "une carotte"
    println("je suis  $legume ")
    
    le dollar c'est l'interpolation.

    Pour Xcas, je ne sais pas trop, j'ai utilisé pendant 1 mois et j'ai lâché l'affaire car pas adapté pour mon utilisation.

    Pour être sincère, je pense qu'il faudrait utiliser le logiciel MAGMA dans l'éducation !

    PS : Pour magma, Bah oui juste pour obtenir une licence magma :-D
  • @moduloP : $\Delta$ fait partie de mes objets fétiches, mais malheureusement Python ne permet pas de faire de produits aussi naturellement que l'on fait des sommes ! Sage si sans doute, mais Sage est moins un langage qu'un logiciel avec qui communiquer en Python.

    Pour ton affichage / formatage de chaînes, je crois que la syntaxe préconisée est de la forme
    print("je suis {0}".format(a)")
    
  • Pour le produit, tu peux utiliser ça :
    def prod(liste):
        return eval("*".join(map(str,liste)))
    
    Vu par ici, il me semble.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • ModuloP a écrit:
    Un truc un peu pourri je trouve :
    a = 115
    print " je suis %s"%a   <  ---   peut-être autrement ? je n'ai pas trouvé mais c'est pourri de chez pourri là
    

    Il suffit de faire :
    a=115
    print("Je suis "+str(a))
    
    (on convertit a en chaîne de caractères, qu'on ajoute à "Je suis")
  • Yes Guego mais de temps en temps c'est un peu chiant, mais c'est du détails et je suis un peu hors sujet !
    class exemple:
    	def __init__(self,marque,roue,Type,km):
    		self.marque = marque 
    		self.roue  	= roue 
    		self.type   = Type 
    		self.km     = km
    	def __repr__(self):
    		message = "Je suis une {self.marque} qui possede {self.roue} roues de type {self.type} et  j'ai deja parcouru {self.km} km".format(self = self)
    		return message
    class exemple2:
    	def __init__(self,marque,roue,Type,km):
    		self.marque = marque 
    		self.roue  	= roue 
    		self.type   = Type 
    		self.km     = km
    	def __repr__(self):
    		message = "Je suis une "+self.marque+" qui possede "+ str(self.roue)+" roues de type "+self.type+" et  j'ai deja parcouru "+self.km+" km "
    		return message
    
    class exemple3:
    	#
    	#   Ne roule pas, mais c'est le plus clair for me  !
    	#   En julia, ça doit fonctionnner comme ça si j'ai compris ... Hum, c'est un micro détails vraiment :D 
    	#   
    	def __init__(self,marque,roue,Type,km):
    		self.marque = marque 
    		self.roue  	= roue 
    		self.type   = Type 
    		self.km     = km
    	def __repr__(self):
    		message = " Je suis une $marque qui possede $roue roues de type $type et  j'ai deja parcouru $km km"
    		return message
    
    sage: toto  = exemple("Pigeot",3,"ultra-sportive", 100)
    sage: toto
    Je suis une Pigeot qui possede 3 roues de type ultra-sportive et  j'ai deja parcouru 100 km
    

    A l'écriture du code la troisième version est la plus simple à écrire, mais ça fonctionne pas. Je ne me souviens plus mais en php ils ont réglé ce truc soit à l'aide du dollar ou soit avec un jeu de double " ou de triple " ...

    Merci Skilveg, pour format.
  • message = "Je suis une %s qui possede %d roues de type %s et j'ai deja parcouru %d km "%(self.marque,self.roue,self.type,self.km)
    
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Une question au passage. Python ne fait que du calcul numérique non? Par exemple, est-ce que python peut développer (1+x+x^2)^4?

    Sinon, je trouve assez fatigante cette manière d'imposer de façon très autoritaire des choses aux enseignants. Il me semble que chacun devrait avoir la liberté pédagogique de faire comme il l'entend. Si l'un veut se limiter à python grand bien lui fasse, pour ma part je préfère montrer un éventail de possibilités aux élèves. En tout cas, un peu de confiance et de bienveillance envers les enseignants, ça ne ferait pas de mal. Je ne parle même pas de concertation, car nous n'en sommes pas encore là...

    Après il faudrait surtout s'occuper de former les enseignants en leur proposant une formation continue de qualité au lieu de stages sans queue ni tête. Tant mieux si des professionnels comme Parisse aident les enseignants dans ce sens.

    M.
  • Mauricio écrivait:
    > Python ne fait que du calcul numérique non? Par exemple, est-ce que Python peut développer (1+x+x^2)^4?

    A priori non mais Sage, qui reçoit la syntaxe de Python, fait du calcul formel et des dessins.
    sage: expand((1+x+x^2)^4)
    x^8 + 4*x^7 + 10*x^6 + 16*x^5 + 19*x^4 + 16*x^3 + 10*x^2 + 4*x + 1
    
  • Python peut le faire avec je ne sais plus quel module ou avec SAGE mais tu peux écrire une classe qui le fait.
    #!/usr/bin/python3
    
    class polynôme():
        def __init__(self,s):
            if type(s) is int:
                self.coefs=[s ]
            elif s=="x":
                self.coefs=[1,0]
            elif type(s) in (list,tuple):
                self.coefs=list(s)
                while self[0]==0:
                    self.coefs.pop(0)
                if not self.coefs:
                    self.coefs=[0]
            else:
                self=eval(s)
    
        def __add__(self,p):
            if type(p) is int:
                q=polynôme(p)
            else:
                q=p
            s=[0]*max(len(self),len(q))
            for i in range(len(self)):
                s[-1-i]=self[-1-i]
            for i in range(len(q)):
                s[-1-i]+=q[-1-i]
            return polynôme(s)
    
        def __radd__(self,p):
            return p+self
    
        def __neg__(self):
            return polynôme([-c for c in self.coefs])
    
        def __sub__(self,p):
            if type(p) is int:
                q=polynôme(p)
            else:
                q=p
            return self+(-q)
    
        def __rsub__(self,p):
            return -self+p
    
        def __mul__(self,p):
            if type(p) is int:
                q=polynôme(p)
            else:
                q=p
            s=[0]*(len(self)+len(q)-1)
            if not s:
                return [0]
            for i in range(len(self)):
                for j in range(len(q)):
                    s[-i-j-1]+=self[-1-i]*q[-1-j]
            return polynôme(s)
    
        def __rmul__(self,p):
            return self*p
    
        def __pow__(self,e):
            if e<0:
                raise ValueError
            p=polynôme(1)
            for _ in range(e):
                p*=self
            return p
    
        def __getitem__(self,i):
            return self.coefs[i ]
    
        def __setitem__(self,i,c):
            self.coefs[i ]=c
    
        def __len__(self):
            return len(self.coefs)
    
        def __str__(self):
            s=""
            for i,c in enumerate(self):
                if c:
                    if c==-1:
                        if i==len(self)-1:
                            s+="-1"
                        else:
                            s+="-"
                    elif c==1:
                        if i==len(self)-1:
                            s+="+1"
                        else:
                            s+="+"
                    else:
                        if c<0:
                            s+=str(c)
                        else:
                            s+="+%d"%c
                    if i<len(self)-1:
                        s+="x"
                        if i<len(self)-2:
                            s+="^%d"%(len(self)-i-1)
            if s.startswith("+"):
                s=s[1:]
            if s:
                return s
            return "0"
    
    x=polynôme("x")
    
    poly=input().replace("^","**").replace(")(",")*(")
    for c in "0123456789":
        poly=poly.replace(c+"x",c+"*x")
    
    print(eval(poly))
    
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Bonjour,

    Python peut faire du calcul symbolique avec la bibliothèque sympy.

    Cordialement,

    Rescassol
  • Je n'ai pas eu l'occasion de tester moi-même, mais SymPy est une bibliothèque Python assez connue pour le calcul symbolique. Donc oui, c'est possible, mais ne fait pas partie de la bibliothèque Python standard (d'où un intérêt de SageMath, qui assemble divers composants pour que tout soit prêt dès l'ouverture de la boîte pour le scientifique, l'étudiant, etc., si je comprends bien le but de ce projet). D'ailleurs, je lis sur le site de SageMath qu'il s'appuie sur SymPy et Maxima, entre autres (Maxima est aussi un CAS).

    Edit: grillé par Rescassol. :-)
  • skilveg: je n'ai pas l'impression que vous ayez teste Xcas recemment, voici deux exemples correspondant a ce que suggere moduloP:
    session Xcas
    Je vous invite sur ce lien a tester quelques exemples de session en ligne (cliquer sur le bouton Doc puis Exemples lycee ou Exemples), vous verrez qu'on peut choisir entre syntaxe Python et syntaxe Xcas et qu'un programme ecrit en syntaxe Xcas en francais est tres lisible (un peu verbeux pour qui a l'habitude de programmer). Cette version navigateur de Xcas permet d'ailleurs une utilisation sur beaucoup d'appareils (y compris smartphones et tablettes), et facilite les echanges (possibilite de poster un enonce sur le forum de Xcas).

    Concernant les accents, c'est lie a mon clavier, je travaille sur Mac pour pouvoir fournir des executables Mac de Xcas, or programmer sur un Mac avec clavier francais est trop penible, j'ai donc un clavier qwerty. Denigrer Xcas en prenant pretexte de la forme de mes messages me semble une argumentation quand meme vraiment faible, je pense que vous aurez beaucoup plus du mal a trouver des arguments de fonds qui disqualifieraient Xcas.

    J'ai fait une petite comparaison des deux langages ici
  • Rescassol: sympy est certainement plus connue que giacpy pour faire du calcul formel en Python, mais elle n'est vraiment pas efficace. Essayez par exemple integrate(x**2*sin(x)*exp(x),x) et comparez avec Xcas (giacpy c'est le noyau de Xcas interface avec python). C'est pourtant une integrale a la portee d'un taupin lambda. Ne parlons pas de calculs necessitant des polynomes efficaces...
    from giacpy import *
    x=giac('x')
    factor(integrate(x**2*sin(x)*exp(x),x))
    
    Disponible ici
  • Bonjour,
    from sympy import *
    
    x=symbols('x')
    y=factor(integrate(x**2*sin(x)*exp(x),x))
    
    print(y)
    

    donne:
    -(x - 1)*(-x*sin(x) + x*cos(x) - sin(x) - cos(x))*exp(x)/2
    

    Je ne vois pas où est le problème.

    Cordialement,

    Rescassol
Connectez-vous ou Inscrivez-vous pour répondre.