Jak sprawdzić, czy ciąg zawiera tylko liczby?
Dałem temu szansę. Chciałbym zobaczyć najprostszy sposób na osiągnięcie tego.
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
ponieważstring.digits == True
zawsze ma wartośćFalse
.Odpowiedzi:
Będziesz chciał użyć tej
isdigit
metody na swoimstr
obiekcie:if len(isbn) == 10 and isbn.isdigit():
Z
isdigit
dokumentacji :źródło
isdigit
, ale wywołuje znak a,ValueError
jeśli jest przekazywany doint()
.Zastosowanie
str.isdigit
:>>> "12345".isdigit() True >>> "12345a".isdigit() False >>>
źródło
try: assert str(int(foo)) == foo; except (AssertionError,ValueError): #handle
i było to brzydkie jak grzech. Dzięki!Użyj funkcji string isdigit :
>>> s = '12345' >>> s.isdigit() True >>> s = '1abc' >>> s.isdigit() False
źródło
Możesz też użyć wyrażenia regularnego,
import re
np .: -1) słowo = „3487954”
re.match('^[0-9]*$',word)
np .: -2) słowo = „3487,954”
re.match('^[0-9\.]*$',word)
np .: -3) słowo = „3487,954 328”
re.match('^[0-9\.\ ]*$',word)
Jak widać, wszystkie 3 np. Oznaczają, że w ciągu nie ma tylko żadnego. Możesz więc śledzić odpowiednie rozwiązania podane wraz z nimi.
źródło
re.match('^[0-9\.]*$',word)
nie działa dla pływaków.if(bool(re.search(r'\d', word)))
działa jednak dobrze.Jak wskazano w tym komentarzu, jak sprawdzić w Pythonie, czy ciąg zawiera tylko liczby?
isdigit()
metoda nie jest całkowicie dokładne w tym przypadku zastosowania, ponieważ zwraca True dla niektórych znaków numerycznych, takich jak:>>> "\u2070".isdigit() # unicode escaped 'superscript zero' True
Jeśli trzeba tego uniknąć, poniższa prosta funkcja sprawdza, czy wszystkie znaki w ciągu są cyframi od „0” do „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
Użyty w przykładzie z pytania:
if len(isbn) == 10 and contains_only_digits(isbn): print ("Works")
źródło
all(ch in string.digits for ch in s)
.Co z liczb zmiennoprzecinkowych , negatywy liczb itp .. Wszystkie przykłady zanim będzie źle.
Do tej pory dostałem coś takiego, ale myślę, że mogłoby być dużo lepiej:
'95.95'.replace('.','',1).isdigit()
zwróci prawdę tylko wtedy, gdy istnieje jeden lub nie ma znaku „.” w ciągu cyfr.
'9.5.9.5'.replace('.','',1).isdigit()
zwróci wartość false
źródło
Możesz użyć bloku try catch tutaj:
s="1234" try: num=int(s) print "S contains only digits" except: print "S doesn't contain digits ONLY"
źródło
except ValueError:
int("1_000")
na przykład nie prowadzi do błędu.Za każdym razem, gdy napotykam problem z czekiem, jest to, że czasami str może mieć wartość None, a jeśli str może mieć wartość None, użycie tylko str.isdigit () nie wystarczy, ponieważ pojawi się błąd
a następnie musisz najpierw sprawdzić, czy str ma wartość None lub nie. Aby uniknąć rozgałęzienia typu multi-if, jasnym sposobem na to jest:
if str and str.isdigit():
Mam nadzieję, że to pomoże ludziom, którzy mają taki sam problem jak ja.
źródło
Są 2 metody, które mogę wymyślić, aby sprawdzić, czy ciąg ma wszystkie cyfry lub nie
Metoda 1 (użycie wbudowanej funkcji isdigit () w Pythonie): -
>>>st = '12345' >>>st.isdigit() True >>>st = '1abcd' >>>st.isdigit() False
Metoda 2 (wykonywanie obsługi wyjątków na początku ciągu): -
st="1abcd" try: number=int(st) print("String has all digits in it") except: print("String does not have all digits in it")
Wynik powyższego kodu będzie:
String does not have all digits in it
źródło
możesz użyć metody str.isdigit () lub metody str.isnumeric ()
źródło