Питхон одређује и проверава да ли је стринг нумерички или алфабетски

Бусинесс

Питхон пружа неколико метода стрингова за одређивање и проверу да ли је тип стринга нумерички или алфабетски.

Сваки метод је објашњен узорком кода.

  • Одређује да ли је стринг децимална цифра:str.isdecimal()
  • Одређивање да ли је низ број:str.isdigit()
  • Одређује да ли је стринг знак који представља број:str.isnumeric()
  • Одређује да ли је низ абецедни:str.isalpha()
  • Одредите да ли је низ алфанумерички:str.isalnum()
  • Одређује да ли су стрингови АСЦИИ знакови:str.isascii()
  • Пресуда празног низа
  • Одредите да ли се низови могу конвертовати у бројеве

За друге методе осим исасции(), стринг који садржи празан стринг, следеће симболе, итд., је нетачан.

  • ,
  • .
  • -

-1,23, итд., као нумеричка вредност је објашњена на крају овог одељка.

Регуларни изрази се могу користити за флексибилније одређивање типова знакова и за издвајање релевантних типова знакова.

Погледајте следећи чланак за више информација о томе како да одредите следеће

  • Како претворити нумерички низ (стр) у број (инт, флоат)
  • Како одредити велика и мала слова

Одређује да ли је стринг децимална цифра:str.isdecimal()

У исдецимал() је тачно ако су сви знакови децималне цифре, односно знакови у општој категорији Нд Уницоде-а. То важи и за арапске бројеве пуне ширине итд.

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

У исдигит(), поред бројева који су тачни у исдецимал(), тачни су и бројеви чија је вредност својства Уницоде Нумериц_Типе Дигит или Децимал.

На пример, суперскрипт број који представља квадрат је нетачан у исдецимал(), али истинит у исдигит().

  • суперскрипт број који представља квадрат
    • ²
    • \у00Б2}’
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()

У иснумериц(), поред бројева који су тачни у исдигит(), тачни су и бројеви чија је вредност својства Уницоде Нумериц_Типе Нумериц.

Разломци, римски бројеви и кинески бројеви су такође тачни.

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

У исалпха(), својство опште категорије Уницоде са једним од следећих је тачно.

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

У исалнум() је тачно ако је сваки знак тачан у било којој од следећих метода наведених до сада.

  • isdecimal()
  • isdigit()
  • isnumeric()
  • isalpha()

Сваки знак се процењује појединачно, тако да ће низ који садржи слова и бројеве бити истинит у исалнум() чак и ако је нетачан у свим другим методама.

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

Одређује да ли су стрингови АСЦИИ знакови:str.isascii()

Питхон 3.7 је додао исасции(). Враћа тачно ако су сви знакови у низу АСЦИИ знакови.

Поред бројева и слова, тачни су и симболи као што су + и -.

s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False

Не-АСЦИИ хирагана и други знакови су лажни.

s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True

Као што ћемо даље видети, за разлику од других метода, исасции() враћа труе чак и за празан стринг.

Пресуда празног низа

Празан стринг је истинит за исасции() и нетачан за остале методе.

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

Користите боол() да одредите да ли је то празан стринг. Повратна вредност је нетачна за празан стринг и тачна у супротном.

print(bool(''))
# False

print(bool('abc123'))
# True

Одредите да ли се низови могу конвертовати у бројеве

Низови негативних или фракционих вредности садрже тачке или знаке минус. Према томе, резултат је нетачан за све методе осим исасции().

Иако је тачно за исасции(), није погодно за одређивање да ли се стринг може конвертовати у нумеричку вредност, пошто је истинит чак и ако садржи друге симболе или абецедне знакове.

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

Стрингови се могу конвертовати у бројеве са покретним зарезом помоћу флоат(). Грешка за низове који се не могу конвертовати.

print(float('-1.23'))
# -1.23

print(type(float('-1.23')))
# <class 'float'>

# print(float('abc'))
# ValueError: could not convert string to float: 'abc'

Уз руковање изузетком, може се дефинисати функција која враћа труе када се стринг може конвертовати помоћу флоат().

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

Ако желите да утврдите да је и број раздвојен зарезима тачан, користите реплаце() да уклоните зарез (замените га празним низом).

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