it-swarm.com.de

Wie prüft man in Python, ob ein String nur Zahlen enthält?

Wie prüfen Sie, ob eine Zeichenfolge nur Zahlen enthält?

Ich habe es hier versucht. Ich möchte gerne den einfachsten Weg, dies zu erreichen.

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

Sie möchten die isdigit-Methode für Ihr str-Objekt verwenden:

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

Aus der isdigit Dokumentation:

str.isdigit()

Gibt true zurück, wenn alle Zeichen in der Zeichenfolge Ziffern sind und es gibt mindestens ein Zeichen, andernfalls falsch.

Für 8-Bit-Zeichenfolgen ist diese Methode abhängig vom Gebietsschema.

174
mhlester

Verwenden Sie str.isdigit :

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

Verwenden Sie den String isdigit function:

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

Sie können try catch block hier verwenden:

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

Da jedes Mal, wenn ich auf ein Problem stoße, ein Problem auftritt, besteht die Möglichkeit, dass str manchmal nicht vorhanden ist. Wenn str nicht vorhanden ist, reicht es aus, nur str.isdigit () zu verwenden, da Sie eine Fehlermeldung erhalten 

AttributeError: 'NoneType'-Objekt hat kein Attribut' isdigit '

und dann müssen Sie zuerst überprüfen, ob der Wert Keine ist oder nicht. Um eine Multi-If-Verzweigung zu vermeiden, können Sie dies folgendermaßen tun:

if str and str.isdigit():

Ich hoffe, das hilft den Leuten, die das gleiche Problem haben wie ich.

1
zhihong

Wie in diesem Kommentar erwähnt Wie prüft man python, ob ein String nur Zahlen enthält? Die isdigit() -Methode ist für diesen Anwendungsfall nicht ganz genau, weil sie gibt für einige ziffernähnliche Zeichen True zurück:

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

Wenn dies vermieden werden muss, prüft die folgende einfache Funktion, ob alle Zeichen in einer Zeichenfolge eine Ziffer zwischen "0" und "9" sind:

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

Verwendet im Beispiel aus der Frage:

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

Sie können auch die Regex verwenden, 

import re

zB: -1) Word = "3487954"

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

zB: -2) Word = "3487.954"

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

zB: -3) Word = "3487.954 328"

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

Wie Sie alle 3 sehen können, bedeutet dies, dass in Ihrer Zeichenfolge nur keine enthalten ist. So können Sie die jeweiligen Lösungen mitverfolgen.

0
Devendra Bhat

Was ist mit Float-Nummern , Negativen Nummern usw. Alle vorherigen Beispiele werden falsch sein. 

Bis jetzt habe ich so etwas bekommen, aber ich denke es könnte viel besser sein:

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

wird nur dann true zurückgeben, wenn es eine oder keine '.' in der Ziffernfolge.

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

wird falsch zurückkehren

0
Joe9008