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á
- SÚVISIACE:Prevod reťazca čísel na číselné hodnoty v jazyku Python
- SÚVISIACE:Zoznam reťazcových metód na manipuláciu s veľkosťou písmen v jazyku Python
- 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
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