Python býður upp á nokkrar strengjaaðferðir til að ákvarða og athuga hvort strengjagerð sé töluleg eða stafrófsröð.
Hver aðferð er útskýrð með sýnishornskóða.
- Ákveður hvort strengur sé aukastafur:
str.isdecimal()
- Að ákvarða hvort strengur sé tala:
str.isdigit()
- Ákveður hvort strengur sé stafur sem táknar tölu:
str.isnumeric()
- Ákveður hvort strengur sé í stafrófsröð:
str.isalpha()
- Ákvarða hvort strengur sé alfanumerískur:
str.isalnum()
- Ákveður hvort strengir séu ASCII stafir:
str.isascii()
- Dómur um tóman streng
- Ákvarða hvort hægt sé að breyta strengjum í tölur
Fyrir aðrar aðferðir en isascii() er strengur sem inniheldur tóman streng, eftirfarandi tákn o.s.frv.
,
.
-
-1,23 o.s.frv., þar sem tölugildi er útskýrt í lok þessa kafla.
Hægt er að nota reglubundnar orðasambönd til að ákvarða stafategundir á sveigjanlegri hátt og til að draga út viðeigandi stafategundir.
Sjá eftirfarandi grein fyrir frekari upplýsingar um hvernig á að ákvarða eftirfarandi
- Hvernig á að breyta tölustreng (str) í tölu (int, flot)
- Hvernig á að ákvarða hástafi og lágstafi
- TENGT:Umbreytir talnastreng í tölugildi í Python
- TENGT:Listi yfir strengjaaðferðir til að meðhöndla mál í Python
- Ákveður hvort strengur sé aukastafur:str.isdecimal()
- Að ákvarða hvort strengur sé tala:str.isdigit()
- Ákveður hvort strengur sé stafur sem táknar tölu:str.isnumeric()
- Ákveður hvort strengur sé í stafrófsröð:str.isalpha()
- Ákvarða hvort strengur sé alfanumerískur:str.isalnum()
- Ákveður hvort strengir séu ASCII stafir:str.isascii()
- Dómur um tóman streng
- Ákvarða hvort hægt sé að breyta strengjum í tölur
Ákveður hvort strengur sé aukastafur:str.isdecimal()
Í isdecimal() er það satt ef allir stafir eru aukastafir, það er stafir í almennum flokki Nd í Unicode. Það á líka við um arabískar tölur í fullri breidd osfrv.
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
Ef það inniheldur tákn eins og mínusmerki eða punkt er það rangt. Til dæmis, ef þú vilt ákvarða að strengur eins og ‘-1.23’ sé tölugildi, geturðu notað undantekningarmeðferð. Þetta er útskýrt í lok þessa kafla.
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
Að ákvarða hvort strengur sé tala:str.isdigit()
Í isdigit(), til viðbótar við tölur sem eru sannar í isdecimal(), eru tölur með Unicode eignagildi Numeric_Type er Digit eða Decimal einnig sannar.
Til dæmis er yfirskrift tala sem táknar ferning ósönn í isdecimal() en sönn í isdigit().
- yfirskriftarnúmer sem táknar ferninginn
- ²
- \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
Ákveður hvort strengur sé stafur sem táknar tölu:str.isnumeric()
Í isnumeric(), til viðbótar við tölur sem eru sannar í isdigit(), eru tölur með Unicode eignagildi Numeric_Type er Numeric einnig sannar.
Brot, rómverskar tölur og kínverskar tölur eru líka sannar.
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
Ákveður hvort strengur sé í stafrófsröð:str.isalpha()
Í isalpha() er Unicode-eigin í almennum flokki með einu af eftirfarandi sönnum.
Lm
Lt
Lu
Ll
Lo
Stafrófið, kínverskir stafir osfrv. verða satt.
s = 'abc'
print('s =', s)
print('isalpha:', s.isalpha())
# s = abc
# isalpha: True
s = '漢字'
print('s =', s)
print('isalpha:', s.isalpha())
# s = 漢字
# isalpha: True
Arabískar tölur eru rangar, en kínverskar tölur eru sannar vegna þess að þær eru líka kínverskir stafir; hins vegar eru núll í kínverskum tölustöfum rangar.
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ómverskar tölur eru rangar.
s = '\u2166'
print('s =', s)
print('isalpha:', s.isalpha())
# s = Ⅶ
# isalpha: False
Ákvarða hvort strengur sé alfanumerískur:str.isalnum()
Í isalnum() er það satt ef hver stafur er satt í einhverri af eftirfarandi aðferðum sem eru skráðar hingað til.
isdecimal()
isdigit()
isnumeric()
isalpha()
Hver stafur er metinn fyrir sig, þannig að strengur sem inniheldur bókstafi og tölustafi verður satt í isalnum() jafnvel þótt rangt sé í öllum öðrum aðferðum.
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
Ákveður hvort strengir séu ASCII stafir:str.isascii()
Python 3.7 bætti isascii(). Það skilar satt ef allir stafir í strengnum eru ASCII stafir.
Auk tölustafa og bókstafa eru tákn eins og + og – einnig sönn.
s = 'abc123+-,.&'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = abc123+-,.&
# isascii: True
# isalnum: False
Hiragana sem ekki er ASCII og aðrar persónur eru rangar.
s = 'あいうえお'
print('s =', s)
print('isascii:', s.isascii())
print('isalnum:', s.isalnum())
# s = あいうえお
# isascii: False
# isalnum: True
Eins og við munum sjá næst, ólíkt öðrum aðferðum, skilar isascii() satt jafnvel fyrir tóman streng.
Dómur um tóman streng
Tómur strengur er satt fyrir isascii() og ósatt fyrir hinar aðferðirnar.
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
Notaðu bool() til að ákvarða hvort það sé tómur strengur. Skilagildið er ósatt fyrir tóman streng og satt að öðru leyti.
print(bool(''))
# False
print(bool('abc123'))
# True
Ákvarða hvort hægt sé að breyta strengjum í tölur
Strengir með neikvæðum eða brotagildum innihalda punkta eða mínusmerki. Þess vegna er niðurstaðan röng fyrir allar aðferðir nema isascii().
Þótt það sé satt fyrir isascii(), þá hentar það ekki til að ákvarða hvort hægt sé að breyta streng í tölugildi, þar sem það er satt jafnvel þótt það innihaldi önnur tákn eða stafrófsstafi.
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
Strengi er hægt að breyta í flottölur með flot(). Villa fyrir strengi sem ekki er hægt að breyta.
print(float('-1.23'))
# -1.23
print(type(float('-1.23')))
# <class 'float'>
# print(float('abc'))
# ValueError: could not convert string to float: 'abc'
Með meðhöndlun undantekninga er hægt að skilgreina fall sem skilar satt þegar hægt er að breyta streng með 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
Ef þú vilt komast að því að tala aðskilin með kommum sé líka sönn, notaðu replace() til að fjarlægja kommu (skipta um hana með tómum streng).
def is_num_delimiter(s):
try:
float(s.replace(',', ''))
except ValueError:
return False
else:
return True
print(is_num_delimiter('10,000,000'))
# True
Ef þú vilt styðja afmörkun hvítbils geturðu notað replace() frekar.
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