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 санатындағы таңбалар болса, бұл дұрыс болады. Бұл толық ені бар араб сандары үшін де дұрыс, т.б.

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() параметрінде ақиқат болатын сандарға қоса, Юникод сипатының Сандық_Түрі Сандық немесе Ондық мәні болатын сандар да ақиқат болады.

Мысалы, квадратты білдіретін үстіңгі сызба саны 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() параметрінде ақиқат болатын сандарға қоса, Юникод сипатының Сандық_Түрі Сандық мәні болатын сандар да ақиқат болады.

Бөлшек сандар, рим сандары және қытай сандары да дұрыс.

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() жүйесінде келесілердің бірі бар Юникодтың жалпы санат сипаты ақиқат.

  • 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() параметрінде ақиқат болады.

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() қосты. Жолдағы барлық таңбалар 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() тіпті бос жол үшін ақиқат мәнін қайтарады.

Бос жолдың үкімі

Бос жол isascii() үшін шын, ал басқа әдістер үшін жалған.

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() пайдаланыңыз. Қайтару мәні бос жол үшін жалған, ал басқаша шын мәні.

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'

Ерекшеліктерді өңдеу кезінде жолды 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

Бос кеңістікті шектеуді қолдағыңыз келсе, ауыстыру() функциясын әрі қарай пайдалана аласыз.

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