Python предоставя няколко метода за определяне и проверка дали даден тип низ е цифров или буквен.
Всеки метод е обяснен с примерен код.
- Определя дали даден низ е десетична цифра:
str.isdecimal()
- Определяне дали даден низ е число:
str.isdigit()
- Определя дали даден низ е символ, представляващ число:
str.isnumeric()
- Определя дали низът е азбучен:
str.isalpha()
- Определяне дали низът е буквено-цифров:
str.isalnum()
- Определя дали низовете са ASCII символи:
str.isascii()
- Съждение за празен низ
- Определяне дали низовете могат да се преобразуват в числа
За методи, различни от isascii(), низ, съдържащ празен низ, следните символи и т.н., е false.
,
.
-
-1,23 и т.н., като числова стойност, е обяснено в края на този раздел.
Регулярните изрази могат да се използват за по-гъвкаво определяне на типовете символи и за извличане на съответните типове символи.
Вижте следната статия за повече информация как да определите следното
- Как да преобразуваме цифров низ (str) в число (int, float)
- Как да определим големите и малките букви
- СВЪРЗАНИ:Преобразуване на низ от числа в числови стойности в Python
- СВЪРЗАНИ:Списък с низови методи за манипулиране на случай в Python
- Определя дали даден низ е десетична цифра: str.isdecimal()
- Определяне дали даден низ е число: str.isdigit()
- Определя дали даден низ е символ, представляващ число: str.isnumeric()
- Определя дали низът е азбучен: str.isalpha()
- Определяне дали низът е буквено-цифров: str.isalnum()
- Определя дали низовете са ASCII символи: str.isascii()
- Съждение за празен низ
- Определяне дали низовете могат да се преобразуват в числа
Определя дали даден низ е десетична цифра: str.isdecimal()
В isdecimal() е вярно, ако всички символи са десетични цифри, т.е. символи от общата категория Nd на Unicode. Това е вярно и за арабски цифри с пълна ширина и т.н.
s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True
s = '1234567890'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 1234567890
# isdecimal: True
# isdigit: True
# isnumeric: True
Ако съдържа символ, например знак минус или точка, той е false. Например, ако искате да определите, че низ като '-1.23' е числова стойност, можете да използвате обработка на изключения. Това е обяснено в края на този раздел.
s = '-1.23'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = -1.23
# isdecimal: False
# isdigit: False
# isnumeric: False
Определяне дали даден низ е число: str.isdigit()
В isdigit() в допълнение към числата, които са верни в isdecimal(), верни са и числата, чиято стойност на свойството Unicode Numeric_Type е Digit или Decimal.
Например число с горен индекс, представляващо квадрат, е невярно в isdecimal(), но вярно в isdigit().
- надписано число, представляващо квадрата
- ²
- '\u00B2}'
s = '10\u00B2'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 10²
# isdecimal: False
# isdigit: True
# isnumeric: True
Определя дали даден низ е символ, представляващ число: str.isnumeric()
В isnumeric() освен числата, които са верни в isdigit(), верни са и числата, чиято стойност на свойството Unicode Numeric_Type е Numeric.
Дробите, римските цифри и китайските цифри също са верни.
s = '\u00BD'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = ½
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '\u2166'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = Ⅶ
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '一二三四五六七八九〇'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 一二三四五六七八九〇
# isdecimal: False
# isdigit: False
# isnumeric: True
s = '壱億参阡萬'
print('s =', s)
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = 壱億参阡萬
# isdecimal: False
# isdigit: False
# isnumeric: True
Определя дали низът е азбучен: str.isalpha()
В isalpha(), свойство на обща категория на Unicode с едно от следните значения е вярно.
Lm
Lt
Lu
Ll
Lo
Азбуката, китайските йероглифи и т.н. ще бъдат верни.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Арабските цифри са неверни, но китайските цифри са верни, защото са и китайски йероглифи; нулите в китайските цифри обаче са неверни.
s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False
s = '1234567890'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 1234567890
# isalpha: False
s = '一二三四五六七八九'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 一二三四五六七八九
# isalpha: True
s = '壱億参阡萬'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 壱億参阡萬
# isalpha: True
s = '〇'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 〇
# isalpha: False
Римските цифри са фалшиви.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Определяне дали низът е буквено-цифров: str.isalnum()
В isalnum() е вярно, ако всеки символ е верен в някой от следните методи, изброени досега.
isdecimal()
isdigit()
isnumeric()
isalpha()
Всеки символ се оценява поотделно, така че низ, съдържащ букви и цифри, ще бъде true в isalnum(), дори ако е false във всички останали методи.
s = 'abc123'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
# s = abc123
# isalnum: True
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
Определя дали низовете са ASCII символи: str.isascii()
В Python 3.7 е добавена функцията isascii(). Тя връща true, ако всички символи в низа са ASCII символи.
В допълнение към цифрите и буквите, символи като + и – също са верни.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Хирагана и други знаци, които не са ASCII, са фалшиви.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Както ще видим по-нататък, за разлика от другите методи, методът isascii() връща true дори за празен низ.
Съждение за празен низ
Празен низ е true за isascii() и false за другите методи.
s = ''
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s =
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True
Използвайте bool(), за да определите дали е празен низ. Върнатата стойност е false за празен низ и true в противен случай.
print(bool(''))
# False
print(bool('abc123'))
# True
Определяне дали низовете могат да се преобразуват в числа
Отрицателните низове или низовете с дробни стойности съдържат точки или знаци минус. Затова резултатът е false за всички методи, с изключение на isascii().
Въпреки че е вярна за функцията isascii(), тя не е подходяща за определяне на това дали даден низ може да бъде преобразуван в числова стойност, тъй като е вярна дори ако съдържа други символи или буквени знаци.
s = '-1.23'
print('s =', s)
print('isalnum:', s.isalnum())
print('isalpha:', s.isalpha())
print('isdecimal:', s.isdecimal())
print('isdigit:', s.isdigit())
print('isnumeric:', s.isnumeric())
print('isascii:', s.isascii())
# s = -1.23
# isalnum: False
# isalpha: False
# isdecimal: False
# isdigit: False
# isnumeric: False
# isascii: True
Низовете могат да се преобразуват в числа с плаваща запетая с функцията float(). Грешка за низове, които не могат да бъдат конвертирани.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
С обработката на изключения може да се дефинира функция, която връща true, когато даден низ може да се преобразува с float().
def is_num(s):
try:
float(s)
except ValueError:
return False
else:
return True
print(is_num('123'))
# True
print(is_num('-1.23'))
# True
print(is_num('+1.23e10'))
# True
print(is_num('abc'))
# False
print(is_num('10,000,000'))
# False
Ако искате да определите, че число, разделено със запетая, също е вярно, използвайте replace(), за да премахнете запетаята (заменете я с празен низ).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Ако искате да поддържате разграничаване на белите полета, можете да използвате replace() допълнително.
def is_num_delimiter2(s):
try:
float(s.replace(',', '').replace(' ', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter2('10,000,000'))
# True
print(is_num_delimiter2('10 000 000'))
# True