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
- POVEZANO:Pretvarjanje niza števil v številske vrednosti v programu Python
- POVEZANO:Seznam metod za ravnanje z velikostmi nizov v programu Python
- 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
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