تحدد Python وتتحقق مما إذا كانت السلسلة رقمية أو أبجدية

اعمال

توفر Python العديد من طرق السلسلة لتحديد والتحقق مما إذا كان نوع السلسلة رقميًا أم أبجديًا.

يتم شرح كل طريقة بنموذج التعليمات البرمجية.

  • تحدد ما إذا كانت السلسلة رقمًا عشريًا:str.isdecimal()
  • تحديد ما إذا كانت السلسلة عبارة عن رقم:str.isdigit()
  • تحدد ما إذا كانت السلسلة حرفًا يمثل رقمًا أم لا:str.isnumeric()
  • تحدد ما إذا كانت السلسلة أبجدية:str.isalpha()
  • حدد ما إذا كانت السلسلة أبجدية رقمية:str.isalnum()
  • تحديد ما إذا كانت السلاسل أحرف ASCII أم لا:str.isascii()
  • حكم سلسلة فارغة
  • حدد ما إذا كان يمكن تحويل السلاسل إلى أرقام

بالنسبة إلى الطرق الأخرى غير isascii () ، تعتبر السلسلة التي تحتوي على سلسلة فارغة والرموز التالية وما إلى ذلك خاطئة.

  • ,
  • .
  • -

-1.23 ، إلخ ، كقيمة عددية موضحة في نهاية هذا القسم.

يمكن استخدام التعبيرات العادية لتحديد أنواع الأحرف بشكل أكثر مرونة ولاستخراج أنواع الأحرف ذات الصلة.

راجع المقالة التالية للحصول على مزيد من المعلومات حول كيفية تحديد ما يلي

  • كيفية تحويل سلسلة رقمية (str) إلى رقم (int ، float)
  • كيفية تحديد الأحرف الكبيرة والصغيرة

تحدد ما إذا كانت السلسلة رقمًا عشريًا:str.isdecimal()

في isdecimal () ، يكون هذا صحيحًا إذا كانت جميع الأحرف عبارة عن أرقام عشرية ، أي أحرف في الفئة العامة Nd من Unicode. كما ينطبق أيضًا على الأرقام العربية كاملة العرض ، وما إلى ذلك.

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

إذا كان يحتوي على رمز مثل علامة الطرح أو نقطة ، فهو خطأ. على سبيل المثال ، إذا كنت تريد تحديد أن سلسلة مثل “-1.23” هي قيمة رقمية ، فيمكنك استخدام معالجة الاستثناءات. هذا موضح في نهاية هذا القسم.

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

تحديد ما إذا كانت السلسلة عبارة عن رقم:str.isdigit()

في isdigit () ، بالإضافة إلى الأرقام الصحيحة في isdecimal () ، فإن الأرقام التي تكون قيمة خاصية Unicode الخاصة بها Numeric_Type هي Digit أو Decimal صحيحة أيضًا.

على سبيل المثال ، الرقم المرتفع الذي يمثل مربعًا خطأ في isdecimal () ولكنه صحيح في isdigit ().

  • رقم مرتفع يمثل المربع
    • ²
    • \ 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

تحدد ما إذا كانت السلسلة حرفًا يمثل رقمًا أم لا:str.isnumeric()

في isnumeric () ، بالإضافة إلى الأرقام الصحيحة في isdigit () ، فإن الأرقام التي تكون قيمة خاصية Unicode فيها Numeric_Type رقمية صحيحة أيضًا.

الكسور والأرقام الرومانية والأرقام الصينية صحيحة أيضًا.

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

تحدد ما إذا كانت السلسلة أبجدية:str.isalpha()

في isalpha () ، تكون خاصية فئة Unicode العامة مع أحد العناصر التالية صحيحة.

  • Lm
  • Lt
  • Lu
  • Ll
  • Lo

ستكون الأبجدية والأحرف الصينية وما إلى ذلك صحيحة.

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

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

الأرقام العربية خاطئة ، لكن الأرقام الصينية صحيحة لأنها أحرف صينية أيضًا ؛ ومع ذلك ، فإن الأصفار في الأرقام الصينية خاطئة.

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

الأرقام الرومانية خاطئة.

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

حدد ما إذا كانت السلسلة أبجدية رقمية:str.isalnum()

في isalnum () ، يكون صحيحًا إذا كان كل حرف صحيحًا في أي من الطرق التالية المدرجة حتى الآن.

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

يتم تقييم كل حرف على حدة ، لذا فإن السلسلة التي تحتوي على أحرف وأرقام ستكون صحيحة في isalnum () حتى لو كانت خاطئة في جميع الطرق الأخرى.

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

تحديد ما إذا كانت السلاسل أحرف ASCII أم لا:str.isascii()

أضاف Python 3.7 isascii (). ترجع صحيحًا إذا كانت جميع الأحرف في السلسلة أحرف ASCII.

بالإضافة إلى الأرقام والحروف ، فإن الرموز مثل + و – صحيحة أيضًا.

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

هيراغانا غير ASCII والشخصيات الأخرى خاطئة.

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

كما سنرى بعد ذلك ، على عكس الطرق الأخرى ، فإن isascii () ترجع صحيحًا حتى بالنسبة للسلسلة الفارغة.

حكم سلسلة فارغة

السلسلة الفارغة هي true لـ isascii () و 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

استخدم bool () لتحديد ما إذا كانت سلسلة فارغة. القيمة المعادة خاطئة لسلسلة فارغة وصحيحة خلاف ذلك.

print(bool(''))
# False

print(bool('abc123'))
# True

حدد ما إذا كان يمكن تحويل السلاسل إلى أرقام

تحتوي سلاسل القيمة السالبة أو الجزئية على فترات أو علامات ناقص. لذلك ، تكون النتيجة خاطئة لجميع العمليات باستثناء isascii ().

على الرغم من أن هذا صحيح بالنسبة لـ isascii () ، إلا أنه غير مناسب لتحديد ما إذا كان يمكن تحويل سلسلة إلى قيمة رقمية ، نظرًا لأنها صحيحة حتى لو كانت تحتوي على رموز أو أحرف أبجدية أخرى.

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

يمكن تحويل السلاسل إلى أرقام فاصلة عائمة باستخدام عدد عشري (). خطأ في السلاسل التي لا يمكن تحويلها.

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

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

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

مع معالجة الاستثناء ، يمكن تعريف دالة ترجع صحيحًا عندما يمكن تحويل سلسلة باستخدام 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

إذا كنت تريد تحديد أن الرقم المفصول بفاصلة صحيح أيضًا ، فاستخدم استبدال () لإزالة الفاصلة (استبدلها بسلسلة فارغة).

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

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

إذا كنت تريد دعم ترسيم المسافات ، يمكنك استخدام الاستبدال () بشكل أكبر.

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