Python določi in preveri, ali je niz številski ali črkovni.

Posel

Python ponuja več nizovskih metod za določanje in preverjanje, ali je tip niza številski ali črkovni.

Vsaka metoda je razložena z vzorčno kodo.

  • Določi, ali je niz decimalno število:str.isdecimal()
  • Ugotavljanje, ali je niz število:str.isdigit()
  • ugotovi, ali je niz znak, ki predstavlja število:str.isnumeric()
  • ugotovi, ali je niz abecedni:str.isalpha()
  • Ugotavljanje, ali je niz alfanumeričen:str.isalnum()
  • določa, ali so nizi znaki ASCII:str.isascii()
  • Sodba o praznem nizu
  • Ugotavljanje, ali je nize mogoče pretvoriti v številke

Pri metodah, razen isascii(), je niz, ki vsebuje prazen niz, naslednje simbole itd., napačen.

  • ,
  • .
  • -

-1,23 itd., kot številčna vrednost je razloženo na koncu tega poglavja.

Regularne izraze lahko uporabite za bolj fleksibilno določanje vrst znakov in pridobivanje ustreznih vrst znakov.

Za več informacij o tem, kako določiti naslednje podatke, glejte naslednji članek

  • Kako pretvoriti številski niz (str) v število (int, float)
  • Kako določiti velike in male črke

Določi, ali je niz decimalno število: str.isdecimal()

V funkciji isdecimal() je res, če so vsi znaki decimalke, torej znaki splošne kategorije Nd Unicode. Prav tako velja za arabske številke polne širine itd.

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

Če vsebuje simbol, na primer znak minus ali piko, je napačen. Če želite na primer ugotoviti, ali je niz, kot je '-1,23', številska vrednost, lahko uporabite obdelavo izjem. To je razloženo na koncu tega poglavja.

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

Ugotavljanje, ali je niz število: str.isdigit()

V isdigit() so poleg števil, ki so resnična v isdecimal(), resnična tudi števila, katerih vrednost lastnosti Unicode Numeric_Type je Digit ali Decimal.

Na primer, nadštevilčno število, ki predstavlja kvadrat, je v isdecimal() napačno, v isdigit() pa resnično.

  • nadnapisno število, ki predstavlja kvadrat
    • ²
    • '\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

ugotovi, ali je niz znak, ki predstavlja število: str.isnumeric()

V funkciji isnumeric() so poleg številk, ki so resnične v funkciji isdigit(), resnične tudi številke, katerih vrednost lastnosti Unicode Numeric_Type je Numeric.

Veljajo tudi ulomki, rimske in kitajske številke.

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

ugotovi, ali je niz abecedni: str.isalpha()

V isalpha() je lastnost splošne kategorije Unicode z eno od naslednjih vrednosti resnična.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Abeceda, kitajski znaki itd. bodo resnični.

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

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

Arabske številke so napačne, kitajske številke pa so resnične, ker so tudi kitajski znaki; vendar so ničle v kitajskih številkah napačne.

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

Rimske številke so napačne.

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

Ugotavljanje, ali je niz alfanumeričen: str.isalnum()

V isalnum() je true, če je vsak znak true v kateri koli od doslej naštetih metod.

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

Vsak znak se oceni posebej, zato bo niz, ki vsebuje črke in številke, v metodi isalnum() resničen, čeprav bo v vseh drugih metodah napačen.

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

določa, ali so nizi znaki ASCII: str.isascii()

V program Python 3.7 je bila dodana funkcija isascii(). Ta vrne true, če so vsi znaki v nizu znaki ASCII.

Poleg številk in črk veljajo tudi simboli, kot sta + in -.

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

Znaki hiragana in drugi znaki, ki niso ASCII, so napačni.

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

Kot bomo videli v nadaljevanju, metoda isascii() za razliko od drugih metod vrne true tudi za prazen niz.

Sodba o praznem nizu

Prazen niz je true za isascii() in false za druge metode.

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

Z ukazom bool() ugotovite, ali gre za prazen niz. Vrnjena vrednost je false za prazen niz in true v nasprotnem primeru.

print(bool(''))
# False

print(bool('abc123'))
# True

Ugotavljanje, ali je nize mogoče pretvoriti v številke

Nizi z negativnimi ali delnimi vrednostmi vsebujejo pike ali minuse. Zato je rezultat za vse metode, razen isascii(), napačen.

Čeprav velja za isascii(), ni primerna za ugotavljanje, ali je niz mogoče pretvoriti v številsko vrednost, saj velja, tudi če vsebuje druge simbole ali abecedne znake.

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

Nizove lahko pretvorite v števila s plavajočo vejico s funkcijo float(). Napaka za nize, ki jih ni mogoče pretvoriti.

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

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

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

Z obdelavo izjem je mogoče definirati funkcijo, ki vrne true, če je niz mogoče pretvoriti s funkcijo 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

Če želite ugotoviti, da je tudi številka, ločena z vejico, resnična, s funkcijo replace() odstranite vejico (nadomestite jo s praznim nizom).

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

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

Če želite podpreti ločevanje belih pik, lahko dodatno uporabite funkcijo 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
Copied title and URL