Chatu huamua na kuangalia kama mfuatano ni wa nambari au wa alfabeti

Biashara

Python hutoa njia kadhaa za kamba kuamua na kuangalia ikiwa aina ya kamba ni nambari au alfabeti.

Kila njia inaelezewa na nambari ya sampuli.

  • Huamua kama mfuatano ni tarakimu ya desimali:str.isdecimal()
  • Kuamua kama mfuatano ni nambari:str.isdigit()
  • Huamua kama mfuatano ni herufi inayowakilisha nambari:str.isnumeric()
  • Huamua kama mfuatano ni wa alfabeti:str.isalpha()
  • Amua ikiwa mfuatano ni wa alphanumeric:str.isalnum()
  • Huamua ikiwa mifuatano ni vibambo vya ASCII:str.isascii()
  • Hukumu ya kamba tupu
  • Amua ikiwa mifuatano inaweza kubadilishwa kuwa nambari

Kwa mbinu zingine isipokuwa isascii(), mfuatano ulio na mfuatano tupu, alama zifuatazo, n.k., si kweli.

  • ,
  • .
  • -

-1.23, nk, kama thamani ya nambari inavyofafanuliwa mwishoni mwa sehemu hii.

Semi za kawaida zinaweza kutumiwa kubainisha aina za wahusika kwa urahisi zaidi na kutoa aina za wahusika husika.

Tazama nakala ifuatayo kwa habari zaidi juu ya jinsi ya kuamua yafuatayo

  • Jinsi ya kubadilisha kamba ya nambari (str) kuwa nambari (int, kuelea)
  • Jinsi ya kuamua kesi ya juu na ya chini

Huamua kama mfuatano ni tarakimu ya desimali:str.isdecimal()

Katika isdecimal(), ni kweli ikiwa herufi zote ni tarakimu za desimali, yaani, wahusika katika kategoria ya jumla Nd ya Unicode. Pia ni kweli kwa nambari za upana kamili za Kiarabu, nk.

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

Ikiwa ina ishara kama vile ishara ya kuondoa au kipindi, si kweli. Kwa mfano, ikiwa ungependa kubainisha kuwa mfuatano kama vile ‘-1.23’ ni thamani ya nambari, unaweza kutumia ushughulikiaji wa ubaguzi. Hii imeelezwa mwishoni mwa sehemu hii.

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

Kuamua kama mfuatano ni nambari:str.isdigit()

Katika isdigit(), pamoja na nambari ambazo ni kweli katika isdecimal(), nambari ambazo thamani ya sifa ya Unicode Numeric_Type ni Digit au Desimali pia ni kweli.

Kwa mfano, nambari ya maandishi ya juu inayowakilisha mraba ni ya uwongo katika isdecimal() lakini ni kweli katika isdigit().

  • nambari ya maandishi ya juu inayowakilisha mraba
    • ²
    • \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

Huamua kama mfuatano ni herufi inayowakilisha nambari:str.isnumeric()

Katika isnumeric(), pamoja na nambari ambazo ni kweli katika isdigit(), nambari ambazo thamani ya sifa ya Unicode Numeric_Type ni Nambari pia ni kweli.

Sehemu, nambari za Kirumi, na nambari za Kichina pia ni za kweli.

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

Huamua kama mfuatano ni wa alfabeti:str.isalpha()

Katika isalpha(), mali ya kitengo cha jumla cha Unicode na moja ya yafuatayo ni kweli.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Alfabeti, herufi za Kichina, n.k. zitakuwa kweli.

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

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

Nambari za Kiarabu ni za uwongo, lakini nambari za Kichina ni za kweli kwa sababu pia ni herufi za Kichina; hata hivyo, sifuri katika nambari za Kichina ni za uwongo.

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

Nambari za Kirumi ni za uwongo.

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

Amua ikiwa mfuatano ni wa alphanumeric:str.isalnum()

Katika isalnum(), ni kweli ikiwa kila mhusika ni kweli katika mojawapo ya njia zifuatazo zilizoorodheshwa hadi sasa.

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

Kila herufi hutathminiwa kibinafsi, kwa hivyo mfuatano ulio na herufi na nambari utakuwa wa kweli katika isalnum() hata kama sivyo katika mbinu zingine zote.

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

Huamua ikiwa mifuatano ni vibambo vya ASCII:str.isascii()

Python 3.7 imeongezwa isascii(). Inarudi kuwa kweli ikiwa herufi zote kwenye mfuatano ni herufi za ASCII.

Mbali na nambari na herufi, alama kama vile + na – pia ni kweli.

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

Hiragana zisizo za ASCII na wahusika wengine ni za uwongo.

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

Kama tutakavyoona ijayo, tofauti na njia zingine, isascii() inarudi kweli hata kwa kamba tupu.

Hukumu ya kamba tupu

Kamba tupu ni kweli kwa isascii() na si kweli kwa njia zingine.

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

Tumia bool() kuamua ikiwa ni kamba tupu. Thamani ya kurejesha si kweli kwa mfuatano tupu na sivyo vinginevyo.

print(bool(''))
# False

print(bool('abc123'))
# True

Amua ikiwa mifuatano inaweza kubadilishwa kuwa nambari

Mifuatano ya thamani hasi au sehemu ina nukta au ishara za kutoa. Kwa hivyo, matokeo ni ya uwongo kwa njia zote isipokuwa isascii().

Ingawa ni kweli kwa isascii(), haifai kubainisha ikiwa mfuatano unaweza kubadilishwa kuwa thamani ya nambari, kwa kuwa ni kweli hata ikiwa ina alama nyingine au herufi za alfabeti.

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

Kamba zinaweza kubadilishwa kuwa nambari za sehemu zinazoelea na kuelea (). Hitilafu kwa mifuatano ambayo haiwezi kubadilishwa.

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

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

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

Isipokuwa na utunzaji wa kipekee, chaguo za kukokotoa zinaweza kufafanuliwa ambazo hurejesha ukweli wakati kamba inaweza kubadilishwa na kuelea ().

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

Ikiwa unataka kubainisha kuwa nambari iliyotenganishwa kwa koma pia ni kweli, tumia replace() kuondoa koma (ibadilishe kwa mfuatano tupu).

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

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

Ikiwa ungependa kuauni uwekaji mipaka wa nafasi nyeupe, unaweza kutumia replace() zaidi.

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