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

Résolu/Fermé
getudir78 Messages postés 29 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 2 septembre 2020 - Modifié le 24 avril 2019 à 22:53
getudir78 Messages postés 29 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 2 septembre 2020 - 24 avril 2019 à 22:43
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 4816 Date d'inscription dimanche 12 juin 2011 Statut Contributeur Dernière intervention 5 octobre 2021 1 225
Modifié le 24 avril 2019 à 12:43
'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 29 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 2 septembre 2020 33
24 avril 2019 à 22:40
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 29 Date d'inscription vendredi 3 janvier 2014 Statut Membre Dernière intervention 2 septembre 2020 33
24 avril 2019 à 22:43
Merci; le problème est résolu.
0