Python určuje a kontroluje, či je reťazec číselný alebo abecedný

obchodné

Python poskytuje niekoľko reťazcových metód na určenie a kontrolu, či je reťazec číselného alebo abecedného typu.

Každá metóda je vysvetlená pomocou vzorového kódu.

  • Určuje, či je reťazec desatinnou číslicou:str.isdecimal()
  • Určenie, či je reťazec číslo:str.isdigit()
  • Určuje, či je reťazec znakom reprezentujúcim číslo:str.isnumeric()
  • Určí, či je reťazec abecedný:str.isalpha()
  • Určenie, či je reťazec alfanumerický:str.isalnum()
  • Určuje, či sú reťazce znakmi ASCII:str.isascii()
  • Posúdenie prázdneho reťazca
  • Určenie, či sa reťazce dajú konvertovať na čísla

Pre iné metódy ako isascii() je reťazec obsahujúci prázdny reťazec, nasledujúce symboly atď. false.

  • ,
  • .
  • -

-1,23 atď., ako číselná hodnota je vysvetlené na konci tejto časti.

Regulárne výrazy možno použiť na flexibilnejšie určenie typov znakov a na extrakciu príslušných typov znakov.

Viac informácií o tom, ako určiť tieto údaje, nájdete v nasledujúcom článku

  • Ako previesť číselný reťazec (str) na číslo (int, float)
  • Ako určiť veľké a malé písmená

Určuje, či je reťazec desatinnou číslicou: str.isdecimal()

V príkaze isdecimal() je true, ak sú všetky znaky desatinné číslice, t. j. znaky všeobecnej kategórie Nd Unicode. Je to pravda aj pre arabské číslice s plnou šírkou atď.

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

Ak obsahuje symbol, napríklad znamienko mínus alebo bodku, je nepravdivý. Ak chcete napríklad určiť, že reťazec, ako napríklad „-1,23“, je číselná hodnota, môžete použiť spracovanie výnimiek. To je vysvetlené na konci tejto časti.

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čenie, či je reťazec číslo: str.isdigit()

V isdigit() sú okrem čísel, ktoré sú pravdivé v isdecimal(), pravdivé aj čísla, ktorých hodnota vlastnosti Unicode Numeric_Type je Digit alebo Decimal.

Napríklad číslo s horným indexom predstavujúce štvorec je false v isdecimal(), ale true v isdigit().

  • číslo s horným indexom, ktoré predstavuje štvorec
    • ²
    • '\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, či je reťazec znakom reprezentujúcim číslo: str.isnumeric()

V isnumeric() sú okrem čísel, ktoré sú pravdivé v isdigit(), pravdivé aj čísla, ktorých hodnota vlastnosti Unicode Numeric_Type je Numeric.

Zlomky, rímske číslice a čínske číslice sú tiež 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čí, či je reťazec abecedný: str.isalpha()

V funkcii isalpha() je vlastnosť všeobecnej kategórie Unicode s jednou z nasledujúcich hodnôt true.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Abeceda, čínske znaky atď. budú 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 sú nepravdivé, ale čínske číslice sú pravdivé, pretože sú zároveň čínskymi znakmi; nuly v čínskych čísliciach sú však 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

Rímske číslice sú nepravdivé.

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

Určenie, či je reťazec alfanumerický: str.isalnum()

V metóde isalnum() je true, ak je každý znak true v niektorej z týchto doteraz uvedených metód.

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

Každý znak sa vyhodnocuje samostatne, takže reťazec obsahujúci písmená a čísla bude v metóde isalnum() pravdivý, aj keď vo všetkých ostatných metódach 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, či sú reťazce znakmi ASCII: str.isascii()

Do jazyka Python 3.7 bola pridaná funkcia isascii(). Vracia true, ak sú všetky znaky v reťazci znaky ASCII.

Okrem číslic a písmen platia aj symboly ako + a -.

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

Znaky hiragany a iné znaky, ktoré nie sú ASCII, sú falošné.

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

Ako uvidíme ďalej, na rozdiel od ostatných metód, metóda isascii() vracia true aj v prípade prázdneho reťazca.

Posúdenie prázdneho reťazca

Prázdny reťazec je true pre metódu isascii() a false pre ostatné metódy.

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

Pomocou funkcie bool() zistíte, či ide o prázdny reťazec. Návratová hodnota je false pre prázdny reťazec a true v opačnom prípade.

print(bool(''))
# False

print(bool('abc123'))
# True

Určenie, či sa reťazce dajú konvertovať na čísla

Reťazce záporných alebo zlomkových hodnôt obsahujú bodky alebo znamienka mínus. Preto je výsledkom pre všetky metódy okrem isascii() false.

Hoci je pravdivá pre funkciu isascii(), nie je vhodná na určenie, či sa reťazec dá previesť na číselnú hodnotu, pretože je pravdivá, aj keď obsahuje iné symboly alebo 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

Reťazce možno konvertovať na čísla s pohyblivou desatinnou čiarkou pomocou funkcie float(). Chyba pre reťazce, ktoré sa nedajú konvertovať.

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

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

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

Pomocou spracovania výnimiek je možné definovať funkciu, ktorá vráti true, keď sa reťazec dá previesť pomocou funkcie 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

Ak chcete určiť, že aj číslo oddelené čiarkou je pravdivé, použite funkciu replace() na odstránenie čiarky (nahraďte ju prázdnym reťazcom).

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

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

Ak chcete podporovať oddeľovanie bielych znakov, môžete ďalej použiť funkciu 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