Journal Livre d'intro à la programmation avec Python 3

Posté par  (site web personnel) . Licence CC By‑SA.
Étiquettes :
27
5
sept.
2017

Salut,

nous venons de sortir, avec Bob Cordeau, un livre sur l'apprentissage de la programmation basé sur Python 3, dans la collection Info Sup chez Dunod, avec une préface de G.Swinnen.

Il cible les personnes qui débutent en programmation en se concentrant dans sa première partie sur les grands concepts (types, affectation, contrôle de flux, fonctions… modules - avec une ouverture vers certaines bibliothèques scientifiques). La seconde partie fait le tour de quelques concepts ou techniques plus avancés (POO, expressions en compréhension, récursivité, introspection, programmation GUI…). Les annexes fournissent des explications sur les outils présentés (Pyzo, Jupyter Notebook), l'encodage, les regexp, ainsi que sur les messages d'erreur et le débogage et enfin un résumé en français des opérateurs et méthodes des principaux types et des exceptions. Sans oublier glossaire, lexique anglais/français et un index.

L'ouvrage fait 2⁸=256 pages, impression couleur. Il contient 25 exercices corrigés et une centaine d'exercices complémentaires sont disponibles en ligne (au format Jupyter Notebook). Il permet de démarrer un apprentissage de la programmation, avec des documentations en français, puis de découvrir succinctement des techniques plus avancées que l'on pourra creuser ensuite suivant ses centres d'intérêt.

Voir le sommaire complet dans l'extrait disponible en ligne sur le site de l'éditeur [1].

Mon « Mémento Python 3 » [2], est reproduit sur les 2è et 3è de couverture. Les notes du cours qui ont précédé cet ouvrage (largement révisées) sont toujours disponibles [3].

[1] https://www.dunod.com/sciences-techniques/python-3
[2] https://perso.limsi.fr/pointal/python:memento
[3] https://perso.limsi.fr/pointal/python:courspython3

