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

Résolu
getudir78 Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -  
getudir78 Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   -
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

ElementW Messages postés 4814 Date d'inscription   Statut Contributeur Dernière intervention   1 223
 
'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
getudir78 Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   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
getudir78 Messages postés 28 Date d'inscription   Statut Membre Dernière intervention   33
 
Merci; le problème est résolu.
0