Python určuje a kontroluje, zda je řetězec číselný nebo abecední.

Podnikání

Python nabízí několik řetězcových metod pro určení a kontrolu, zda je řetězec číselného nebo abecedního typu.

Každá metoda je vysvětlena pomocí ukázkového kódu.

  • Určuje, zda je řetězec desetinnou číslicí.:str.isdecimal()
  • Určení, zda je řetězec číslo:str.isdigit()
  • Určuje, zda je řetězec znakem představujícím číslo.:str.isnumeric()
  • Určí, zda je řetězec abecední.:str.isalpha()
  • Určení, zda je řetězec alfanumerický:str.isalnum()
  • Určuje, zda jsou řetězce znaky ASCII.:str.isascii()
  • Posouzení prázdného řetězce
  • Určení, zda lze řetězce převést na čísla

U jiných metod než isascii() je řetězec obsahující prázdný řetězec, následující symboly atd. nepravdivý.

  • ,
  • .
  • -

-1,23 atd. jako číselná hodnota je vysvětleno na konci tohoto oddílu.

Regulární výrazy lze použít k pružnějšímu určení typů znaků a k extrakci příslušných typů znaků.

Další informace o tom, jak zjistit následující údaje, naleznete v následujícím článku.

  • Jak převést číselný řetězec (str) na číslo (int, float)
  • Jak určit velká a malá písmena

Určuje, zda je řetězec desetinnou číslicí.: str.isdecimal()

V příkazu isdecimal() platí, že všechny znaky jsou desítkové číslice, tj. znaky obecné kategorie Nd Unicode. Platí také pro arabské číslice plné šířky atd.

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

Pokud obsahuje symbol, například znaménko minus nebo tečku, je nepravdivý. Chcete-li například určit, že řetězec, jako je '-1,23', je číselná hodnota, můžete použít zpracování výjimek. To je vysvětleno na konci této části.

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

Určení, zda je řetězec číslo: str.isdigit()

V isdigit() jsou kromě čísel, která jsou pravdivá v isdecimal(), pravdivá také čísla, jejichž hodnota vlastnosti Unicode Numeric_Type je Digit nebo Decimal.

Například číslo s horním indexem představující čtverec je v isdecimal() false, ale v isdigit() true.

  • číslo s horním indexem představující čtverec
    • ²
    • '\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

Určuje, zda je řetězec znakem představujícím číslo.: str.isnumeric()

V isnumeric() jsou kromě čísel, která jsou pravdivá v isdigit(), pravdivá také čísla, jejichž hodnota vlastnosti Unicode Numeric_Type je Numeric.

Zlomky, římské číslice a čínské číslice jsou také pravdivé.

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

Určí, zda je řetězec abecední.: str.isalpha()

V isalpha() je pravdivá obecná vlastnost kategorie Unicode s jednou z následujících hodnot.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Abeceda, čínské znaky atd. budou pravdivé.

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

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

Arabské číslice jsou nepravdivé, ale čínské číslice jsou pravdivé, protože jsou zároveň čínskými znaky; nicméně nuly v čínských číslicích jsou nepravdivé.

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

Římské číslice jsou falešné.

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

Určení, zda je řetězec alfanumerický: str.isalnum()

V metodě isalnum() je true, pokud je každý znak true v některé z následujících dosud uvedených metod.

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

Každý znak se vyhodnocuje samostatně, takže řetězec obsahující písmena a číslice bude v metodě isalnum() pravdivý, i když ve všech ostatních metodách bude nepravdivý.

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

Určuje, zda jsou řetězce znaky ASCII.: str.isascii()

Do jazyka Python 3.7 byla přidána funkce isascii(). Vrací true, pokud jsou všechny znaky v řetězci znaky ASCII.

Kromě čísel a písmen platí také symboly jako + a -.

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

Znaky hiragana a další znaky, které nejsou v jazyce ASCII, jsou falešné.

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

Jak uvidíme dále, na rozdíl od ostatních metod vrací metoda isascii() hodnotu true i v případě prázdného řetězce.

Posouzení prázdného řetězce

Prázdný řetězec je true pro isascii() a false pro ostatní metody.

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

Pomocí funkce bool() zjistíte, zda se jedná o prázdný řetězec. Návratová hodnota je false pro prázdný řetězec a true v opačném případě.

print(bool(''))
# False

print(bool('abc123'))
# True

Určení, zda lze řetězce převést na čísla

Řetězce záporných nebo zlomkových hodnot obsahují tečky nebo znaménka minus. Proto je výsledek u všech metod kromě isascii() nepravdivý.

Ačkoli je pravdivá pro funkci isascii(), není vhodná pro určení, zda lze řetězec převést na číselnou hodnotu, protože je pravdivá, i když obsahuje jiné symboly nebo abecední znaky.

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

Řetězce lze převést na čísla s plovoucí desetinnou čárkou pomocí funkce float(). Chyba pro řetězce, které nelze převést.

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

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

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

Pomocí zpracování výjimek lze definovat funkci, která vrací true, pokud lze řetězec převést pomocí funkce 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

Pokud chcete určit, že číslo oddělené čárkou je také pravdivé, použijte funkci replace(), která čárku odstraní (nahradí ji prázdným řetězcem).

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

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

Pokud chcete podporovat oddělování bílých znaků, můžete dále použít funkci 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