web-dev-qa-db-fra.com

How to check to python is one chain?

Comment vérifier si une chaîne ne contient que des nombres?

Je l'ai essayé ici. J'aimerais voir le moyen le plus simple d'accomplir cela.

import string

def main():
    isbn = input("Enter your 10 digit ISBN number: ")
    if len(isbn) == 10 and string.digits == True:
        print ("Works")
    else:
        print("Error, 10 digit number was not inputted and/or letters were inputted.")
        main()

if __== "__main__":
    main()
    input("Press enter to exit: ")
81
Coder77

Vous voudrez utiliser la méthode isdigit sur votre objet str:

if len(isbn) == 10 and isbn.isdigit():

Dans la documentation isdigit:

str.isdigit()

Renvoie true si tous les caractères de la chaîne sont des chiffres et il y a au moins un caractère, faux sinon.

Pour les chaînes de 8 bits, cette méthode dépend des paramètres régionaux.

174
mhlester

Utilisez str.isdigit :

>>> "12345".isdigit()
True
>>> "12345a".isdigit()
False
>>>
29
iCodez

Utilisez la chaîne isdigit function:

>>> s = '12345'
>>> s.isdigit()
True
>>> s = '1abc'
>>> s.isdigit()
False
8
ndpu

Vous pouvez utiliser try block ici:

s="1234"
try:
    num=int(s)
    print "S contains only digits"
except:
    print "S doesn't contain digits ONLY"
2
cold_coder

Comme chaque fois que je rencontre un problème avec le contrôle, c’est que str peut parfois être None, et si str peut être None, utiliser seulement str.isdigit () n’est pas suffisant car vous obtiendrez une erreur 

AttributeError: l'objet 'NoneType' n'a pas d'attribut 'isdigit'

et vous devez d'abord valider que str est None ou non. Pour éviter une multi-si branche, un moyen clair de le faire est:

if str and str.isdigit():

J'espère que cela aide les gens qui ont le même problème que moi.

1
zhihong

Comme indiqué dans ce commentaire Comment vérifier dans python si une chaîne ne contient que des nombres? la méthode isdigit() n'est pas totalement précise pour ce cas d'utilisation, car renvoie True pour certains caractères analogues à des chiffres:

>>> "\u2070".isdigit() # unicode escaped 'superscript zero' 
True

Si cela doit être évité, la fonction simple suivante vérifie si tous les caractères d'une chaîne sont des chiffres compris entre "0" et "9":

import string

def contains_only_digits(s):
    # True for "", "0", "123"
    # False for "1.2", "1,2", "-1", "a", "a1"
    for ch in s:
        if not ch in string.digits:
            return False
    return True

Utilisé dans l'exemple de la question:

if len(isbn) == 10 and contains_only_digits(isbn):
    print ("Works")
1
mit

Vous pouvez également utiliser le regex, 

import re

par exemple: -1) Word = "3487954"

re.match('^[0-9]*$',Word)

par exemple: -2) Word = "3487.954"

re.match('^[0-9\.]*$',Word)

par exemple: -3) Word = "3487.954 328"

re.match('^[0-9\.\ ]*$',Word)

Comme vous pouvez le voir, les 3, par exemple, signifient qu'il n'y a que non dans votre chaîne Ainsi, vous pouvez suivre les solutions respectives données avec eux.

0
Devendra Bhat

Qu'en est-il des nombres float, negatifs, etc. Tous les exemples précédents seront faux. 

Jusqu'à présent, j'ai eu quelque chose comme ça, mais je pense que cela pourrait être beaucoup mieux:

'95.95'.replace('.','',1).isdigit()

retournera vrai que s'il y en a un ou pas '.' dans la chaîne de chiffres.

'9.5.9.5'.replace('.','',1).isdigit()

retournera faux

0
Joe9008