Python sətirin rəqəm və ya əlifba olduğunu müəyyən edir və yoxlayır

Biznes

Python sətir növünün ədədi və ya əlifba olduğunu müəyyən etmək və yoxlamaq üçün bir neçə sətir metodu təqdim edir.

Hər bir üsul nümunə kodu ilə izah olunur.

  • Sətirin onluq rəqəm olub-olmadığını müəyyən edir:str.isdecimal()
  • Sətin ədəd olub-olmadığını müəyyən etmək:str.isdigit()
  • Sətin rəqəmi təmsil edən simvol olub-olmadığını müəyyən edir:str.isnumeric()
  • Sətirin əlifba sırası olub olmadığını müəyyən edir:str.isalpha()
  • Sətin alfasayısal olub olmadığını müəyyənləşdirin:str.isalnum()
  • Sətirlərin ASCII simvolu olub olmadığını müəyyən edir:str.isascii()
  • Boş ipin hökmü
  • Sətirlərin rəqəmlərə çevrilə biləcəyini müəyyənləşdirin

isascii()-dən başqa üsullar üçün boş sətir, aşağıdakı simvollar və s. ehtiva edən sətir yanlışdır.

  • ,
  • .
  • -

-1.23 və s. kimi ədədi qiymət bu bölmənin sonunda izah olunur.

Simvol tiplərini daha çevik müəyyən etmək və müvafiq simvol növlərini çıxarmaq üçün müntəzəm ifadələrdən istifadə edilə bilər.

Aşağıdakıları necə təyin etmək barədə ətraflı məlumat üçün aşağıdakı məqaləyə baxın

  • Rəqəm sətrini (str) rəqəmə (int, float) necə çevirmək olar
  • Böyük və kiçik hərfi necə təyin etmək olar

Sətirin onluq rəqəm olub-olmadığını müəyyən edir:str.isdecimal()

isdecimal() funksiyasında bütün simvollar onluq rəqəmlər, yəni Unicode-un Nd ümumi kateqoriyasındakı simvollar olduqda doğrudur. Bu, tam enli ərəb rəqəmləri və s. üçün də doğrudur.

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

Əgər onun tərkibində mənfi işarə və ya nöqtə kimi simvol varsa, bu yanlışdır. Məsələn, ‘-1.23’ kimi sətrin ədədi dəyər olduğunu müəyyən etmək istəyirsinizsə, istisnaların idarə edilməsindən istifadə edə bilərsiniz. Bu, bu bölmənin sonunda izah olunur.

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

Sətin ədəd olub-olmadığını müəyyən etmək:str.isdigit()

isdigit() funksiyasında isdecimal() funksiyasında doğru olan ədədlərə əlavə olaraq Unicode xassə dəyəri Rəqəm və Ondalıq olan ədədlər də doğrudur.

Məsələn, kvadratı təmsil edən yuxarı işarə nömrəsi isdecimal()-da yalan, isdigit()-də isə doğrudur.

  • kvadratı təmsil edən yuxarı işarə nömrəsi
    • ²
    • \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

Sətin rəqəmi təmsil edən simvol olub-olmadığını müəyyən edir:str.isnumeric()

isnumeric() funksiyasında isdigit() funksiyasında doğru olan ədədlərə əlavə olaraq Unicode xassə dəyəri Numeric_Type Numeric olan ədədlər də doğrudur.

Kəsrlər, Roma rəqəmləri və Çin rəqəmləri də doğrudur.

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

Sətirin əlifba sırası olub olmadığını müəyyən edir:str.isalpha()

isalpha()-da aşağıdakılardan biri ilə Unicode ümumi kateqoriya xüsusiyyəti doğrudur.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Əlifba, Çin simvolları və s. doğru olacaq.

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

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

Ərəb rəqəmləri yanlışdır, lakin Çin rəqəmləri doğrudur, çünki onlar da Çin simvollarıdır; lakin Çin rəqəmlərindəki sıfırlar yanlışdır.

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

Roma rəqəmləri yanlışdır.

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

Sətin alfasayısal olub olmadığını müəyyənləşdirin:str.isalnum()

isalnum()-da hər bir simvol indiyə qədər sadalanan aşağıdakı metodlardan hər hansı birində doğrudursa, bu doğrudur.

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

Hər bir simvol fərdi olaraq qiymətləndirilir, ona görə də hərf və rəqəmlərdən ibarət sətir isalnum()-da bütün digər metodlarda yalan olsa belə doğru olacaq.

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

Sətirlərin ASCII simvolu olub olmadığını müəyyən edir:str.isascii()

Python 3.7 isascii () əlavə etdi. Sətirdəki bütün simvollar ASCII simvollarıdırsa, bu doğru qaytarır.

Rəqəmlər və hərflərlə yanaşı, + və – kimi simvollar da doğrudur.

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

ASCII olmayan hiragana və digər simvollar yanlışdır.

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

Sonra görəcəyimiz kimi, digər üsullardan fərqli olaraq, isascii() hətta boş sətir üçün də doğru qaytarır.

Boş ipin hökmü

Boş sətir isascii() üçün doğrudur, digər üsullar üçün isə false.

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

Bunun boş bir sətir olub olmadığını müəyyən etmək üçün bool() istifadə edin. Qaytarılan dəyər boş sətir üçün false, əks halda isə doğrudur.

print(bool(''))
# False

print(bool('abc123'))
# True

Sətirlərin rəqəmlərə çevrilə biləcəyini müəyyənləşdirin

Mənfi və ya kəsr dəyər sətirlərində nöqtələr və ya mənfi işarələr var. Buna görə də isascii() istisna olmaqla, bütün metodlar üçün nəticə yanlışdır.

isascii() üçün doğru olsa da, sətrin ədədi dəyərə çevrilib-çevrilə bilməyəcəyini müəyyən etmək üçün uyğun deyil, çünki o, digər simvolları və ya əlifba simvollarını ehtiva etsə belə, doğrudur.

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

Sətirlər float() ilə üzən nöqtəli nömrələrə çevrilə bilər. Çevrilə bilməyən sətirlər üçün xəta.

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

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

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

İstisna ilə işləmə ilə, sətir float() ilə çevrilə bildikdə doğru qaytaran funksiya müəyyən edilə bilər.

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

Vergüllə ayrılmış nömrənin də doğru olduğunu müəyyən etmək istəyirsinizsə, vergülü silmək üçün replace() funksiyasından istifadə edin (onu boş sətirlə əvəz edin).

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

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

Boşluğun delimitasiyasına dəstək vermək istəyirsinizsə, daha sonra replace() funksiyasından istifadə edə bilərsiniz.

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