Python, bir dizenin sayısal mı yoksa alfabetik mi olduğunu belirler ve kontrol eder.

Python, bir dize türünün sayısal mı yoksa alfabetik mi olduğunu belirlemek ve kontrol etmek için birkaç dize yöntemi sağlar.

Her yöntem örnek kod ile açıklanmıştır.

  • Bir dizenin ondalık basamak olup olmadığını belirler:str.isdecimal()
  • Bir dizenin sayı olup olmadığını belirleme:str.isdigit()
  • Bir dizenin bir sayıyı temsil eden bir karakter olup olmadığını belirler:str.isnumeric()
  • Dizenin alfabetik olup olmadığını belirler:str.isalpha()
  • Dizenin alfasayısal olup olmadığını belirleyin:str.isalnum()
  • Dizelerin ASCII karakterleri olup olmadığını belirler:str.isascii()
  • Boş dize kararı
  • Dizelerin sayılara dönüştürülüp dönüştürülemeyeceğini belirleyin

isascii() dışındaki yöntemler için, boş bir dize, aşağıdaki simgeler vb. içeren bir dize yanlıştır.

  • ,
  • .
  • -

-1.23 vb. sayısal bir değer olarak bu bölümün sonunda açıklanmıştır.

Karakter türlerini daha esnek bir şekilde belirlemek ve ilgili karakter türlerini çıkarmak için normal ifadeler kullanılabilir.

Aşağıdakilerin nasıl belirleneceği hakkında daha fazla bilgi için aşağıdaki makaleye bakın.

  • Sayısal bir dize (str) bir sayıya (int, float) nasıl dönüştürülür
  • Büyük ve küçük harf nasıl belirlenir

Bir dizenin ondalık basamak olup olmadığını belirler:str.isdecimal()

isdecimal()’de, tüm karakterlerin ondalık basamak olması, yani Unicode’un Nd genel kategorisindeki karakterler olması doğrudur. Tam genişlikteki Arap rakamları vb. için de geçerlidir.

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

Eksi işareti veya nokta gibi bir sembol içeriyorsa yanlıştır. Örneğin, ‘-1.23’ gibi bir dizenin sayısal bir değer olduğunu belirlemek istiyorsanız, istisna işlemeyi kullanabilirsiniz. Bu, bu bölümün sonunda açıklanmıştır.

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

Bir dizenin sayı olup olmadığını belirleme:str.isdigit()

isdigit()’de, isdecimal()’de doğru olan sayılara ek olarak, Unicode özellik değeri Numeric_Type olan Rakam veya Ondalık sayılar da doğrudur.

Örneğin, bir kareyi temsil eden bir üst simge sayı isdecimal()’de false, isdigit()’de true’dur.

  • kareyi temsil eden üst simge numarası
    • ²
    • \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

Bir dizenin bir sayıyı temsil eden bir karakter olup olmadığını belirler:str.isnumeric()

isnumeric()’te, isdigit()’de doğru olan sayılara ek olarak, Unicode özellik değeri Numeric_Type olan sayılar da doğrudur.

Kesirler, Romen rakamları ve Çin rakamları da 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

Dizenin alfabetik olup olmadığını belirler:str.isalpha()

isalpha()’da, aşağıdakilerden birine sahip bir Unicode genel kategori özelliği doğrudur.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

Alfabe, Çince karakterler vb. doğru olacaktır.

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

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

Arap rakamları yanlıştır, ancak Çin rakamları aynı zamanda Çince karakterler oldukları için doğrudur; ancak Çin rakamlarındaki sıfırlar yanlıştı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

Romen rakamları yanlıştır.

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

Dizenin alfasayısal olup olmadığını belirleyin:str.isalnum()

isalnum()’da, şimdiye kadar listelenen aşağıdaki yöntemlerden herhangi birinde her karakterin doğru olması doğrudur.

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

Her karakter ayrı ayrı değerlendirilir, bu nedenle diğer tüm yöntemlerde yanlış olsa bile isalnum()’da harf ve sayı içeren bir dize doğru olacaktır.

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

Dizelerin ASCII karakterleri olup olmadığını belirler:str.isascii()

Python 3.7 isascii() eklendi. Dizedeki tüm karakterler ASCII karakterleri ise true değerini döndürür.

Rakam ve harflere ek olarak + ve – gibi semboller de doğrudur.

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

ASCII olmayan hiragana ve diğer karakterler yanlıştır.

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

Daha sonra göreceğimiz gibi, diğer yöntemlerden farklı olarak isascii() boş bir dizge için bile true değerini döndürür.

Boş dize kararı

isascii() için boş bir dizge doğrudur ve diğer yöntemler için yanlıştır.

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

Boş bir dize olup olmadığını belirlemek için bool() kullanın. Dönüş değeri, boş bir dize için false, aksi takdirde true olur.

print(bool(''))
# False

print(bool('abc123'))
# True

Dizelerin sayılara dönüştürülüp dönüştürülemeyeceğini belirleyin

Negatif veya kesirli değer dizileri, nokta veya eksi işareti içerir. Bu nedenle, isascii() dışındaki tüm yöntemler için sonuç yanlıştır.

isascii() için doğru olmasına rağmen, bir dizgenin sayısal bir değere dönüştürülüp dönüştürülemeyeceğini belirlemek için uygun değildir, çünkü başka semboller veya alfabetik karakterler içerse bile 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

Dizeler, float() ile kayan nokta sayılarına dönüştürülebilir. Dönüştürülemeyen dizeler için hata.

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 işleme ile, bir dize float() ile dönüştürülebildiğinde true döndüren bir işlev tanımlanabilir.

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

Virgülle ayrılmış bir sayının da doğru olduğunu belirlemek istiyorsanız, virgülü kaldırmak için replace() kullanın (boş bir dizeyle değiştirin).

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şluk sınırlamasını desteklemek istiyorsanız, replace() işlevini daha fazla kullanabilirsiniz.

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