Python određuje i provjerava je li niz numerički ili abecedni

Poslovanje

Python nudi nekoliko metoda niza za određivanje i provjeru je li vrsta stringa numerička ili abecedna.

Svaka metoda je objašnjena primjerom koda.

  • Određuje je li niz decimalna znamenka:str.isdecimal()
  • Određivanje je li niz broj:str.isdigit()
  • Određuje je li niz znak koji predstavlja broj:str.isnumeric()
  • Određuje je li niz abecedni:str.isalpha()
  • Odredite je li niz alfanumerički:str.isalnum()
  • Određuje jesu li nizovi ASCII znakovi:str.isascii()
  • Presuda praznog niza
  • Odredite mogu li se nizovi pretvoriti u brojeve

Za druge metode osim isascii(), niz koji sadrži prazan niz, sljedeće simbole, itd., je netočan.

  • ,
  • .
  • -

-1,23, itd., kao što je brojčana vrijednost objašnjena na kraju ovog odjeljka.

Regularni izrazi se mogu koristiti za fleksibilnije određivanje tipova znakova i za izdvajanje relevantnih tipova znakova.

Pogledajte sljedeći članak za više informacija o tome kako odrediti sljedeće

  • Kako pretvoriti numerički niz (str) u broj (int, float)
  • Kako odrediti velika i mala slova

Određuje je li niz decimalna znamenka:str.isdecimal()

U isdecimal() vrijedi ako su svi znakovi decimalne znamenke, odnosno znakovi u općoj kategoriji Nd Unicodea. To vrijedi i za arapske brojeve pune š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

Ako sadrži simbol kao što je znak minus ili točka, netočno je. Na primjer, ako želite odrediti da je niz kao što je ‘-1,23’ numerička vrijednost, možete upotrijebiti rukovanje iznimkama. To je objašnjeno na kraju ovog odjeljka.

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

Određivanje je li niz broj:str.isdigit()

U isdigit(), osim brojeva koji su istiniti u isdecimal(), istiniti su i brojevi čija je vrijednost svojstva Unicode Numeric_Type Digit ili Decimal.

Na primjer, superscript broj koji predstavlja kvadrat je netočan u isdecimal(), ali istinit u isdigit().

  • superscript broj koji 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

Određuje je li niz znak koji predstavlja broj:str.isnumeric()

U isnumeric(), osim brojeva koji su istiniti u isdigit(), istiniti su i brojevi čija je vrijednost svojstva Unicode Numeric_Type Numeric.

Razlomci, rimski brojevi i kineski brojevi su također istiniti.

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

Određuje je li niz abecedni:str.isalpha()

U isalpha(), svojstvo opće kategorije Unicode s jednim od sljedećih je istinito.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Abeceda, kineski znakovi itd. bit će istiniti.

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

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

Arapski brojevi su lažni, ali kineski brojevi su istiniti jer su također kineski znakovi; međutim, nule u kineskim brojevima su laž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

Rimski brojevi su lažni.

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

Odredite je li niz alfanumerički:str.isalnum()

U isalnum() je istina ako je svaki znak istinit u bilo kojoj od sljedećih metoda navedenih do sada.

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

Svaki znak se procjenjuje pojedinačno, tako da će niz koji sadrži slova i brojeve biti istinit u isalnum() čak i ako je lažan u svim ostalim metodama.

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

Određuje jesu li nizovi ASCII znakovi:str.isascii()

Python 3.7 dodao je isascii(). Vraća true ako su svi znakovi u nizu ASCII znakovi.

Osim brojeva i slova, istiniti su i simboli kao što su + i -.

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

Ne-ASCII hiragana i drugi znakovi su lažni.

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

Kao što ćemo vidjeti sljedeće, za razliku od drugih metoda, isascii() vraća true čak i za prazan niz.

Presuda praznog niza

Prazan niz je istinit za isascii(), a netočan za ostale 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

Koristite bool() da odredite je li to prazan niz. Povratna vrijednost je lažna za prazan niz i istinita u suprotnom.

print(bool(''))
# False

print(bool('abc123'))
# True

Odredite mogu li se nizovi pretvoriti u brojeve

Nizovi negativnih ili frakcijskih vrijednosti sadrže točke ili znakove minus. Stoga je rezultat lažan za sve metode osim isascii().

Iako je istinito za isascii(), nije prikladno za određivanje može li se niz pretvoriti u brojčanu vrijednost, budući da je istinit čak i ako sadrži druge simbole ili abecedne znakove.

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

Nizovi se mogu pretvoriti u brojeve s pomičnim zarezom pomoću float(). Pogreška za nizove koji se ne mogu 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'

Uz rukovanje iznimkama, može se definirati funkcija koja vraća true kada se niz može pretvoriti pomoću 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

Ako želite utvrditi da je i broj odvojen zarezom istinit, upotrijebite replace() da uklonite zarez (zamijenite ga 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

Ako želite podržati razgraničenje razmaka, možete dalje koristiti 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