Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » Problème if name == "__main__": Python sur Casio 90+E


brba11 Invité

Problème if name == "__main__": Python sur Casio 90+E

Posté le 18/02/2021 10:34

Bonjour, j'ai une question concernant le lancement des programmes python:

def conv(n, base):
    r = 0
    nbres = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
    n = str(n)
    for i in range(len(n)):
        assert nbres.index(n[len(n)-1-i].upper()) < base, "Nombre avec chiffre invalide"
        r += nbres.index(n[len(n)-1-i].upper())*(base**i)
    return r

if __name__ == "__main__":
    n=input('n=')
    b=eval(input('base='))
    print(conv(n, b), 'base 10')


Ce code permet de convertir un nombre d'une base quelconque <= à 16 en base 10...
Le souci est que lorsque je clique sur Run rien ne se passe, comme si ce qu'il y avait après __name__=="__main__" ne s'exécutait pas...
Connaissez-vous l'origine du problème?


Lephenixnoir Hors ligne Administrateur Points: 24572 Défis: 170 Message

Citer : Posté le 18/02/2021 10:41 | #


Bonjour, c'est parce que dans le shell Python, le programme (qui disons s'appelle x.py) est exécuté avec from x import *. Il n'est pas lancé directement, mais est importé comme un module.

La différence, c'est que du coup __name__ ne vaut pas "__main__" (ce qui est vrai quand on tape directement dans le shell) mais "x" (le nom du module).

Tu peux le vérifier en insérant un print(__name__) juste avant le if.

Tu as plusieurs options pour résoudre ce problème, dont :
• Ne pas utiliser if __name__ == "__main__", ce qui exécutera tes trois lignes finales même si le programme est importé comme un module
• Placer les trois lignes de test dans une fonction et appeler cette fonction à la main en tapant son nom dans le shell après avoir tapé sur Run
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Dark storm En ligne Labélisateur Points: 11641 Défis: 176 Message

Citer : Posté le 18/02/2021 10:42 | #


Hello !
Je ne sais pas trop comment fonctionne l'interpréteur Python de la G90+E, mais il est possible que la métavariable __name__ ne soit pas initialisée.
J'ai pas de calto sous la main, mais tu peux tester dans un programme vierge en faisant un print(__name__)

Si c'est effectivement le cas, tu n'aura pas le choix que de mettre ton code direct à la racine :
def conv(n, base):
    r = 0
    nbres = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "A", "B", "C", "D", "E", "F"]
    n = str(n)
    for i in range(len(n)):
        assert nbres.index(n[len(n)-1-i].upper()) < base, "Nombre avec chiffre invalide"
        r += nbres.index(n[len(n)-1-i].upper())*(base**i)
    return r

n=input('n=')
b=eval(input('base='))
print(conv(n, b), 'base 10')

Finir est souvent bien plus difficile que commencer. — Jack Beauregard


brba11 Invité

Citer : Posté le 18/02/2021 10:48 | #


D'accord merci à vous deux, je vais faire l'option d'une petite fonction car il s'agit d'un sous programme, et je ne veux donc pas que les trois lignes s'exécutent pour rien...
Ce n'est donc qu'une fonction de test...

Bonne journée à vous et encore merci!

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 204 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd