Pourquoi main() empêche-t-il les calculs de s'effectuer ?

Résolu
getudir78 Messages postés 36 Statut Membre -  
getudir78 Messages postés 36 Statut Membre -
Bonjour,

Je débute en Python : J'ai téléchargé Anaconda 3 et Pycharm, que j'ai configurés tant bien que mal.
Je ne suis pas très à l'aise.

Le script avec ce main ci-après s'exécute sans erreur mais n'affiche aucun résultat.

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

import numpy as np
import scipy as sp

if __name__== "__main__":
    def main():
        x = 4 + 3
        # Python de base
        print('résultat addition = ' + str(int(x)))
        print('pi de numpy = ' + str(np.pi))
        # import de numpy
        print('cos(pi) de numpy = ' + str(np.cos(np.pi)))
        # import de scipy
        print("pi/2 de scipy =  %s" % str(sp.pi/2.))
        zero = 0
        print("cos(pi/2) de scipy : le %d  mathématique devient  %s" % (zero , str(sp.cos(np.pi/2.))))


Le même script sans main calcule et affiche les résultats sans problème.

# -*- coding: utf-8 -*-
import numpy as np
import scipy as sp


x = 4 + 3
# Python de base
print("a")
print("résultat addition =  {}".format(x))
print("pi de numpy =  {}".format(np.pi))
print("z")
# import de numpy
print("cos(pi) de numpy = {} ".format(str(np.cos(np.pi))))
# import de scipy
print("pi/2 de scipy =  %s" % (str(sp.pi/2.)))
zero = 0
print("cos(pi/2) de scipy : le %d  mathématique devient  %s" % (zero , str(sp.cos(np.pi/2.))))


Pouvez-vous m'aider à en comprendre les raisons ?

Par avance, merci

EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

  1. ElementW Messages postés 5690 Statut Contributeur 1 293
     
    'lut,
    même sans l'indentation (que le forum retire car tu n'as pas utilisé les balises de code), le problème est assez évident:
    tu fais bien le
    if __name__== "__main__":
    typique mais tu définis une fonction
    main
    dedans sans jamais l'appeler.
    main
    n'a aucune signification particulière en Python contrairement au C, C++ ou Java.
    3 solutions:
    • retirer la fonction main intégralement et mettre son code dans le corps du
      if __name__== "__main__":
    • laisser la fonction où elle est mais l’appeler après (peu recommandé, mauvais style):

    if __name__== "__main__":
        def main():
            ...
        main()
    • sortir la fonction du
      if
      , la mettre avant, et l'appeler dans le
      if
      (préférable)

    def main():
        ...
    
    if __name__== "__main__":
        main()

    0
    1. getudir78 Messages postés 36 Statut Membre 33
       
      Grand merci, ElementW.

      J'ai implanté la solution 3 et effectivement, le problème est résolu : les calculs s'effectuent et s'affichent. Cela m'encourage à poursuivre mes premiers pas en Python.
      Il faudra que je m'interesse "aux balises" et que comprenne plus finement comment travaille main en Python.
      Merci aussi au site "commentcamarche.net", d'avoir mis en place ce forum .
      0
  2. getudir78 Messages postés 36 Statut Membre 33
     
    Merci; le problème est résolu.
    0