A+
L.Pointal.

  • # pour débutant

    Posté par  . Évalué à 5.

    Hum… c'est moi, ou toutes les ressources pour python sont pour les débutants?

    Je veux dire, l'autre jour j'ai voulu m'y mettre un peu, je code en C++ avec une relative aisance, alors, oui, je sais ce que c'est qu'une boucle et une variable. Mais je n'ai trouvé que dalle, alors j'ai été obligé de commencer à me farcir le tutoriel (officiel) python, qui, je dois le dire, m'a vite soulé (entre les partis pris et les trucs que je sais déjà, l'expérience fut pénible et je n'ai pas été au-delà des 50 pages).

    Du coup, quelqu'un aurait ce type de ressources?
    Je sais, c'est un peu hors sujet… mea culpa.

    Bon, et histoire de faire dans le sujet:

    L'ouvrage fait 2⁸=256 pages,

    Ça fait beaucoup non? Déjà que je trouve ce que j'ai vu du tuto officiel massif (~150 pages)… le point, c'est que c'est écrit en français et les exercices corrigés?
    J'imagine qu'il y a, comme souvent, une grosse partie pour l'installation au début?

    • [^] # Re: pour débutant

      Posté par  (site web personnel) . Évalué à 7.

      Hum… c'est moi, ou toutes les ressources pour python sont pour les débutants?

      Pour les personnes qui savent déjà programmer, j'ai quelques ressources (pas toujours finalisées) en ligne:

      Plus vieux:

      Je travaille actuellement pour une présentation dans mon labo, là encore pour des gens qui savent déjà au moins un peu programmer (ie. on ne réexplique pas ce qu'est ne variable ou une fonction). Il devrait y avoir ensuite une partie plus orientée admin-sys et une autre plus orientée calcul scientifique.

      L'ouvrage fait 2⁸=256 pages,

      Ça fait beaucoup non?

      La partie d'introduction à la programmation fait environ la moitié, le reste porte sur des notions plus compliquées et/ou est de la documentation en français sur le langage.

      J'imagine qu'il y a, comme souvent, une grosse partie pour l'installation au début?

      Pour la formation on conseille l'utilisation de conda + Pyzo en local, ça limite les explications à donner pour l'installation et ça évite de casser son système ou d'avoir des problèmes de droits (+ça permet d'installer facilement Jupyter Notebook).

      Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

      • [^] # Re: pour débutant

        Posté par  . Évalué à 2.

        Pour les personnes qui savent déjà programmer, j'ai quelques ressources (pas toujours finalisées) en ligne:

        Merci, j'y jetterais un œil.

    • [^] # Re: pour débutant

      Posté par  (site web personnel) . Évalué à 4.

      Il y a ça : cela vient du cookbook perl il s'agit d'exemple plus ou moins concret

      http://pleac.sourceforge.net/pleac_python/

      Et je garde dans mon sac : https://boutique.ed-diamond.com/les-guides/1078-gnulinux-magazine-hs-86.html

      Pour l'installation tu peu utiliser le python par defaut de ta distrib mais surtout tu dois savoir gérer de multiples environnements avec virtualenvwrapper

      • [^] # Re: pour débutant

        Posté par  . Évalué à 2.

        http://pleac.sourceforge.net/pleac_python/

        Ca, ça peut être utile, merci.

        Et je garde dans mon sac

        Hum… je dois reconnaître qu'a chaque fois que je lis le contenu d'un linux mag qui cause programmation, je suis déçu du niveau (par contre ça m'arrange bien quand ça parle de gimp, blender ou autres domaines dans lesquels je ne connais rien ou presque, hein!), ça ne va pas loin du tout, ça passe un max de temps sur des trucs triviaux… celui-ci est peut-être différent, mais j'en doute.

        Pour l'installation tu peu utiliser le python par defaut de ta distrib

        Je ne m'en prive pas :)

        • [^] # Re: pour débutant

          Posté par  (site web personnel) . Évalué à 2.

          Le lien pleac est assez ancien
          par contre le HS linux mag est récent et pratique …

          mais honnêtement tu trouves tout sur le net … c'est parce que j'aime lire un livre en dur :)

    • [^] # Re: pour débutant

      Posté par  (site web personnel) . Évalué à 2.

      et les exercices corrigés?

      Oui.

      Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN

    • [^] # Re: pour débutant

      Posté par  . Évalué à 2. Dernière modification le 05 septembre 2017 à 20:47.

      C'est un peu comme tous les langages et frameworks, non ? C'est plus facile de trouver des tutos débutant que des réponses à d'obscures question techniques.
      Python a pas à ma connaissance assez de défauts ou complexités de design pour mériter un livre Python, the good parts comme ce qu'on pourrait trouver pour Javascript/Ecmascript, C++, C# ou le langage usine à gaz de votre choix. J'ai pas fait de trucs de fous avec, mais j'ai pas de souvenirs de pièges dans le langage, c'était plutôt les libs, le souci.

      • [^] # Re: pour débutant

        Posté par  . Évalué à 8.

        mais j'ai pas de souvenirs de pièges dans le langage

        Glad you asked : https://github.com/satwikkansal/wtfpython :)

        • [^] # Re: pour débutant

          Posté par  (Mastodon) . Évalué à 2.

          Glad you asked

          Ah oué, Python a un bon niveau de fourbitude !

          Ça me rappelle un bon bouquin qui a bien rempli mes nuits blanches de jeune codeur : C Traps and Pitfalls de Andrew Koenig. Et je suppose qu'il existe des ouvrages équivalents autour de la plupart des langages…

          • [^] # Re: pour débutant

            Posté par  . Évalué à 6.

            Python a un bon niveau de fourbitude !

            Pas forcément plus que d’autres langages…

            Certains exemples donnés, notamment le premier, comment dire… oui, les identifiants utilisent Unicode, si tu profites de ça, en utilisant un e ou un a cyrillique juste pour faire un code « wtfesque » c’est un peu se foutre de la gueule du monde… Ou alors j’ai loupé quelque chose.

            Certains exemples sont intéressants cela dit. C’est clairement à lire au moins une fois si on se lance dans l’apprentissage de Python. Perso j’ai découvert certains de ces comportements de manière empirique, j’ai pas mal galéré… Les variables de boucle qui se retrouve dans le scope global par exemple…

            Sur le fait que 5 et 5.0 produise le même hash, donc, si jamais quelqu’un a l’idée assez saugrenue d’utiliser des floats comme clés d’un dict, plop[5] et plop[5.0] représente le même objet. C’est bon à savoir mais je ne vois pas en quoi ce serait bizarre ou incompréhensible…

            Pour le coup des return multiples je trouve le comportement logique… bref…

            je suppose qu'il existe des ouvrages équivalents autour de la plupart des langages…

            Je suppose aussi. L’auteur du WTF Python écrit :

            The idea and design for this collection are inspired by Denys Dovhan's awesome project wtfjs.

            Je pense que plus un langage est de haut niveau et plus il a certains côtés… surprenants. Perl et Lisp doivent avoir moins de fourberies que Python, par exemple.

    • [^] # Re: pour débutant

      Posté par  . Évalué à 4.

      Du coup, quelqu'un aurait ce type de ressources?
      Je sais, c'est un peu hors sujet… mea culpa.

      Tu peux aller lire le code d'un gros projet python open source. Si tu y consacre quelques heures tu devrais faire le tour des expressions idiomatiques les plus courantes.

      A mon avis la démarche est plusfacile avec python qu'avec d'autres langages comme c++ ou haskell.

    • [^] # Re: pour débutant

      Posté par  (site web personnel) . Évalué à 4.

      J'ai écrit avec un collègue cet article qui regroupe quelques features sympas de Python : https://tech.io/playgrounds/500/advanced-python-features

    • [^] # Re: pour débutant

      Posté par  . Évalué à 7.

      Ce n'est pas un livre, mais j'ai beaucoup appris chez SamEtMax.
      Il y a beaucoup de choses, notamment orientées web, donc il faut faire le tri en fonction de ce qui t'interesse.
      Je pense qu'il vaut mieux partir des posts les plus vieux : decorateurs, generateurs, unpacking, listes en intention…
      PS : attention, leur slogan, c'est "du code, du cul" : les illustrations sont très NSFW.

    • [^] # Re: pour débutant

      Posté par  (site web personnel) . Évalué à 1.

      Déjà publié (et remis à jour quelques fois déjà) → The Hacker's Guide to Python

      À venir → The Hacker's Guide to Scaling Python

      Le tout par Julien Danjou.

      Debian Consultant @ DEBAMAX

  • # Polymorphisme

    Posté par  . Évalué à 2.

    Une question sur le polymorphisme en Python.

    J'ai une assez bonne idee de ce que c'est le polymorphisme en C++. Comme les conteneurs ne peuvent pas etre heterogenes et que le typage est statique, on utilise des pointeur de la classe de base et on appelle une fonction virtuelle. Si le pointeur pointe sur une classe derivee, c'est sa fonction virtuelle qui est appelee. Cela permet de faire des interfaces avec des base classes abstraite et permet l'extensibilite en declarant des fonctions dont l'implementation est encore inconnue. La surcharge en C++ (avec des fonctions non virtuelles) donne un resultat different du polymorphisme et ne permet pas le typage dynamique.

    En revanche, j'ai du mal a voir la difference entre polymorphisme et surcharge en Python. Comme le typage est dynamique et que les listes peuvent etre heterogenes, il n'y a pas vraiment de difference. L'exemple donne en https://python.developpez.com/cours/apprendre-python-3/?page=la-programmation-orientee-objet#L7-5-2 est peut-etre du polymorphisme, mais c'est equivalent a de la surcharge, n'est-ce-pas?

    Merci de m'eclairer.

    • [^] # Re: Polymorphisme

      Posté par  . Évalué à 3.

      Je dirais même que le [duck typing] est une forme qui généralise le polymorphisme.

      Après si je regarde wikipedia Surcharge (programmation_informatique)* ne concerne pas la redéfinition d'une méthode, mais le fait de choisir la méthode en fonction des arguments… ce que Python ne permet pas de base (mais qui peut être implémenté (par ex ici).

      Si tu voulais parler de la redéfinition d'une méthode, c'est bien un des mécanismes qui permet le polymorphisme (mais il faut aussi la capacité à déclarer qu'un objet est indifféremment d'une classe ou d'une classe enfant, ce qui en Python est implicite de par le typage dynamique).

      * attention la page parle aussi de polymorphisme, mais ce n'est pas celui qu'on entend dans le monde objet.

    • [^] # Re: Polymorphisme

      Posté par  . Évalué à 3.

      Soit j'ai pas la bonne définition de "surcharge", soit tu confonds deux notions de la POO…
      Pour moi, la surcharge consiste à avoir plusieurs méthodes au nom identique mais aux paramètres différents.
      Exemple :

      class Math
      {
          public static int max(int a, int b)
          {
              // Returns the greater of two int values.
          }
      
          public static double max(double a, double b)
          {
              // Returns the greater of two double values.
          }
      }

      Et selon le type de a et de b, c'est la première ou la deuxième méthode qui sera invoquée.

      Tandis que le polymorphisme consiste à avoir la même méthode, avec la même signature, redéfinie dans une classe-fille. Dans l'exemple python que tu indiques, c'est du polymorphisme : la classe-fille redéfinit le comportement d'une méthode de sa classe-mère.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.