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 __name__ == "__main__":
main()
input("Press enter to exit: ")
False
car il eststring.digits == True
toujours évalué àFalse
.Réponses:
Vous voudrez utiliser la
isdigit
méthode sur votrestr
objet:De la
isdigit
documentation :la source
isdigit
, mais lève unValueError
si passé àint()
.Utilisez
str.isdigit
:la source
try: assert str(int(foo)) == foo; except (AssertionError,ValueError): #handle
et c'était moche comme un péché. Merci!Utilisez la fonction isdigit de chaîne :
la source
Vous pouvez également utiliser le regex,
par exemple: -1) mot = "3487954"
par exemple: -2) mot = "3487.954"
par exemple: -3) mot = "3487.954 328"
Comme vous pouvez le voir tous les 3, par exemple, cela signifie qu'il n'y a que non dans votre chaîne. Ainsi, vous pouvez suivre les solutions respectives données avec eux.
la source
re.match('^[0-9\.]*$',word)
échoue pour les flotteurs.if(bool(re.search(r'\d', word)))
fonctionne bien cependant.Qu'en est-il des nombres flottants , des négatifs nombres , etc. Tous les exemples précédents seront faux.
Jusqu'à présent, j'ai eu quelque chose comme ça, mais je pense que ça pourrait être beaucoup mieux:
retournera vrai seulement s'il y en a un ou pas de '.' dans la chaîne de chiffres.
retournera faux
la source
Comme indiqué dans ce commentaire Comment vérifiez-vous en python si une chaîne ne contient que des nombres? la
isdigit()
méthode n'est pas totalement précise pour ce cas d'utilisation, car elle renvoie True pour certains caractères de type chiffre:Si cela doit être évité, la fonction simple suivante vérifie si tous les caractères d'une chaîne sont un chiffre compris entre "0" et "9":
Utilisé dans l'exemple de la question:
la source
all(ch in string.digits for ch in s)
.Vous pouvez utiliser le bloc try catch ici:
la source
except ValueError:
int("1_000")
ne conduit pas à une erreur, par exemple.Comme chaque fois que je rencontre un problème avec la vérification, c'est parce que le str peut parfois être None, et si le str peut être None, n'utiliser que str.isdigit () n'est pas suffisant car vous obtiendrez une erreur
puis vous devez d'abord valider que la chaîne est None ou non. Pour éviter une branche multi-if, une façon claire de le faire est:
J'espère que cela aidera les gens à avoir le même problème que moi.
la source
Il y a 2 méthodes auxquelles je peux penser pour vérifier si une chaîne a tous les chiffres de non
Méthode 1 (Utilisation de la fonction isdigit () intégrée en python): -
Méthode 2 (exécution de la gestion des exceptions au-dessus de la chaîne): -
La sortie du code ci-dessus sera:
la source
vous pouvez utiliser la méthode str.isdigit () ou la méthode str.isnumeric ()
la source