مبحث casting و کار با رشته ها در زبان پایتون

مبحث casting و کار با رشته ها در زبان پایتون

مبحث casting

ممکن است در بعضی از مواقع بخواهید نوع یک متغیر را تغییر دهید. پایتون یک زبان برنامه نویسی شیء گرا است بنابراین با استفاده از کلاس ها data type هایش را مشخص می کند. به همین دلیل casting در پایتون از طریق توابع constructor انجام می شود:

  • ()int : اگر به این تابع یک literal داده شود (یعنی مقداردهی به صورت دستی انجام شود) از آن یک عدد صحیح می سازد اما اگر به آن یک عدد اعشاری بدهید آن را به سمت پایین گرد کرده و از آن یک عدد صحیح می سازد (مشخصا قسمت اعشار در هنگام گرد کردن حذف می شود). همچنین اگر رشته ای به این تابع داده شود که درون آن فقط عدد باشد، آن رشته را به عدد صحیح تبدیل می کند.
  • ()float : از عدد صحیح یا عدد اعشاری یا یک رشته (در صورتی که فقط شامل عدد باشد) عدد اعشاری می سازد.
  • ()str : از انواع داده های مختلف مانند عدد صحیح، عدد اعشاری و... رشته می سازد.

چند مثال برای تابع int:

x = int(1)
y = int(2.8)
z = int("3")
print(x)
print(y)
print(z)

خروجی:

1
2
3

چند مثال از تابع float:

x = float(1)
y = float(2.8)
z = float("3")
w = float("4.2")
print(x)
print(y)
print(z)
print(w)

خروجی:

1.0
2.8
3.0
4.2

چند مثال برای تابع str:

x = str("s1")
y = str(2)
z = str(3.0)
print(x)
print(y)
print(z)

خروجی:

s1
2
3.0

رشته ها در پایتون

String literal ها (یعنی رشته هایی که به صورت دستی نوشته شده باشند، نه اینکه حاصل یک عملیات باشند) در زبان پایتون می توانند با استفاده از single quotation یا double quotation تعریف شوند؛ بنابراین 'hello' با "hello" برابر است. برای نمایش این رشته ها می توانیم از تابع همیشگی print استفاده کنیم:

#You can use double or single quotes:

print("Hello")
print('Hello')

خروجی:

Hello
Hello

انتساب یک رشته به یک متغیر نیز کار بسیار راحتی است:

a = "Hello"

تنها کافی است که نام متغیر را با علامت = به رشته ی خود متصل کنید.

رشته های چند خطی

