Python määrab ja kontrollib, kas string on numbriline või tähestikuline.

Äri

Python pakub mitmeid stringi meetodeid, et määrata ja kontrollida, kas stringi tüüp on numbriline või tähestikuline.

Iga meetodit selgitatakse koos näidiskoodiga.

  • Määratleb, kas string on kümnendkoht:str.isdecimal()
  • Tehes kindlaks, kas string on number:str.isdigit()
  • Määratleb, kas string on numbrit kujutav märk:str.isnumeric()
  • Määratleb, kas string on tähestikuline:str.isalpha()
  • Määrata, kas string on tähtnumbriline:str.isalnum()
  • Määratleb, kas stringid on ASCII tähemärgid.:str.isascii()
  • Kohtuotsus tühja stringi kohta
  • Määrata, kas stringid saab teisendada numbriteks

Muude meetodite kui isascii() puhul on tühja stringi, järgmisi sümboleid jne sisaldav string vale.

  • ,
  • .
  • -

-1,23 jne. numbrilise väärtusena on selgitatud käesoleva jaotise lõpus.

Regulaaravaldisi saab kasutada märgitüüpide paindlikumaks määramiseks ja asjakohaste märgitüüpide väljavõtmiseks.

Lisateavet selle kohta, kuidas määrata järgmist, leiate järgmisest artiklist

  • Kuidas teisendada numbriline string (str) arvuks (int, float)
  • Kuidas määrata suur- ja väiketähti

Määratleb, kas string on kümnendkoht: str.isdecimal()

Funktsioonis isdecimal() on tõene, kui kõik märgid on kümnendmärgid, st Unicode'i üldkategooria Nd märgid. See on tõene ka täies laiuses araabia numbrite jne puhul.

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

Kui see sisaldab sümbolit, näiteks miinusmärki või punkti, on see vale. Näiteks kui soovite kindlaks teha, et selline string nagu '-1.23' on arvväärtus, saate kasutada erandite käsitlemist. Seda selgitatakse selle jaotise lõpus.

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

Tehes kindlaks, kas string on number: str.isdigit()

Isdigit() funktsioonis on lisaks numbritele, mis on tõesed isdecimal() funktsioonis, tõesed ka numbrid, mille Unicode'i omaduse Numeric_Type väärtus on Digit või Decimal.

Näiteks ruutu kujutav ülakohaline arv on isdecimal() funktsioonis false, kuid isdigit() funktsioonis true.

  • ülakohaga number, mis tähistab ruutu
    • ²
    • '\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

Määratleb, kas string on numbrit kujutav märk: str.isnumeric()

isnumeric() funktsioonis on lisaks numbritele, mis on tõesed isdigit() funktsioonis, tõesed ka numbrid, mille Unicode'i omaduse väärtus Numeric_Type on Numeric.

Tõsi on ka murdarvud, Rooma numbrid ja hiina numbrid.

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

Määratleb, kas string on tähestikuline: str.isalpha()

In isalpha() on Unicode'i üldkategooria omadus, mille puhul on üks järgmistest omadustest tõene.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Tähestik, hiina tähemärgid jne. on tõsi.

s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True

s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True

Araabia numbrid on valed, aga hiina numbrid on tõesed, sest need on ka hiina tähemärgid; aga nullid hiina numbrites on valed.

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

Rooma numbrid on valed.

s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False

Määrata, kas string on tähtnumbriline: str.isalnum()

Funktsioonis isalnum() on tõene, kui iga tähemärk on tõene mõnes järgmises seni loetletud meetodis.

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

Iga tähemärki hinnatakse eraldi, nii et tähed ja numbrid sisaldav string on isalnum() funktsioonis tõene, isegi kui kõigis teistes meetodites on see vale.

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

Määratleb, kas stringid on ASCII tähemärgid.: str.isascii()

Python 3.7 lisas isascii(). See tagastab true, kui kõik tähemärgid stringis on ASCII tähemärgid.

Lisaks numbritele ja tähtedele kehtivad ka sellised sümbolid nagu + ja -.

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

Mitte-ASCII hiragana ja muud tähemärgid on valed.

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

Nagu me järgnevalt näeme, tagastab isascii() erinevalt teistest meetoditest true ka tühja stringi puhul.

Kohtuotsus tühja stringi kohta

Tühi string on isascii() puhul tõene ja teiste meetodite puhul vale.

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

Kasuta bool(), et määrata, kas see on tühi string. Tagastusväärtus on tühja stringi korral false ja muidu true.

print(bool(''))
# False

print(bool('abc123'))
# True

Määrata, kas stringid saab teisendada numbriteks

Negatiivsed või murdarvud sisaldavad punkte või miinusmärke. Seetõttu on tulemus vale kõigi meetodite puhul, välja arvatud isascii().

Kuigi isascii() on tõene, ei sobi see selleks, et määrata, kas stringi saab teisendada numbriliseks väärtuseks, sest see on tõene ka siis, kui see sisaldab muid sümboleid või tähemärke.

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

Stringid saab teisendada float() abil ujukomaarvudeks. Viga stringide puhul, mida ei saa teisendada.

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

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

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

Erandikäsitlusega saab defineerida funktsiooni, mis tagastab true, kui stringi saab teisendada funktsiooniga 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

Kui soovite kindlaks teha, et ka komaga eraldatud arv on tõene, kasutage replace(), et eemaldada koma (asendada see tühja stringiga).

def is_num_delimiter(s):
    try:
        float(s.replace(',', ''))
    except ValueError:
        return False
    else:
        return True

print(is_num_delimiter('10,000,000'))
# True

Kui soovite toetada tühikute eraldamist, võite kasutada funktsiooni replace() täiendavalt.

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