Python визначає та перевіряє, чи є рядок числовим чи алфавітним

Бізнес

Python надає кілька методів рядка, щоб визначити та перевірити, чи є тип рядка числовим чи алфавітним.

Кожен метод пояснюється зі зразком коду.

  • Визначає, чи є рядок десятковою цифрою:str.isdecimal()
  • Визначення того, чи є рядок числом:str.isdigit()
  • Визначає, чи є рядок символом, що представляє число:str.isnumeric()
  • Визначає, чи є рядок алфавітним:str.isalpha()
  • Визначте, чи є рядок буквено-цифровим:str.isalnum()
  • Визначає, чи є рядки символами ASCII:str.isascii()
  • Судження порожнього рядка
  • Визначте, чи можна рядки перетворити на числа

Для методів, відмінних від isascii(), рядок, що містить порожній рядок, наступні символи тощо, є помилковим.

  • ,
  • .
  • -

-1,23 тощо, як числове значення пояснюється в кінці цього розділу.

Регулярні вирази можна використовувати для більш гнучкого визначення типів символів і вилучення відповідних типів символів.

Перегляньте наступну статтю, щоб дізнатися більше про те, як визначити наступне

  • Як перетворити числовий рядок (str) у число (int, float)
  • Як визначити верхній і нижній регістр

Визначає, чи є рядок десятковою цифрою: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

Якщо він містить такий символ, як знак мінус або крапка, він є помилковим. Наприклад, якщо ви хочете визначити, що рядок, наприклад ‘-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 є числові.

Дроби, римські цифри та китайські цифри також вірні.

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()

Кожен символ оцінюється окремо, тому рядок, що містить літери та цифри, буде істинним у 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 навіть для порожнього рядка.

Судження порожнього рядка

Порожній рядок є істинним для 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

Визначте, чи можна рядки перетворити на числа

Рядки з від’ємним або дробовим значенням містять крапки або знаки мінус. Таким чином, результат є хибним для всіх методів, крім 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