در پروژههای مختلف نیاز داریم متغیرها و رشتههای متنی را با هم ترکیب کنیم. به کمک فرمت کردن رشته در پایتون میتوانیم برای چاپ متغیر بین رشته متنی یک ساختار منظم ایجاد کنیم. این ساختارها به خوانایی بهتر کد کمک میکند و البته اصلاح و توسعه را بهبود میدهد. در این آموزش با ۳ روش فرمت دهی رشته متنی پایتون آشنا میشویم.
دو متغیر به نامهای name و score داریم؛ اولی نام فرد و دومی رتبه یا نمره او را مشخص میکند. فرض کنید نام فرد omid و نمره او 90 است و میخواهیم متنی مشابه زیر در خروجی چاپ کنیم:
omid score is: 90
برای چاپ متنها در کنسول از تابع print()
استفاده میکنیم. اولین روش استفاده از ترفندهای پرینت در پایتون برای متصل کردن متغیر و رشته و چاپ آن در خروجی است. در نتیجه کدی شبیه زیر داریم:
name = "omid"
score = 90
print( name + "'s score is:", score )
اگر تعداد متغیرها بیشتر شود یا بخواهیم یک رشته متنی پیچیدهتری ایجاد کنیم، این روش چندان جالب به نظر نمیرسد! بنابراین از روشهای فرمت دهی متن استفاده میکنیم.
روشهای فرمت دهی متن در پایتون
علاوه بر اینکه استفاده مستقیم از متغیرها در رشته جالب نیست، گاهی اوقات میتواند به خوانایی کد و فرآیند اصلاح و توسعه آن لطمه بزند! پس همواره سعی کنید از ویژگیهای زبانهای مختلف برای بهبود مهارت برنامهنویسی خود استفاده کنید.
برای فرمت دهی رشته در پایتون سه روش داریم:
- استفاده از متد
format()
روی رشته - استفاده از روش f و قرار دادن آن قبل از تعریف string
- استفاده از روش
%-formatting
که کمی قدیمیتر است.
در ادامه آموزش این سه روش را با هم بررسی میکنیم.
فرمت دهی رشته پایتون با format()
متد str.format()
در پایتون برای نظم دادن به رشتههای طولانی و با متغیرهای زیاد استفاده میشود. البته این به آن معنا نیست که نتوان از آن برای یک رشته کوتاه یک متغیری هم استفاده کرد.
این متد روی متغیرهای از نوع رشته متنی صدا زده میشود. منظور از str نوع دادهای رشته در پایتون است. از این متد برای آمادهسازی رشته استفاده میشود.
برای استفاده از format()
باید جایگاه متغیرها در رشته را با علامت {}
(آکولاد باز و بسته) تعیین کنیم. همان مثال اول را در نظر بگیرید. در رشته متنی نهایی، دو متغیر داشتیم. پس رشته را به صورت زیر تغییر میدهیم:پ
txt = "{}'s score is: {}"
حال کافی است روی رشته ساختاریافته، متد فرمت را صدا زده و متغیرها را به آن بدهیم.
txt = "{}'s score is: {}".format( name, score )
حال اگر مقدار متغیر txt را در خروجی چاپ کنیم، نتیجه زیر را خواهیم داشت:
print(txt)
# omid's score is: 90
کاری که ما انجام دادیم، سادهترین حالت استفاده از شیوه فرمت دهی رشته در پایتون بود. در این حالت جایگاه متغیرها از سمت چپترین جایگاه در متن شمارش شده و معادل آن را باید به عنوان ورودی تابع format()
تعیین کنیم.
تعیین ایندکس متغیر در متد فرمت
برای اینکه ایندکس هر متغیر را در رشته مشخص کنیم، کافی است درون آکولادها، ایندکس مورد نظر را تعیین کنیم. کد زیر، دقیقاً همان ساختار پیشفرض رشته فرمت شده بدون تعیین اندیسها است
txt = "{0}'s score is: {1}".format( name, score )
در قطعه کد زیر، ایندکس متغیرها را جابجا کردم و همانطور که در خروجی میبینید، ترتیب فراخوانی و قرار دادن متغیرها در رشته جابجا شده است.
txt = "{1}'s score is: {0}".format( name, score )
print(txt)
# 90's score is: omid
نام برای متغیرهای درون رشته متنی
علاوه بر شماره اندیس، جایگاه متغیرها را میتوانیم به کمک نامهای مورد نظرمان تعیین کنیم. دقیقاً مثل اینکه در فرمت دهی رشته متنی با پایتون، برای هر جایگاه یک نام متغیر تعیین کردهایم و در هنگام صدا زدن متد format()
برای آن متغیرها مقدار تعیین میکنیم.
در قطعه کد زیر، ابتدا یک لیست پایتون به نام data برای تعیین مقادیر تعریف کردهام. میتوانستیم مثل قبل از متغیرهای تکی، یا سایر ساختمان دادهها استفاده کنیم. سپس برای هر جایگاه یک نام انتخاب کرده و از آنها در هنگام صدا زدن format()
استفاده میکنم.
data = ["sara", 80]
txt = "{name}'s score is: {score}".format( name=data[0], score=data[1] )
# sara's score is: 80
دقت کنید که در هنگام تعیین ورودیهای تابع فرمت رشته حتماً باید نام جایگاه مورد نظر خود را تعیین کنیم.
فرمت کردن رشتهها با f-string
این روش بسیار شبیه به روش قبلی است؛ یعنی به جای متغیرها در رشته متنی، از آکولادها استفاده میکنیم. این روش از پایتون نسخه 3.6 اضافه شده است.
برای فرمت کردن رشته پایتون با f کافی است قبل از رشته متنی حرف f را قرار داده و نام اصلی متغیرهای سراسری را مستقیماً درون {}
قرار دهیم. برای درک بهتر به مثال زیر توجه کنید:
name = "sara"
score = 80
txt = f"{name}'s score is: {score}"
print(txt)
# sara's score is: 80
حرفی که قبل از شروع رشته متنی قرار میدهیم میتواند کوچک (F
) یا بزرگ (F
) باشد؛ نتیجه هیچ تفاوتی نخواهد داشت.
فرض کنید لیستی از سه دیکشنری در پایتون داریم. در هر دیکشنری نام و نمره یک نفر نوشته شده است. به کمک یک حلقه for، نمره این سه نفر را در خروجی چاپ میکنیم:
scores = [{'name': 'sara' , 'score': 80},
{'name': 'negar', 'score': 95},
{'name': 'omid' , 'score': 90}]
for student in scores:
print( f"{student['name']}'s score is: {student['score']}" )
# Result:
# sara's score is: 80
# negar's score is: 95
# omid's score is: 90
فرمت دهی رشته متنی پایتون با %
روش سوم را میتوان قدیمیترین روش برای فرمت کردن ساختار متن در پایتون دانست. البته این به آن معنا نیست که این روش منسوخ شده یا کارایی ندارد. در بسیاری از پروژهها از این نوع فرمت دهی استفاده میشود.
برای این کار، ابتدا باید محل و نوع متغیرها درون متن را مشخص کنیم. این کار به کمک علامت درصد (%
) و یک حرف انگلیسی که نشاندهنده نوع مقدار متغیر است انجام میشود. پس از اتمام رشته متنی، با قرار دادن %
مقادیر مورد نظر را به رشته میدهیم.
به ساختار تعریف شده در کد زیر توجه کنید:
name = "omid"
score = 90
txt = "%s's score is: %d" % (name, score)
print(txt)
# omid's score is: 90
در این کد، دو جایگاه %s
و %d
در string تعیین شده و بعد از پایان رشته (بعد از علامت "
) با قرار دادن درصد، مقادیر مورد نظرمان را برای فرمتدهی به متن دادهایم.
اگر بخواهیم فقط یک متغیر در رشته تعریف کردیم، نیازی به استفاده از تاپل برای ارجاع دادن مقدارش نداریم و میتوانیم آن را بعد از گذاشتن % مقداردهی کنیم.
site = "https://khodneviis.ir/@winlearn"
msg = "You can learn python on %s site!" % site
print(msg)
# You can learn python on winlearn site!
برای تعیین نوع متغیر سه نوع اصلی داریم که در جدول زیر مشخص شدهاند:
علامت | نوع مقدار |
---|---|
%s | مقادیر متنی |
%d | مقادیر صحیح |
%f | مقادیر اعشاری |
امیدوارم پس از آموزش فرمتدهی رشته متنی در پایتون بتوانید متغیرهای خود را به صورت خواناتر در کدهایتان قرار داده تا کم کم تبدیل به یک برنامهنویس خوب و موفق شوید