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 :

avec la fonction type [Python 3.X]


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2017
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2017
    Messages : 28
    Par défaut avec la fonction type
    Bonjour!
    je vais commencer par cet exemple pour vous montrer mon problème: j'ai une liste A de différents caractères:

    A=['rt','tt','22','6','rtyh','3']

    je veux savoir parmi ces caractères ceux qui peuvent etre converti en entier (22,6,3) et ça n'a pas marché avec cette solution:

    for x in A:
    if type(int(x))==int: print(x)

    car tout simplement un msg s'affiche:
    ValueError: invalid literal for int() with base 10: 'rt'

    y a t il des solutions SVP??
    Merci !!

  2. #2
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Il y a toujours des solutions.
    On peut jouer avec replace pour enlever les guillemets (si nécessaire), on peut tester le type (float ou int), on peut tester les caractères (isdigit pour les chiffres par exemple).
    On peut aussi utiliser "try... except...".
    Sans doute plusieurs possibilités, "try... except..." étant vraisemblablement la plus simple à réaliser.
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> for x in A:
    ...     try:
    ...         print(int(x))
    ...     except:
    ...         pass

  3. #3
    Membre chevronné
    Homme Profil pro
    Développeur banc de test
    Inscrit en
    Mai 2014
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur banc de test
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 199
    Par défaut
    Bonjour,

    Vous pouvez utiliser la méthode str.isdecimal() qui retourne True si le texte contient uniquement des caractères représentants un nombre décimal.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for x in ("a", "1a", "1", "10", "01", "-1", "1.0"):
    	x.isdecimal()
    False
    False
    True
    True
    True
    False
    False



    Vous pouvez ainsi les convertir sans problèmes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for x in ("a", "1a", "1", "10", "01", "-1", "1.0"):
    	if x.isdecimal():
    		print(int(x))
    1
    10
    1


    Sauf qu'il n'existe pas de méthode native permettant de tester les entiers négatifs ou encore les nombres flottants.

    Le plus simple étant de faire un try/except ValueError, qu'on peut tester avant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def isinteger(value):
    	try:
    		int(value)
    		return True
    	except ValueError:
    		return False
     
    for x in ("a", "1a", "1", "10", "01", "-1", "1.0"):
    	if isinteger(x):
    		print(int(x))
    1
    10
    1
    -1



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    def isfloat(value):
    	try:
    		float(value)
    		return True
    	except ValueError:
    		return False
     
    def isinteger(value):
    	try:
    		int(value)
    		return True
    	except ValueError:
    		return False
     
    for x in ("a", "1a", "1", "10", "01", "-1", "1.0"):
    	if isinteger(x):
    		print(int(x))
    	elif isfloat(x):
    		print(float(x))

    1
    10
    1
    -1
    1.0

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

Discussions similaires

  1. Fonction scalaire avec paramètre de type DateTime2
    Par FRinguette dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 10/10/2014, 00h16
  2. Probleme de type avec la fonction strtok
    Par latitude38 dans le forum C
    Réponses: 5
    Dernier message: 14/01/2011, 15h46
  3. Problème de type de variable avec la fonction find
    Par Sarune dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/11/2008, 17h06
  4. Fonction template recursive, avec imbrication de types
    Par YéTeeh dans le forum Langage
    Réponses: 5
    Dernier message: 28/04/2006, 17h02
  5. Réponses: 9
    Dernier message: 30/03/2006, 16h44

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