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: ")
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.
Utilisez str.isdigit
:
>>> "12345".isdigit()
True
>>> "12345a".isdigit()
False
>>>
Utilisez la chaîne isdigit function:
>>> s = '12345'
>>> s.isdigit()
True
>>> s = '1abc'
>>> s.isdigit()
False
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"
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.
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")
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.
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