Partage
  • Partager sur Facebook
  • Partager sur Twitter

FAQ Python

Questions fréquemment posées sur Python

Anonyme
    30 juin 2010 à 13:34:42

    Cette <acronym title="Foire Aux Questions">F.A.Q.</acronym> a pour but de reprendre un certain nombre de questions fréquemment posées, notamment par les débutants. N'hésitez pas à soumettre vos propositions. Autant que possible, cette F.A.Q. fera référence aux tutoriels présents sur le SDZ (qu'elle ne cherche pas à remplacer). Lorsqu'elle sera plus longue, une organisation comparable à celle du forum C sera vraisemblablement adoptée.

    Il est connu que les débutants ne lisent que très rarement les post-its. Il est donc conseillé, lorsque vous répondez à une question qui revient fréquemment sur le forum, de les renvoyer vers cette FAQ en adaptant votre réponse et ses explications.

    I. Débuter en Python



    Logiciels requis pour Python



    Python est un langage interprété, les programmes écrits dans ce langage nécessitent donc un programme tiers. Si vous débutez, il est fortement conseillé d'utiliser la version officielle de Python dont l'installation est détaillée dans le tutoriel officiel.

    Aucun éditeur particulier n'est requis, néanmoins le logiciel IDLE est fourni avec la version officielle de Python.

    Quelle version de Python choisir ? Python 2 ou Python 3 ?



    Deux versions différentes et incompatibles de Python sont actuellement utilisées : une ancienne (Python 2, dont la dernière version stable est la version 2.6) et une nouvelle (Python 3, version stable 3.1). Les différences entre les deux ne sont pas très importantes, et un débutant averti devrait pouvoir passer de l'une à l'autre sans trop de problème. Cependant, il est important que vous téléchargiez la même version que le cours que vous êtes en train de suivre : le cours officiel du Site du Zéro utilise Python 3. À l'inverse, le cours vidéo des pythonneries utilise Python 2.

    Il est possible qu'un jour vous ayez besoin d'utiliser Python 2 alors que vous avez appris à vous servir de Python 3, ou inversement (par exemple pour développer avec le framework web Django). La documentation officielle de Python donne une liste des évolutions du langage, ainsi qu'un outil de conversion.

    Est-ce que Python est vraiment lent ?



    Cette question est fréquente chez les débutants, qui se demandent s'ils pourront utiliser Python pour de vrais programmes. La réponse est oui, les différentes implémentations de Python sont toutes plus lentes qu'un programme équivalent écrit en C, mais sans que la différence soit toujours significative.

    Python peut être utilisé pour écrire de véritables applications, comme le montrent Miro, PiTiVi ou Gwibber. Des jeux l'utilisent au moins partiellement, comme Civilization 4, Frets on Fire ou encore EVE Online (pour leur serveur). De plus, plusieurs solutions existent pour accélérer vos programmes : vous pouvez par exemple vous tourner vers Psyco si vous utilisez Python 2. Il existe également quelques langages intermédiaires entre le C et Python, comme par exemple Pyrex, qui permet d'écrire une sorte de C avec une syntaxe proche de celle de Python.

    Et si vraiment les performances sont un problème, vous pouvez réécrire une partie ou la totalité de votre application en C (voir écrire des extensions en C). Le temps passé sur la version Python n'aura cependant pas été perdu, votre première version pouvant être considérée comme un prototype.

    Où trouver des ressources complémentaires sur Python ?



    Merci de consulter le sujet répertoriant des liens sur Python.

    II. Problèmes courants



    Mon programme s'ouvre et se ferme aussitôt !



    Quand vous exécutez un programme Python sous Windows, une fenêtre DOS s'ouvre pour afficher les sorties de votre programme (fonction print ) ou les éventuelles erreurs rencontrées. Cependant, par défaut cette fenêtre se ferme une fois le programme terminé.

    Il est donc conseillé de passer par un programme tiers pour exécuter vos programmes pendant leur phase de développement. Si vous utilisez IDLE, un simple F5 dans la fenêtre d'édition de code suffit à lancer le programme, qui s'exécutera dans la fenêtre consacrée au shell Python. Si vous utilisez un autre éditeur et que celui-ci ne propose rien pour exécuter votre code, vous pouvez toujours ouvrir une fenêtre DOS manuellement puis faire glisser votre code source à l'intérieur.

    Si votre programme ne contient aucune erreur, vous pouvez, plus simplement, placer une ligne input() à la fin, ce qui permettra d'attendre que l'utilisateur appuie sur la touche Entrée avant de terminer le programme. Cependant, cette méthode ne permettra pas de lire les éventuels messages d'erreur de Python.

    Je n'arrive pas à utiliser le module XXX



    Si vous essayez d'utiliser un module, par exemple turtle, vous obtiendrez peut-être l'erreur suivante : ImportError: No module named turtle. Il y a plusieurs causes possibles à cette erreur, mais c'est vraisemblablement un problème d'installation. Lors de l'utilisation du mot clef import , Python cherche dans une liste de répertoires particuliers. Pour savoir quels sont ces répertoires, tapez import sys puis print(sys.path) .

    Autre problème possible : vous avez réussi à importer un module, mais impossible d'utiliser les fonctions qu'il contient. Vérifiez que vous n'avez pas donné le même nom à votre programme qu'au module importé (par exemple, si vous avez appelé votre programme turtle.py et que vous voulez utiliser le module turtle).

    Je n'arrive pas à afficher les caractères accentués !



    Avec Python 2, l'affichage de caractères accentués peut déboucher sur un message d'avertissement du style sys:1: DeprecationWarning: Non-ASCII character '\x8d' in file foo.py on line 1, but no encoding declared. Avec Python 3, une exception de type SyntaxError peut être levée.

    Dans tous les cas, quelques notions sur la façon dont Python gère les caractères non-ASCII ne peuvent pas nuire. Python supporte très bien les caractères non-ASCII en tout genre, et permet même dans sa version 3 d'utiliser des noms (variables ou autres) accentués. Cependant, il faut préciser l'encodage que vous utilisez au début de votre fichier, en deuxième ligne, à l'aide d'une ligne comme

    # -*- coding: utf-8 -*-
    


    Remplacez utf-8 par le nom de l'encodage que vous utilisez (par exemple latin-1). Les variables sys.stdin.encoding et sys.stdout.encoding vous renseigneront également sur l'encodage que votre environnement utilise.

    III. Questions de débutants



    Comment déclarer une variable en Python ?



    Si vous avez utilisé un langage comme C, C++ ou encore Java, vous êtes sans doute habitué à déclarer explicitement vos variables et leurs types. On ne fait rien de tel en Python : une variable n'est qu'un nom attaché à une valeur particulière en mémoire, et c'est le type de cette valeur qui compte. En particulier, vous n'écrirez pas de code ressemblant à variable = int . Bien que cette instruction ait un sens (variable devient un synonyme de la classe int), elle est parfaitement inutile en règle générale, et n'a en tout cas pas le sens que vous lui prêtez.

    Comment lire et écrire du texte avec Python 3 ?



    Dans Python 3, l'instruction print est devenue une fonction, n'oubliez donc pas les parenthèses. Celle-ci prend des paramètres nommés pour faire ce que print faisait avant : sep comme séparateur entre les différents arguments, end comme chaîne rajoutée à la fin (par défaut un retour à la ligne, donc remplacez-le par la chaîne vide pour copier le print , de Python 2) et file comme fichier de sortie (par défaut sys.stdout).

    De plus, pour lire du texte, utilisez désormais input au lieu de raw_input . L'ancienne fonction input a disparu, faites vos conversions à l'aide des différentes classes disponibles. N'hésitez pas à consulter la documentation officielle pour connaître les autres différences entre Python 2 et Python 3.

    Comment lire autre chose qu'une chaîne ?



    Dans Python 3, la seule fonction permettant de lire quelque chose rentré par l'utilisateur est input . Cependant, elle renvoie une chaîne de caractères. Comment faire, alors, pour lire autre chose ? Faites une conversion, à l'aide de classes comme int ou float . Une exception de type ValueError sera levée si la conversion est impossible. Notez qu'il est possible de préciser la base numérique utilisée avec la classe int . Vous trouverez plus d'explications dans le tutoriel officiel.
    • Partager sur Facebook
    • Partager sur Twitter
      30 juin 2010 à 18:13:23

      On pourrais rajouter un petit point sur les shebang et l'encodage des caractères :)
      Enfin ce n'est qu'une suggestion hein, libre à toi de le faire ;)
      • Partager sur Facebook
      • Partager sur Twitter
        30 juin 2010 à 19:31:37

        Un petit point sur la PEP 8 peut-être ? J'aurais personnellement rajouté une petite explication sur "est-ce que Python est lent", mais je ne sais pas si ça a vraiment sa place dans une FAQ.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          30 juin 2010 à 19:34:07

          Pour le point sur la PEP 8 je l'avais envisagé, je ne sais pas s'il a davantage sa place dans le topic de Zopieux ou ici. Ok pour ce qui est de la lenteur.
          • Partager sur Facebook
          • Partager sur Twitter
            30 juin 2010 à 20:44:05

            Le premier post-it de ce forum est inauguré.

            Prenez-en soin. :)
            • Partager sur Facebook
            • Partager sur Twitter
            J'ai déménagé sur Zeste de savoir — Ex-manager des modérateurs.
              30 juin 2010 à 21:20:05

              Je vous remercie grandement d'avoir créé un forum spécial pour Python =)
              (Je sais c'est HS )
              • Partager sur Facebook
              • Partager sur Twitter
                1 juillet 2010 à 18:40:52

                Sous python 3 je n'arrive pas à faire fonctionner la fonction: raw_input()


                Avec les versions Python 3.0 et/ou les versions suppérieur, la syntaxe exacte est: input()

                Le contenu de input() est de type str (qui signifie string, donc chaine en Français


                print("Quel age as-tu mon ami zéro ?")
                variableAge = input()
                print("Heu.... tu as bien dit ", variableAge, "?")
                


                Heu.... tu as bien dit 18 ?


                type(variableAge)
                


                <class 'str'>


                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  1 juillet 2010 à 18:49:57

                  Merci pour l'idée (j'ai reformulé un peu) !
                  • Partager sur Facebook
                  • Partager sur Twitter
                    1 juillet 2010 à 19:02:07

                    Citation : iPoulet

                    Merci pour l'idée (j'ai reformulé un peu) !


                    Aucun problèmes :)

                    Comment faire pour importer une partie d'un module ?


                    Pour importer une partie d'un module il suffit de rajouter le mot-clef: from
                    Exemple:


                    from math import ceil

                    Ce code permet uniquement d'importer la fonction ceil() du module math


                    Pourquoi importer une partie d'un module ?


                    (Je pense que c'est une question de mémoire. Si on importe tout le module, le fichier prendra plus mémoire. Je préfère qu'un expert confirme parceque là je n'en sais rien :p )



                    Comment renommer un module ?


                    Il suffit d'utiliser le mot-clef as signifiant "comme"


                    import math as mathematiques
                    mathematiques.sqrt(25)
                    



                    (Arranges ça à ta sauce, ou si tu juges que ces questions ne doivent pas apparaître, ne les mets pas ) :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                      1 juillet 2010 à 19:33:13

                      Salut, j'ai une remarque, ce ne serait pas mieux de faire comme la FAQ C ? Car là ton premier post va vite être énorme.

                      Python 2.x : Différence entre range et xrange


                      On peut tout d'abord faire le test sur ce qu'il se passe :

                      >>> range(5)
                      [0,1,2,3,4]
                      >>> xrange(5)
                      xrange(5)
                      

                      Alors qu'est ce que ça veut dire ?
                      En fait avec range() , on renvoie une liste d'entiers. Avec xrange() , on renvoie un objet xrange qui génère les entiers au fur et à mesure des besoins.
                      xrange() est donc plus léger en mémoire, mais ce n'est pas visible sur de faible quantité de donnée, on dit que c'est un générateur.

                      En Python 3.x :


                      Dans cette version de Python, la différence n'existe plus car il n'y a plus que range() , mais qui fonctionne comme xrange() .
                      • Partager sur Facebook
                      • Partager sur Twitter
                        1 juillet 2010 à 19:59:52

                        Quels sont les caractéristiques du langage Python ?


                        Caractéristiques du langage

                        Détaillons un peu les principales caractéristiques de Python, plus précisément, du langage et
                        de ses deux implantations actuelles:


                        • Python est portable, non seulement sur les différentes variantes d’Unix, mais aussi sur les
                        OS propriétaires : Mac OS, BeOS, NeXTStep, MS-DOS et les différentes variantes de Windows.
                        Un nouveau compilateur, baptisé JPython, est écrit en Java et génère du bytecode Java.

                        • Python est gratuit, mais on peut l’utiliser sans restriction dans des projets commerciaux.

                        • Python convient aussi bien à des scripts d’une dizaine de lignes qu’à des projets complexes
                        de plusieurs dizaines de milliers de lignes.

                        • La syntaxe de Python est très simple et, combinée à des types de données évolués
                        (listes, dictionnaires...), conduit à des programmes à la fois très compacts et très lisibles. À
                        fonctionnalités égales, un programme Python (abondamment commenté et présenté selon
                        les canons standards) est souvent de 3 à 5 fois plus court qu’un programme C ou C++
                        (ou même Java) équivalent, ce qui représente en général un temps de développement de 5
                        à 10 fois plus court et une facilité de maintenance largement accrue.

                        • Python gère ses ressources (mémoire, descripteurs de fichiers...) sans intervention du programmeur,
                        par un mécanisme de comptage de références (proche, mais différent, d’un
                        garbage collector).

                        • Il n’y a pas de pointeurs explicites en Python.

                        • Python est (optionnellement) multi-threadé.

                        • Python est orienté-objet. Il supporte l’héritage multiple et la surcharge des opérateurs.
                        Dans son modèle objets, et en reprenant la terminologie de C++, toutes les méthodes
                        sont virtuelles.

                        • Python intègre, comme Java ou les versions récentes de C++, un système d’exceptions, qui
                        permettent de simplifier considérablement la gestion des erreurs.

                        • Python est dynamique (l’interpréteur peut évaluer des chaînes de caractères représentant
                        des expressions ou des instructions Python), orthogonal (un petit nombre de
                        concepts suffit à engendrer des constructions très riches), réflectif (il supporte la métaIX
                        programmation, par exemple la capacité pour un objet de se rajouter ou de s’enlever des
                        attributs ou des méthodes, ou même de changer de classe en cours d’exécution) et introspectif
                        (un grand nombre d’outils de développement, comme le debugger ou le profiler, sont
                        implantés en Python lui-même).

                        • Comme Scheme ou SmallTalk, Python est dynamiquement typé. Tout objet manipulable par
                        le programmeur possède un type bien défini à l’exécution, qui n’a pas besoin d’être déclaré
                        à l’avance.

                        • Python possède actuellement deux implémentations. L’une, interprétée, dans laquelle les
                        programmes Python sont compilés en instructions portables, puis exécutés par une machine
                        virtuelle (comme pour Java, avec une différence importante : Java étant statiquement
                        typé, il est beaucoup plus facile d’accélérer l’exécution d’un programme Java que
                        d’un programme Python). L’autre génère directement du bytecode Java.

                        • Python est extensible : comme Tcl ou Guile, on peut facilement l’interfacer avec des bibliothèques
                        C existantes. On peut aussi s’en servir comme d’un langage d’extension pour
                        des systèmes logiciels complexes.

                        • La bibliothèque standard de Python, et les paquetages contribués, donnent accès à une
                        grande variété de services : chaînes de caractères et expressions régulières, services UNIX
                        standards (fichiers, pipes, signaux, sockets, threads...), protocoles Internet (Web, News,
                        FTP, CGI, HTML...), persistance et bases de données, interfaces graphiques.

                        • Python est un langage qui continue à évoluer, soutenu par une communauté d’utilisateurs
                        enthousiastes et responsables, dont la plupart sont des supporters du logiciel libre.
                        Parallèlement à l’interpréteur principal, écrit en C et maintenu par le créateur du langage,
                        un deuxième interpréteur, écrit en Java, est en cours de développement.

                        • Enfin, Python est un langage de choix pour traiter le XML



                        J'ai copier/collé ce que dit swinnen dans son tutoriel.

                        Copyright (C) 2000-2010 Gérard Swinnen
                        L'ouvrage qui suit est distribué suivant les termes de la Licence Creative Commons « Paternité-
                        Pas d'Utilisation Commerciale-Partage des Conditions Initiales à l'Identique - 2.0 France ».


                        Citation

                        Salut j'ai une remarque, pourquoi ne pas faire comme dans la FAQ du forum C ?



                        +1
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          1 juillet 2010 à 22:30:30

                          realmagma> Le reste de tes propositions fait à mon avis plutôt partie d'un tutoriel. On ne peut pas tout mettre en FAQ ;) .

                          Colb-Seton> On éditera le topic pour passer à la forme de la FAQ C quand on aura un document suffisamment stable (comme ça on pourra essayer de les mettre dans un ordre un peu plus pertinent que celui de la FAQ C :p ). Merci pour la proposition sur range/xrange, je vais essayer d'en tenir compte dans une note plus globale.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            2 juillet 2010 à 0:14:25

                            La différence entre tabs et espaces ? On n'en voit pas souvent comme "ossekour g eu pronblème" mais ça peut embêter beaucoup.
                            • Partager sur Facebook
                            • Partager sur Twitter
                              2 juillet 2010 à 19:06:00

                              Citation : realmagma




                              <information>J'ai copier/collé ce que dit swinnen dans son tutoriel.




                              Ben alors, inutile, suffit de mettre un lien. C'est assez pénible cette façon de faire où tout le monde copie tout le monde sans la moindre originalité et le moindre esprit critique.
                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 juillet 2010 à 19:19:54

                                Citation : candide

                                Citation : realmagma




                                <information>J'ai copier/collé ce que dit swinnen dans son tutoriel.




                                Ben alors, inutile, suffit de mettre un lien. C'est assez pénible cette façon de faire où tout le monde copie tout le monde sans la moindre originalité et le moindre esprit critique.




                                Désolé, je voulais juste rendre service.
                                Je n'ai pas mit de lien car c'est un fichier PDF à télécharger (4XX pages). J'ai pensé qu'un débutant pourait se poser cette question.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  3 juillet 2010 à 10:12:13

                                  Comment peut-on changer un caractère d'une chaine? s[2] = 'a' ne marche pas...

                                  En python les objets string ne sont pas modifiables. Il faut donc recréer une nouvelle chaine à partir de l'ancienne en la coupant: s = s[:2] + 'a' + s[3:] . On additionne ainsi une sous-chaine avec les deux premiers caractère de la chaine, le 'a', et une autre sous-chaine du 4e caractère à la fin.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    3 juillet 2010 à 11:25:49

                                    Citation : Mircko

                                    Comment peut-on changer un caractère d'une chaine? s[2] = 'a' ne marche pas...


                                    En python les objets string ne sont pas modifiables. Il faut donc recréer une nouvelle chaine à partir de l'ancienne en la coupant: s = s[:2] + 'a' + s[3:] . On additionne ainsi une sous-chaine avec les deux premiers caractère de la chaine, le 'a', et une autre sous-chaine du 4e caractère à la fin.


                                    Ce problème est abordé dans le tuto de prolixe, je suggère de faire un lien vers le chapitre correspondant plutôt que de se répéter.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    Zeste de Savoir, le site qui en a dans le citron !
                                      3 juillet 2010 à 13:08:24

                                      Citation : NoHaR


                                      Ce problème est abordé dans le tuto de prolixe, je suggère de faire un lien vers le chapitre correspondant plutôt que de se répéter.



                                      La rubrique FAQ est prématurée et chacun improvise des questions et des réponses, evec les incohérences qui en résultent. Par définition, une FAQ traite de questions fréquemment posées. Or, le forum a ouvert il y a 2 ou 3 jours ... Il est urgent d'attendre ;)
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        3 juillet 2010 à 13:13:09

                                        On connaît déjà les questions qui étaient souvent posées sur AL. Maintenant, une FAQ n'est pas un tuto : dire qu'on ne peut pas modifier une chaîne n'y a pas sa place à mon avis.
                                        Par contre, les problèmes résolus par iPoulet seront très probablement rencontrés par tous les débutants ou presque, et rares sont les tutos où on en parle suffisamment tôt pour qu'ils les évitent (et c'est normal, parce qu'on ne peut et ne doit pas tout dire dès le début dans un tuto).
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          3 juillet 2010 à 13:20:34

                                          candide> Comme l'a dit Maxibolt, les gens ne se sont pas mis à Python du jour au lendemain. Nous savons très bien quelles questions reviennent fréquemment, et je m'inspire également d'autres FAQ trouvées ailleurs. Le but est, dès le début, d'apprendre aux gens à lire les post-its et à ne pas toujours reposer les mêmes questions, afin que les débutants en Python puissent apprendre les bonnes pratiques dans la bonne humeur.

                                          (Bonne humeur que tes différentes interventions ici ne permettent pas toujours de préserver, j'en ai peur, tes remarques étant en général plutôt sèches et expéditives.)
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            3 juillet 2010 à 15:02:21

                                            Citation : Maxibolt

                                            On connaît déjà les questions qui étaient souvent posées sur AL.



                                            Citation : iPoulet

                                            candide> Comme l'a dit Maxibolt, les gens ne se sont pas mis à Python du jour au lendemain. Nous savons très bien quelles questions reviennent fréquemment,



                                            Pas du tout. Ces questions ne sont pas représentatives, le trafic Python a toujours été relativement faible, les questions étaient rarement des questions de débutants en Python et encore moins de débutants en programmation.
                                            As-tu fais la moindre statistique des questions et des réponses posées ? J'en doute. Maintenant qu'il y a un cours Python, on va peut-être voir enfin la tête d'un vrai débutant.

                                            Il faut bien que tu te rendes compte que les forums sur Internet ne sont que la partie émergées de l'iceberg de l'apprentissage. Moi je fais par exemple des TP de C (ou en C) depuis plusieurs années avec des étudiants de L1, L2, L3, je discute beaucoup avec eux et les étudiants qui ont le réflexe d'aller s'informer sur des forums sont extrêmement rares, cela peut arriver, mais c'est rarissime (et malgré mes discrètes incitations à le faire, en particulier sur le sdz ou sur mathematiques.net).

                                            Il faut que tu te rendes compte que sur le sdz tu as déjà un public averti et a priori motivé et que probablement un très grand nombre de tentatives d'apprentissage se soldent par des abandons (bien sûr qu'on ne peut pas mesurer), c'est l'impitoyable loi de la sélection naturelle.

                                            Je pense que si finalement peu de gens viennent apprendre sur Internet, c'est que la documentation n'y est pas présentée de façon ergonomique et efficace. Même si de-ci, de-là on trouve des exceptions, par exemple les cours de C et de html/css sur le sdz (et encore, j'aurais pas mal de réserve à formuler).

                                            Je persiste et je signe, cette FAQ (comme d'ailleurs beaucoup d'autres sur internet) risque de ne pas être adaptée et demeurer un brouillon faute d'analyse en amont des besoins : yet another FAQ ...

                                            Et une FAQ ne se construit pas isolément, elle se construit en fonction d'autres ressources documentaires disponibles comme un cours de Python et des exercices d'applications, etc.

                                            Il n'est pas du tout évident de connaître les besoins, les sources de blocage. Il est encore moins facile d'apporter des réponses correctes, précises et adaptées à un public très varié. Ça ne s'improvise pas.

                                            Quand je vois certaines des questions/réponses que tu proposes dans le premier message de ta faq, je me dis qu'effectivement tu ne t'es pas mis longtemps dans la peau d'un vrai débutant, tu ne te rends pas/plus compte de combien tu t'exprimes de façon ambiguë et peu claire pour celui qui justement ne connait pas Python (et même d'ailleurs pour celui qui connait Python car j'ai trouvé plusieurs de tes affirmations bien peu claire voire peu cohérentes). Le problème de la personne qui sait et qui veut dispenser son savoir est qu'il faut qu'elle arrive à oublier qu'elle sait et ça c'est très difficile.



                                            Citation : iPoulet

                                            candide> et je m'inspire également d'autres FAQ trouvées ailleurs.



                                            Mauvais argument. C'est le problème n°1 dans l'apprentissage sur Internet : le manque d'originalité, le manque d'esprit critique, le fait que tout le monde copie tout le monde. Je connais bien les FAQ C et Python et je peux te dire qu'elles sont des élaborations de la réalité ne sont en aucun cas des FAQ authentiques. Et au-delà de ça, on trouve par exemple sur la faq C de developpez des énormités (du point de vue du contenu) et qui sont restées telles pendant des années, ça donne une idée du crédit qu'on peut accorder à ces faq et du manque d'esprit critique des lecteurs.


                                            Citation : iPoulet


                                            (Bonne humeur que tes différentes interventions ici ne permettent pas toujours de préserver, j'en ai peur, tes remarques étant en général plutôt sèches et expéditives.)



                                            Pour la forme des remarques, tu as probablement raison et j'admets que cela puisse être assez désagréable. Mais sur le fond, c'est que dans mon échelle de valeurs, l'authenticité et la rigueur viennent bien avant la bonne humeur, c'est le problème de la cerise et du gâteau.

                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              3 juillet 2010 à 15:25:54

                                              Euh, on a été débutants aussi. Et si, on a répondu à de "nombreuses" questions (comparativement aux questions sur Python) sur "ossekour print 1 marche pas", "Python ou C quoi choisir", "mon programme se ferme tout de suite", et autres problèmes qu'iPoulet aborde.

                                              Peut-être que tes élèves ne viennent pas ici, mais le Site du Zéro ne les a pas attendu pour répondre à des questions de Python. Y compris, et même en majorité, à des débutants. Tu ne t'es peut-être pas rendu compte de ça parce que tu ne lisais pas les topics sur Pytohn (qui n'étaient pas si rares que tu ne sembles le croire), mais les problèmes auxquels répond cette FAQ sont bien les principales questions posées ici.
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                3 juillet 2010 à 16:31:11

                                                Comment fermer propremment un programme contenant une boucle infinie ?

                                                Si vous êtes sous windows, faites CTRL + C dans IDLE. Cette combinaison de touche arrête le programme en cours.
                                                C'est quand même plus propre que de quitter avec la Croix rouge ou bien même avec CTRL + ALT + SUPR. :p
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Anonyme
                                                  3 juillet 2010 à 16:56:06

                                                  Je vais continuer à pourrir ce post en ajoutant une petite remarque concernant cette FAQ.

                                                  Une FAQ se réfléchit et se construit en équipe, en se mettant (comme le dit Candide et je dois dire que je ne suis pas souvent en phase avec ses réponses brusques) à la place d'un vrai débutant. Je ne pense pas que ipoulet devrait travailler avec d'autres FAQ Python, mais avec 2 ou 3 débutants.

                                                  Pas évident d'organiser cela, mais c'est inévitable pour avoir une FAQ construite et originale (adapté aux débutants).

                                                  Candide --> Je ne suis pas d'accord avec toi, tu peux être de bonne humeur en donnant des réponses fiables et rigoureuse. Telle est la loi de la pédagogie, tu dois être bien placé pour le savoir, et j'y suis aussi bien placé que toi!


                                                  Maintenant j'admet que certaines questions peuvent être agacantes car un minimum de recherche devrait être faite.

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    3 juillet 2010 à 17:29:20

                                                    fred, on a aussi été débutants. On sait aussi quels ont été nos problèmes, et on a aussi du répondre à des débutants. On sait quelles questions sont revenues souvent et reviendront encore sûrement souvent. Un débutant ne serait pas capable de faire la différence entre ces questions d'ordre pratique et des points qui ont leur place dans un cours (par exemple, "expliquez comment on fait des fenêtres").
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                    Anonyme
                                                      3 juillet 2010 à 17:52:58

                                                      Citation

                                                      On sait aussi quels ont été nos problèmes, et on a aussi du répondre à des débutants



                                                      Oui tu as eu des problèmes quand tu as débuté, mais il est pratiquement certains que tu vas en zapper quelques-un car tu les trouveras évident soit par une recherche, soit par une logique complètement personnelle.

                                                      Citation

                                                      Un débutant ne serait pas capable de faire la différence entre ces questions d'ordre pratique et des points qui ont leur place dans un cours



                                                      Je suis d'accord, c'est pourquoi une personne confirmé devra travailler avec des débutants et faire le bon choix quand à la place de la question.

                                                      Citation

                                                      fred, on a aussi été débutants



                                                      Mais j'y suis encore, pas toi? :p
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        3 juillet 2010 à 18:05:06

                                                        Citation : Maxibolt

                                                        Euh, on a été débutants aussi.


                                                        Ipso facto. Mais ce n'est pas un argument. Nous avons TOUS été des débutants. Cela ne suffit pas à nous rendre capables de nous adresser à des débutants (ou plus généralement à ceux qui se savent pas) de façon pertinente et efficace et à être en phase avec eux.

                                                        Parce que le fait de savoir place celui qui sait un état en général irréversible : il ne voit plus les choses de la même façon que lorsqu'il ne savait pas, autrement dit, il n'arrive pas à se défaire du savoir acquis.



                                                        Citation : Maxibolt

                                                        Et si, on a répondu à de "nombreuses" questions (comparativement aux questions sur Python) sur "ossekour print 1 marche pas", "Python ou C quoi choisir", "mon programme se ferme tout de suite", et autres problèmes qu'iPoulet aborde.




                                                        Bon allons-y question par question :

                                                        "ossekour print 1 marche pas"

                                                        Alors là, la question dans la FAQ est formulée de manière très polie et très artificielle par iPoulet :

                                                        Citation : zFAQ Python


                                                        Comment lire et écrire du texte dans Python 3 ?



                                                        Quand j'ai lu cette question, je me suis demandé : mais qu'est-ce qu'il veut dire là ???? Lire du texte DANS python 3, ça veut dire quoi DANS ? il veut dire : lire du texte dans mon code source ??? Ben si c'est ça, oui, je sais lire mon code source, avec Python 3 ou avec Python 2.6 d'ailleurs ... Ecrire dans Python 3 ? Mais écrire quoi ? Mon code-source ? Ben oui, je l'écrit, où ? DANS un éditeur ou DANS un fichier, quel est le problème ?

                                                        Après lecture de la réponse proposée, je commence enfin à comprendre la question. Donc iPoulet nous parle des E/S. Et en fait, d'une minuscule partie des E/S et dans un contexte très particulier : celui où on travaille pas avec la bonne version de Python et qu'on veut utiliser print.

                                                        La question est très mal formulée :
                                                        -- il aurait fallu séparer la question des Entrées de celle des Sorties
                                                        -- il ne fallait pas formuler DANS Python, mais sous Python ou avec Python ou encore en Python
                                                        -- comment lire ou comment écrire sont des questions trop vagues, un débutant ne sait pas ce que signifie lire ou écrire qui sont des termes déjà de connaisseur (lecture/écriture). Un débutant veut faire une action (envoyer un "message" à l'utilisateur du programme, genre "trop grand", "trop petit" pour le plus/moins, soit communiquer au "programme" un "message" que l'utilisateur veut communiquer, par exemple dans le plus/moins, le nombre qu'il propose).


                                                        Ce que je veux dire par là, c'est qu'il est illusoire de vouloir réduire des situations complexes à de simples questions qui, si elles seront intelligibles par ceux qui savent déjà, ne seront pas utiles à ceux qui ne savent pas.


                                                        Quant à la réponse, elle totalement inintelligible et pas du tout au niveau de celui qui serait censé poser la question :

                                                        Citation : iPoulet

                                                        Dans Python 3, l'instruction print est devenue une fonction, n'oubliez donc pas les parenthèses. Celle-ci prend des paramètres nommés pour faire ce que print faisait avant : sep comme séparateur entre les différents arguments, end comme chaîne rajoutée à la fin (par défaut un retour à la ligne, donc remplacez le par la chaîne vide pour copier le print , de Python 2) et file comme fichier de sortie (par défaut sys.stdout).



                                                        tu crois qu'un débutant connais la différence entre instruction et fonction ? Tu crois qu'un débutant c'est ce qu'est un paramètre nommé ? Et d'ailleurs, as-t-on besoin de savoir ce qu'est un paramètre nommé pour répondre à la question d'envoyer un message dans la console ? Il s'en fout le débutant de savoir ce que print faisait avant, le débutant veut d'abord savoir comment ça marche avant de savoir pourquoi ça marche.

                                                        Quant au sep et au end évoqués dans la réponse, je ne sais même pas à quoi il fait allusion, alors le débutant, j'ose pas imaginer.

                                                        De même, j'imagine un débutant qui va lire : L'ancienne fonction input a disparu, faites vos conversions à l'aide des différentes classes disponibles.
                                                        conversions ? ah bon faut faire des conversions ? Et faut convertir quoi en quoi ? des dollar en euros ? les classes disponibles ? C'est quoi son histoire de classe ? elles sont disponibles où ces classes ? (je rappelle qu'on peut faire du Python de façon avancée sans vraiment savoir ce qu'est une classe).

                                                        Bref, très mauvaise réponse. La bonne réponse nécessitait de bien percevoir l'environnement (le contexte) de la question et de répondre avec un exemple qui reprenne le contexte.


                                                        *) "Python ou C quoi choisir"
                                                        La FAQ n'a pas répondu à cette question, pourtant assez fréquente ("Quel langage choisir ?").

                                                        *) "mon programme se ferme tout de suite"

                                                        Désolé, je n'ai JAMAIS rencontré ce problème. Je connaissais ce problème en C sous dev-C++ mais en Python jamais vu. Le problème est que la réponse ne permet même pas de savoir dans quel contexte cette question peut-être posée. Ce que dit la FAQ est simplificateur et faux :

                                                        Citation : zFAQ Python


                                                        Quand vous exécutez un programme Python sous Windows, une fenêtre DOS s'ouvre pour afficher les sorties de votre programme (fonction print ) ou les éventuelles erreurs rencontrées.



                                                        N'importe quoi. Moi (et tant d'autres) j'exécute mes programmes Python

                                                        -- sous IDLE
                                                        -- en consoles,
                                                        -> soit une console Windows, ce qui nécessite quelques réglages,
                                                        -> soit la console fournie par la distribution Python et qui a un certain nombres d'inconvénients.


                                                        Aura une fenêtre furtive (ce dont parle la FAQ si j'ai bien compris) celui qui va cliquer sur son fichier Python pour lancer le programme mais encourager ce procédé pour exécuter un programme est complètement absurde.

                                                        Une fois de plus, il est grotesque de vouloir réduire des situations complexes à des questions toutes faites.



                                                        Citation : Maxibolt


                                                        Peut-être que tes élèves ne viennent pas ici,



                                                        Mes étudiants sont des étudiants tout ce qu'il y a de plus représentatif du public étudiant, que ce soit à Paris Lille ou Montpellier. Ça doit arriver dans les même proportions ailleurs que dans ma fac.


                                                        Citation : Maxibolt


                                                        Peut-être que tes élèves ne viennent pas ici, mais le Site du Zéro ne les a pas attendu pour répondre à des questions de Python. Y compris, et même en majorité, à des débutants. Tu ne t'es peut-être pas rendu compte de ça parce que tu ne lisais pas les topics sur Pytohn



                                                        Si si, je lisais tous les topics sur Python depuis environ un an. Le trafic était faible, les réponses assez pauvres.


                                                        Citation : Maxibolt


                                                        mais les problèmes auxquels répond cette FAQ sont bien les principales questions posées ici.



                                                        Non. Il suffit de faire l'examen des messages. Les questions n'étaient pas fréquentes.

                                                        La seule question vraiment fréquente est le problème des deux versions concurrentes. D'ailleurs, la FAQ ne tient pas suffisamment de cette distinction dans les différentes réponses qu'elle donne. Ce problème de choix est vraiment un gros problème pour les débutants.

                                                        La FAQ proposée ne fait que reprendre l'idée d'autres FAQ mais à mon avis le recul sur les
                                                        FAQ montre que ce n'est pas une bonne approche d'apprentissage.




                                                        Citation : realmagma

                                                        Comment fermer propremment un programme contenant une boucle infinie ?

                                                        Si vous êtes sous windows, faites CTRL + C dans IDLE. Cette combinaison de touche arrête le programme en cours.
                                                        C'est quand même plus propre que de quitter avec la Croix rouge ou bien même avec CTRL + ALT + SUPR. :p



                                                        A nouveau, question extrêmement mal formulée, à la limite de l'incompréhensible.

                                                        Comment fermer propremment un programme contenant une boucle infinie ? ça veut dire quoi. C'est peut-être clair pour toi mais pas pour n'importe qui qui ne se trouve pas dans le contexte ou toi tu te trouves.

                                                        Pourquoi aurais-je besoin de fermer et en plus proprement un programme contenant une boucle infinie ? Ça veut dire quoi le fermer salement ? Moi, j'ai un programme qui ontient une boucle infinie, et je n'ai rien besoin de fermer, proprement ou pas,, mon programme va se terminer tout seul comme un grand.

                                                        Une fois de plus, il est absurde de vouloir enfermer une situation complexe dans une question réduite.

                                                        Moi, j'ai envie de te dire que pour fermer un programme contenant une boucle infinie il faut mettre un break ou un return dans le corps de la boucle. En fait, le contexte de ta question est le suivant : le programmeur, en mode interactif ou en mode fichier, a écrit une boucle infinie (genre while True: ) et le programme, au moment de son exécution, reste enfermé à l'intérieur de la boucle si bien que le programmeur a perdu le contrôle du programme. Comment faire pour revenir à une situation "normale" cad que le programme cesse de tourner ?

                                                        Quant à la réponse, en fait elle a une portée beaucoup plus large. D'une façon générale, le programmeur peut avoir besoin

                                                        -- d'interrompre l'exécution du programme (pas forcément une boucle infinie)
                                                        -- d'interrompre la saisie du code (par exemple, en mode interactif, le code d'une fonction, le code d'une classe, une boucle un peu compliquée, etc.).

                                                        Dans ces conditions, on peut interrompre le programme en faisant la combinaison CTRL+C.



                                                        Citation : fred1599


                                                        Telle est la loi de la pédagogie, tu dois être bien placé pour le savoir, et j'y suis aussi bien placé que toi!


                                                        Non, la pédagogie, c'est une affaire d'empathie et de rigueur, la bonne humeur n'a rien à voir là-dedans.

                                                        Citation : fred1599


                                                        et j'y suis aussi bien placé que toi!




                                                        Entre toi et moi, le moins aimable n'est pas forcément celui qu'on croit ;)

                                                        Citation : Maxibolt

                                                        fred, on a aussi été débutants. On sait aussi quels ont été nos problèmes, et on a aussi du répondre à des débutants.



                                                        Ça reste à prouver.


                                                        Citation : Maxibolt

                                                        On sait quelles questions sont revenues souvent


                                                        Non, suffit de relire les questions dans l'ancien forum (peu parcouru au demeurant).


                                                        Citation : Maxibolt

                                                        reviendront encore sûrement souvent.


                                                        Attendons de voir. Mais moi, je vais pouvoir te le dire à la rentrée parce que je vais être en contact avec des dizaines de débutants.


                                                        Citation : Maxibolt

                                                        ces questions d'ordre pratique et des points qui ont leur place dans un cours (par exemple, "expliquez comment on fait des fenêtres").



                                                        Erreur hélas très fréquentes de dissocier théorie et pratique. Je pensais que sur le sdz on enseignait différemment ...




                                                        Citation : fred1599


                                                        Citation

                                                        fred, on a aussi été débutants



                                                        Mais j'y suis encore, pas toi? :p



                                                        Moi, en Python, je le suis pas mal mais je vois ça plus comme un atout que comme une faiblesse. Il encore plein de choses que je ne comprends pas en Python et plein de choses que je ne connais pas.


                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          3 juillet 2010 à 19:01:01

                                                          Tes remarques sont constructives, candide. Elle sont surement les bienvenues dans ce topic qui, si j'ai bien compris :euh: , n'est qu'une ébauche de ce que sera la vraie FAQ Python. Toutefois je te trouve très agressif, peut-être que je me fais des idées... :(

                                                          En tout cas, je trouve cela dommage. Tu pourrais beaucoup aider dans la réalisation de cette FAQ !

                                                          Peut-être aurais-tu préféré qu'une discussion sur le comment du pourquoi de celle-ci soit faites en amont. Mais le fait est que ce topic à dérivé vers cette discussion. Autant la mener dans le calme et la bonne humeur, ne crois-tu pas ? :-°
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            3 juillet 2010 à 19:11:03

                                                            Citation : LeYan'tibus

                                                            Tes remarques sont constructives, candide. Elle sont surement les bienvenues dans ce topic qui, si j'ai bien compris :euh: , n'est qu'une ébauche de ce que sera la vraie FAQ Python. Toutefois je te trouve très agressif, peut-être que je me fais des idées... :(

                                                            En tout cas, je trouve cela dommage. Tu pourrais beaucoup aider dans la réalisation de cette FAQ !

                                                            Peut-être aurais-tu préféré qu'une discussion sur le comment du pourquoi de celle-ci soit faites en amont. Mais le fait est que ce topic à dérivé vers cette discussion. Autant la mener dans le calme et la bonne humeur, ne crois-tu pas ? :-°



                                                            Désolé de ne pas faire preuve de plus d'initiative ni d'originalité mais :

                                                            +1 !
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Zeste de Savoir, le site qui en a dans le citron !
                                                              3 juillet 2010 à 19:32:04

                                                              Citation : LeYan'tibus

                                                              Tes remarques sont constructives, candide. Elle sont surement les bienvenues dans ce topic qui, si j'ai bien compris :euh: , n'est qu'une ébauche de ce que sera la vraie FAQ Python.



                                                              Merci ;)


                                                              Citation : LeYan'tibus

                                                              Toutefois je te trouve très agressif, peut-être que je me fais des idées... :(


                                                              Si tu le sens ainsi, c'est peut-être que c'est vrai. En réalité, j'ai des convictions et un haut degré d'exigence en sorte que je supporte mal le travail mal fait ou médiocre ou improvisé. Maintenant, effectivement, tout le monde ne voit pas les choses comme moi.


                                                              Citation : LeYan'tibus

                                                              Tu pourrais beaucoup aider dans la réalisation de cette FAQ !



                                                              Comme je l'ai indiqué, je pense qu'une FAQ est une mauvaise approche. Une FAQ ne correspond pas à la réalité car la notion de fréquence est trop floue. Une FAQ est réductrice car elle veut résumer des situations complexes à des questions courtes. La FAQ se donne bonne conscience en ne prenant en compte que les questions posées sur un forum où le public n'est pas le tout venant. La FAQ partage (dans un sens négatif ie segmente, dissémine) le savoir, je préfère que les connaissances soient incorporées dans le cours. Je veux bien qu'on mette dans une FAQ que des questions qui n'arrivent pas à trouver leur place dans le cours. Je considère que le cours est un point central d'apprentissage et donc si FAQ il y a, elle doit renvoyer au cours. Je suis pour qu'on discute en public de la formulation des questions et la rédaction des réponses. Je suis contre l'improvisation.

                                                              En réalité, beaucoup de questions sont de mauvaises questions parce qu'en fait ceux qui posent ces questions n'ont pas compris certaines choses. Donc, je trouve que ça ne sert à rien de répondre à des questions mal posées. Un débutant est souvent dans un tel état d'incompréhension qu'il n'est même pas en mesure de poser la moindre question. Bref, je ne crois pas du tout à la pertinence de la notion de FAQ.

                                                              Sinon, je ne pense pas m'investir dans cette FAQ pour des questions de temps (le faire bien nécessite beacoup de temps). Par ailleurs, je suis en train d'élaborer ma propre documentation sur le langage Python vu que j'ai une approche très personnelle de la notion de documentation de qualité.


                                                              Citation : LeYan'tibus

                                                              Autant la mener dans le calme et la bonne humeur, ne crois-tu pas ? :-°



                                                              Le calme oui, la bonne humeur ? faut pas non plus trop m'en demander ;) !!

                                                              Citation : NoHaR

                                                              Citation : LeYan'tibus

                                                              Tes remarques sont constructives, candide. Elle sont surement les bienvenues dans ce topic qui, si j'ai bien compris :euh: , n'est qu'une ébauche de ce que sera la vraie FAQ Python. Toutefois je te trouve très agressif, peut-être que je me fais des idées... :(

                                                              En tout cas, je trouve cela dommage. Tu pourrais beaucoup aider dans la réalisation de cette FAQ !

                                                              Peut-être aurais-tu préféré qu'une discussion sur le comment du pourquoi de celle-ci soit faites en amont. Mais le fait est que ce topic à dérivé vers cette discussion. Autant la mener dans le calme et la bonne humeur, ne crois-tu pas ? :-°



                                                              Désolé de ne pas faire preuve de plus d'initiative ni d'originalité mais :

                                                              +1 !



                                                              -2 ;)


                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              FAQ Python

                                                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                              • Editeur
                                                              • Markdown