Ta odpowiedź zawiera przewodnik krok po kroku mający funkcję z przykładami do znalezienia łańcucha:
- Dodatnia liczba całkowita
- Pozytywna / negatywna - liczba całkowita / liczba zmiennoprzecinkowa
- Jak odrzucić ciągi „NaN” (nie liczbę) podczas sprawdzania liczby?
Sprawdź, czy ciąg jest dodatnią liczbą całkowitą
Możesz użyć, str.isdigit()
aby sprawdzić, czy podany ciąg jest dodatnią liczbą całkowitą.
Przykładowe wyniki:
# For digit
>>> '1'.isdigit()
True
>>> '1'.isalpha()
False
Sprawdź, czy ciąg jest dodatni / ujemny - liczba całkowita / liczba zmiennoprzecinkowa
str.isdigit()
zwraca, False
jeśli ciąg jest liczbą ujemną lub liczbą zmiennoprzecinkową. Na przykład:
# returns `False` for float
>>> '123.3'.isdigit()
False
# returns `False` for negative number
>>> '-123'.isdigit()
False
Jeśli chcesz również sprawdzić ujemne liczby całkowitefloat
, a następnie możesz napisać niestandardową funkcję, aby to sprawdzić jako:
def is_number(n):
try:
float(n) # Type-casting the string to `float`.
# If string is not a valid `float`,
# it'll raise `ValueError` exception
except ValueError:
return False
return True
Przykładowy przebieg:
>>> is_number('123') # positive integer number
True
>>> is_number('123.4') # positive float number
True
>>> is_number('-123') # negative integer number
True
>>> is_number('-123.4') # negative `float` number
True
>>> is_number('abc') # `False` for "some random" string
False
Odrzuć ciągi „NaN” (nie liczbę) podczas sprawdzania liczby
Powyższe funkcje zwrócą True
ciąg „NAN” (nie liczba), ponieważ dla Pythona jest to poprawna liczba zmiennoprzecinkowa, która nie jest liczbą. Na przykład:
>>> is_number('NaN')
True
Aby sprawdzić, czy liczba to „NaN”, możesz użyć math.isnan()
jako:
>>> import math
>>> nan_num = float('nan')
>>> math.isnan(nan_num)
True
Lub jeśli nie chcesz importować dodatkowej biblioteki, aby to sprawdzić, możesz po prostu to sprawdzić, porównując go z samym sobą ==
. Python zwraca, False
gdy liczba nan
zmiennoprzecinkowa jest porównywana z samym sobą. Na przykład:
# `nan_num` variable is taken from above example
>>> nan_num == nan_num
False
Stąd powyżej funkcja is_number
może być aktualizowana, aby powrócić False
do"NaN"
jako:
def is_number(n):
is_number = True
try:
num = float(n)
# check for "nan" floats
is_number = num == num # or use `math.isnan(num)`
except ValueError:
is_number = False
return is_number
Przykładowy przebieg:
>>> is_number('Nan') # not a number "Nan" string
False
>>> is_number('nan') # not a number string "nan" with all lower cased
False
>>> is_number('123') # positive integer
True
>>> is_number('-123') # negative integer
True
>>> is_number('-1.12') # negative `float`
True
>>> is_number('abc') # "some random" string
False
PS: Każda operacja dla każdej kontroli w zależności od rodzaju numeru wiąże się z dodatkowym kosztem. Wybierz wersję is_number
funkcji, która odpowiada Twoim wymaganiom.