پایتون تعیین می کند و بررسی می کند که آیا یک رشته عددی است یا الفبایی

کسب و کار

پایتون چندین روش رشته ای را برای تعیین و بررسی عددی یا الفبایی بودن نوع رشته ارائه می کند.

هر روش با نمونه کد توضیح داده شده است.

  • تعیین می کند که آیا یک رشته یک رقم اعشاری است:str.isdecimal()
  • تعیین اینکه آیا یک رشته یک عدد است:str.isdigit()
  • تعیین می کند که آیا یک رشته کاراکتری است که یک عدد را نشان می دهد یا خیر:str.isnumeric()
  • الفبایی بودن رشته را تعیین می کند:str.isalpha()
  • الفبایی بودن رشته را تعیین کنید:str.isalnum()
  • تعیین می کند که آیا رشته ها کاراکترهای ASCII هستند یا خیر:str.isascii()
  • قضاوت رشته خالی
  • تعیین کنید که آیا رشته ها می توانند به عدد تبدیل شوند یا خیر

برای متدهایی غیر از isascii()، رشته ای که دارای یک رشته خالی، نمادهای زیر و غیره است، نادرست است.

  • ,
  • .
  • -

-1.23 و غیره به عنوان یک مقدار عددی در انتهای این قسمت توضیح داده شده است.

از عبارات منظم می توان برای تعیین انعطاف پذیرتر انواع کاراکترها و استخراج انواع کاراکترهای مربوطه استفاده کرد.

برای اطلاعات بیشتر در مورد نحوه تعیین موارد زیر به مقاله زیر مراجعه کنید

  • نحوه تبدیل رشته عددی (str) به عدد (int، float)
  • نحوه تشخیص حروف بزرگ و کوچک

تعیین می کند که آیا یک رشته یک رقم اعشاری است:str.isdecimal()

در isdecimal()، اگر همه کاراکترها اعداد اعشاری باشند، درست است، یعنی کاراکترهایی در دسته کلی Nd یونیکد. برای اعداد عربی تمام عرض و غیره نیز صادق است.

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() true هستند، اعدادی که مقدار خاصیت Unicode آنها Numeric_Type عددی یا اعشاری است نیز درست هستند.

به عنوان مثال، یک عدد فوق‌نویس که یک مربع را نشان می‌دهد در isdecimal() false است اما در isdigit() true است.

  • عدد بالانویس نشان دهنده مربع
    • ²
    • \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 Numeric است نیز درست است.

کسری، اعداد رومی، و اعداد چینی نیز درست است.

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()، یک ویژگی دسته بندی عمومی یونیکد با یکی از موارد زیر درست است.

  • 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() درست خواهد بود، حتی اگر در سایر روش‌ها false باشد.

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()

پایتون 3.7 () isascii را اضافه کرد. اگر همه کاراکترهای رشته کاراکترهای ASCII باشند، مقدار true را برمی گرداند.

علاوه بر اعداد و حروف، علائمی مانند + و – نیز صادق هستند.

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() true و برای متدهای دیگر 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() استفاده کنید. مقدار بازگشتی برای یک رشته خالی false و در غیر این صورت درست است.

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

رشته ها را می توان با float() به اعداد ممیز شناور تبدیل کرد. خطا برای رشته هایی که قابل تبدیل نیستند.

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() تبدیل کرد، مقدار true را برمی گرداند.

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

اگر می خواهید تعیین کنید که یک عدد جدا شده با کاما درست است، از ()replace برای حذف کاما استفاده کنید (آن را با یک رشته خالی جایگزین کنید).

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

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

اگر می‌خواهید از تعیین محدوده فضای سفید پشتیبانی کنید، می‌توانید از ()replace بیشتر استفاده کنید.

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