شما می توانید در زبان پایتون از متغیرهای چند خطی استفاده کنید. برای این کار استفاده از علامت """ (سه بار ") اجباری است. مثال:

a = """Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua."""
print(a)

خروجی:

Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.

البته تفاوتی ندارد که از """ یا ''' (علامت single quote یا double quote) استفاده کنید.

رشته ها، آرایه هستند!

باید به یاد داشته باشید که مانند بسیاری از زبان های برنامه نویسی دیگر، رشته ها در پایتون آرایه ای از بایت ها هستند که هر کدام نماینده ی یکی از کاراکترهای یونیکد است اما زبان پایتون هیچ data type ای برای تک کاراکترها ندارد بنابراین یک کاراکتر، یک رشته است که طول آن برابر با 1 می باشد. از آنجایی که رشته ها هم به نوعی آرایه هستند می توانید برای دسترسی به کاراکترهای مختلف آن ها از علامت براکت [] استفاده کنید؛ دقیقا مانند اعضای یک آرایه! به مثال زیر توجه کنید:

a = "Hello, World!"
print(a[1])

خروجی حرف e خواهد بود. به یاد داشته باشید که index ها از صفر شروع می شوند.

با همین مبنا اگر بخواهید طیفی از کاراکترها را برگردانید، می توانید از نوع نوشتار slice استفاده کنید؛ ابتدا index ابتدایی و سپس index نهایی را ذکر کرده (بین آن ها علامت دو نقطه باشد) سپس آن ها را درون براکت قرار دهید. بدین صورت قسمت مورد نظر شما جدا خواهد شد. به طور مثال در کد زیر می خواهیم کاراکترهای 2 تا 5 (خود 5 محاسبه نمی شود) را برگردانیم:

b = "Hello, World!"
print(b[2:5])

خروجی مقدار llo خواهد بود.

اگر مقدار index ابتدایی و انتهایی را به صورت عدد منفی بدهید، جداسازی از آخر رشته به اول آن صورت می گیرد. به طور مثال در کد زیر از کاراکتر 5 تا 1 را می خواهیم برگردانیم اما چون اعداد را منفی داده ایم شمارش از انتهای رشته شروع خواهد شد:

b = "Hello, World!"
print(b[-5:-2])

خروجی orl خواهد بود.

برای به دست آوردن طول رشته نیز میتوانید از تابع ()len استفاده کنید:

a = "Hello, World!"
print(len(a))

خروجی عدد 13 خواهد بود.

متدهای کار با رشته

زبان پایتون مانند زبان های دیگر برنامه نویسی دارای متدهایی برای کار با رشته ها است. معروف ترین و پر استفاده ترین آن ها عبارتند از:

  • ()strip
  • ()lower
  • ()upper
  • ()replace

تابع ()strip برای هر گونه فضای خالی (اسپیس) را از ابتدا یا انتهای رشته حذف می کند:

a = " Hello, World! "
print(a.strip())

خروجی !Hello, World (بدون هیچ اسپیسی در ابتدا یا انتها) خواهد بود.

تابع ()lower رشته را با حروف کوچک برمی گرداند:

a = "Hello, World!"
print(a.lower())

خروجی !hello, world خواهد بود (حروف W و H کوچک شده اند).

تابع ()upper دقیقا برعکس ()lower عمل می کند بنابراین:

a = "Hello, World!"
print(a.upper())

خروجی !HELLO, WORLD خواهد بود.

تابع ()replace یک رشته را به یک رشته ی دیگر تعویض می کند. مثال:

a = "Hello, World!"
print(a.replace("H", "J"))

خروجی !Jello, World خواهد بود.

تابع ()split نیز یک جدا کننده می گیرد و اگر این جداکننده را در رشته ی مورد نظر پیدا کند، آن رشته را از همانجا تقسیم می کند:

a = "Hello, World!"
b = a.split(",")
print(b)

خروجی به شکل زیر خواهد بود:

['Hello', ' World!']

جستجو در رشته

اگر بخواهیم بررسی کنیم که آیا یک کاراکتر یا رشته ی خاص درون یک رشته ی دیگر است، می توانیم از کلیدواژه های in و not in استفاده کنیم. به مثال های زیر دقت کنید:

txt = "The rain in Spain stays mainly in the plain"
x = "ain" in txt
print(x)

خروجی این کد true خواهد بود. چرا؟ ما گفته ایم آیا "ain" درون متغیر txt وجود دارد یا خیر. جواب قطعا بله است (در کلمه ی plain).

مثال بعدی:

txt = "The rain in Spain stays mainly in the plain"
x = "ain" not in txt
print(x)

خروجی این کد false خواهد بود. در این مثال دقیقا برعکس سوال بالا را پرسیده ایم (استفاده از not in).

اتصال رشته ها به هم

برای متصل کردن رشته ها به هم باید از اپراتور + استفاده کنید:

a = "Hello"
b = "World"
c = a + b
print(c)

خروجی عبارت HelloWorld خواهد بود. توجه کنید که بین hello و world هیچ اسپیسی وجود ندارد. اگر بخواهیم بین آن ها فاصله بیندازیم باید کد را به شکل زیر بنویسیم:

a = "Hello"
b = "World"
c = a + " " + b
print(c)

خروجی عبارت Hello World (با فاصله) خواهد بود.

هشدار: یادتان باشد که شما اجازه ندارید رشته ها و اعداد را با اپراتور + به هم متصل کنید.

age = 36
txt = "My name is John, I am " + age
print(txt)

کد بالا کاملا اشتباه است. بنابراین در جواب با خطایی شبیه به خطای زیر روبرو خواهید شد:

C:\Users\My Name>python demo_string_format_error.py
Traceback (most recent call last):
  File "demo_string_format_error.py", line 2, in <module>
    txt = "My name is John, I am " + age
TypeError: must be str, not int

اگر نیاز دارید که رشته ها و اعداد را به هم متصل کنید، بهتر است از متد ()format استفاده کنید. این تابع آرگومان های ارسالی را گرفته، آن ها را تبدیل به رشته کرده و به هم میچسباند و در آخر به جای {} قرار میدهد. مثال:

age = 36
txt = "My name is John, and I am {}"
print(txt.format(age))

خروجی کد بالا عبارت زیر است:

My name is John, and I am 36

شما می توانید به تعداد نامحدودی آرگومان به تابع ()format بدهید؛ این تابع آرگومان های پاس داده شده را به ترتیب به جای علامت های {} قرار می دهد. مشخصا شما مکان این علامت ها را تعیین می کنید:

quantity = 3
itemno = 567
price = 49.95
myorder = "I want {} pieces of item {} for {} dollars."
print(myorder.format(quantity, itemno, price))

خروجی جمله ی زیر خواهد بود:

I want 3 pieces of item 567 for 49.95 dollars.

برای اطمینان پیدا کردن از قرارگیری صحیح آرگومان ها در {} های مناسب می توانید از index آرگومان ها نیز استفاده کنید:

quantity = 3
itemno = 567
price = 49.95
myorder = "I want to pay {2} dollars for {0} pieces of item {1}."
print(myorder.format(quantity, itemno, price))

بدین ترتیب میتوانید دقیقا ترتیب هر کدام از آرگومان ها را خودتان تعیین کنید.

نکته: تمام متدهای کار با رشته در پایتون یک مقدار جدید ساخته و مقدار اصلی را تغییر نمی دهند.

تعداد متدهای کار با رشته ها در پایتون بسیار زیاد است. بنابراین نمی توانیم تمام آن ها را در این مقاله بگنجانیم. در صورت علاقه به مطالعه ی بیشتر به دو منبع زیر سری بزنید:

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری از مقدماتی تا پیشرفته با پایتون توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.