IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

False, True =0,1 #problème


Sujet :

Python

  1. #1
    Membre habitué
    Avatar de Zorro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 130
    Points
    130
    Par défaut False, True =0,1 #problème
    Salut
    J'ai un problème avec bool et int, je m'explique, j'ai fait une fonction pour ajouter des nombre de type (int ou str) dans un fichier texte comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def add_nbr(nbr):
        if isinstance(nbr,'int') or isinstance(nbr,'str'):
           nbr_file = open('M:\\nbrfile.txt','w')
           nbr_file.write(nbr)
           nbr_file.close()
           return True
        else:
           raise "Type argument incorrect %s" % (type(nbr))
    Execution
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>>add_nbr(5)           # :P 
    True
    Mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    >>>add_nbr(True)                 # :( - False =0 et True = 1 logique
    True
    que faire?
    J'ai fait une fonction qui me donne le type de la variable sous forme de 'int', 'str' et 'bool'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    def typeof(var):
        type_var = type(var)
        split_type_var = str(type_var).split("'")
        return split_type_var[1]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if typeof(nbr) not in ['str','int']:
                   raise "Type argument invalide (int ou str), erreur %s" % (type(nbr))
    Existe-il un autre moyen pour faire ça?

    Merci
    Z
    Coure-moi après que je t’attrape.

  2. #2
    Membre confirmé Avatar de cboudy
    Profil pro
    Ingénieur informatique industrielle
    Inscrit en
    Avril 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique industrielle
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 406
    Points : 616
    Points
    616
    Par défaut
    il suffit de rajouter ça en entrée de fonction non?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if isinstance(a,bool): raise "Type argument incorrect %s" % (type(nbr))

  3. #3
    Membre habitué
    Avatar de Zorro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 130
    Points
    130
    Par défaut
    Merci cboudy

    Oui, j’avais envisager cette action, mais elle n’été pas ‘Clean’ a mon goût :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def add_nbr(nbr):
     
        if isinstance(nbr,bool): raise "Type argument incorrect %s" % (type(nbr))
     
        if isinstance(nbr,'int') or isinstance(nbr,'str'):
           nbr_file = open('M:\\nbrfile.txt','w')
           nbr_file.write(nbr)
           nbr_file.close()
           return True
        else:
           raise "Type argument incorrect %s" % (type(nbr))
    Coure-moi après que je t’attrape.

  4. #4
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    isinstance(obj, cls) test si un objet obj appartient à une classe cls ou à une autre qui en hérite (comme bool hérite de int), isinstance(True, int) vaut True

    Si tu veux être sûr que ce soit un entier, tu peux le transformer en chaine et vérifier que tous les caractères sont des chiffres:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    >>> a = True
    >>> str(a).isdigit() 
    False
    >>> b = 54
    >>> str(b).isdigit()
    True

  5. #5
    Membre habitué
    Avatar de Zorro
    Inscrit en
    Août 2002
    Messages
    137
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 137
    Points : 130
    Points
    130
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def add_nbr(nbr):
       if str(nbr).isdigit():
            nbr_file = open('M:\\nbrfile.txt','w')
            nbr_file.write(nbr)  nbr_file.close()
            return True
       else:
            raise "Type argument incorrect %s" % (type(nbr))
    Impeccable, rein a dire, Merci Guigui_
    Merci a tous.
    Z
    Coure-moi après que je t’attrape.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AC-2010] Que signifie Me.fieldname = False/True
    Par gravier3000 dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/10/2014, 15h38
  2. problème avec IdUDPServer1.Active:=false
    Par korntex5 dans le forum Delphi
    Réponses: 1
    Dernier message: 18/08/2006, 15h54
  3. Réponses: 1
    Dernier message: 03/03/2006, 12h07
  4. probleme affichage visible = true ou false
    Par Hitmaaan dans le forum Access
    Réponses: 4
    Dernier message: 29/09/2005, 13h17
  5. DBGrid Enabled true/false > pb de rafraichissement
    Par Harry dans le forum Bases de données
    Réponses: 8
    Dernier message: 14/10/2004, 16h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo