Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de compréhension sur un code expliqué

Sujet résolu
    11 novembre 2011 à 5:15:39

    """module multipli contenant la fonction table"""
    
    import os
    
    def table(nb, max=10):
        """Fonction affichant la table de multiplication par nb de
        1 * nb jusqu'à max * nb
        """
        i = 0
        while i<max:
            print(i+1 , "*" , nb , "=" , (i+1)*nb)
            i += 1
    
    
    # test de la fonction table
    if __name__ == "__main__":
        table(4)
        os.system("pause")
    


    J'ai un petit problème avec le code que je comprend pas trop bien :
    if __name__ == "__main__":
    
    si quelqu'un pourrai m'éclairé.

    Merçi!
    • Partager sur Facebook
    • Partager sur Twitter
      11 novembre 2011 à 8:09:03

      Bonjour, tu es plutôt du genre lève tôt dit donc :) .

      if __name__ == "__main__":
          #Suite du code
      


      Cette instruction signifie que si tu lances ce programme comme programme principale (double clique sur le fichier par exemple) toutes les instructions en dessous de ce code seront exécutées.
      • Partager sur Facebook
      • Partager sur Twitter
        11 novembre 2011 à 9:52:36

        D'autre part, c'est spécifique à Python2 (le coup du main),
        le coup du "pause" est spécifique à Windows.

        En espérant avoir complété correctement.

        ---

        Concernant le code, tu peux commencer à i=1, jusqu'à i<=max, ça t'évite de calculer i+1 à chaque coup.
        D'autre part 'max' est une mauvaise idée de nom de variable, c'est déjà le nom d'une fonction.
        Je te conseille 'maxi' à la place.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          11 novembre 2011 à 13:55:59

          Citation : la Hache

          D'autre part, c'est spécifique à Python2 (le coup du main), [...]


          Peut-être n'ai-je pas compris ce que tu voulais dire, mais il me semble bien qu'il n'y a pas de différence à ce niveau entre Python 2 et 3.

          La variable __name__ contient le nom de l'espace de noms courant. Il peut s'agir du nom d'un module (module.__name__), comme du nom d'une fonction ou d'une classe (obj.__name__).

          Ici, l'instruction if __name__ == "__main__": permet de savoir si le script a été exécuté dans l'espace de nom global (principal), nommé conventionnellement "__main__", ou sinon, s'il a été importé depuis un autre script.


          Citation : la Hache

          [...]
          D'autre part 'max' est une mauvaise idée de nom de variable, c'est déjà le nom d'une fonction.
          Je te conseille 'maxi' à la place.



          Non, ici ça ne gène pas. Après tout il ne fera pas appel à la fonction max dans sa fonction table, il peut donc utiliser cet identifiant tant qu'il ne modifie pas son homonymes de l'espace de noms global. ;)
          • Partager sur Facebook
          • Partager sur Twitter
            11 novembre 2011 à 14:27:20

            Ce que je voulais dire, c'est qu'en python3, il est inutile de mettre le coup du 'main' pour qu'un script python s'exécute avec un double clic dessus. (mais je n'ai pas testé sous window$)
            Il existe toujours, bien sûr, si on veut s'en servir.
            --
            maxi reste une meilleure idée, histoire de pas prendre de mauvaises habitudes ou d'être gêné par la coloration syntaxique de max qui désigne un fonction (qu'on peut en effet écraser avec max=3)
            • Partager sur Facebook
            • Partager sur Twitter
              11 novembre 2011 à 15:32:25

              Citation : la Hache

              Ce que je voulais dire, c'est qu'en python3, il est inutile de mettre le coup du 'main' pour qu'un script python s'exécute avec un double clic dessus.



              je ne suis pas du tout d'accord avec toi. Admettons qu'il veuille créer un programme X.
              Ce programme sera sans doute composé de n fichiers.py.
              S'il veut qu'un fichier (n'importe lequel) s'exécute d'une manière spéciale, le coup du if __name__ == "__main__": sera nécessaire.

              En effet, dans un fichier des variables ou des appels de fonctions peuvent être appelés si le programme est exécuté. if __name__ == "__main__": est une sorte de garantie, que si le fichier est exécuté comme fichier principale (double-clique), rien ou autre chose sera exécuté à la place.
              Autant prendre les bonnes habitudes dés le départ.

              (Même s'il n'en a pas besoin, pourquoi ne pas inscrire un petit quelque chose comme suit:
              if __name__ == "__main__":
                  input("Lancez le fichier principale.py SVP. Appuyez sur une touche pour quitter... >")
              


              Ou bien
              if __name__ == "__main__":
                  #Code source qui ouvre automatiquement le fichier principale.py
              


              Ou encore
              if __name__ == "__main__":
                  pass
              

              je referme la parenthèse )



              Citation

              maxi reste une meilleure idée, histoire de pas prendre de mauvaises habitudes ou d'être gêné par la coloration syntaxique de max qui désigne un fonction (qu'on peut en effet écraser avec max=3)



              Je plussoie. :)
              • Partager sur Facebook
              • Partager sur Twitter
                11 novembre 2011 à 17:07:40

                Citation : la Hache

                Ce que je voulais dire, c'est qu'en python3, il est inutile de mettre le coup du 'main' pour qu'un script python s'exécute avec un double clic dessus. (mais je n'ai pas testé sous window$)
                Il existe toujours, bien sûr, si on veut s'en servir.



                Non, là tu racontes n'importe quoi.

                Le if __name__ == '__main__': a strictement le même sens, la même utilité, et la même portée en python 2 et en python 3. Dans aucune des deux versions il n'est obligatoire, sauf qu'il permet dans les deux versions de gérer plus proprement l'exécution d'un module en tant que script applicatif.

                Et c'est pareil sous Windows.
                • Partager sur Facebook
                • Partager sur Twitter
                Zeste de Savoir, le site qui en a dans le citron !
                  11 novembre 2011 à 17:16:35

                  Pardon pour le 'main', j'ai dû mal lire un passage de je sais plus quel bouquin.

                  Je ne fais que des petits scripts en python3 et je ne l'utilise jamais.
                  Sur France IOI, en Python3, il n'y en a pas.
                  Sur prologin, en Python2, il est proposé systématiquement, je n'ai pas testé sans.
                  C'est ce qui m'avait conforté dans mon erreur, qui doit être partagée, possiblement.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    11 novembre 2011 à 20:17:22

                    Merçi à tous pour vos réponses sa ma aidé à avancé! :)
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Problème de compréhension sur un code expliqué

                    × 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