این حالت نمایش چند صفحه ای قابل پرینت این قسمت می‌باشد. برای پرینت کلیک کنید..

بازگشت به حالت نمایش عادی این قسمت.

متغیّرها و انواع ساده‌ی داده‌ها

در این فصل در مورد انواع مختلفی از داده‌ها خواهید آموخت که می‌توانید با آن‌ها در برنامه‌های پایتون کار کنید. همچنین چگونگی استفاده از متغیّرها را برای نمایش داده در برنامه‌های خود یاد می‌گیرید.

1 - هنگام اجرای hello_world.py در واقع چه اتّفاقی می‌افتد؟

بیاید به آن‌چه پایتون هنگام اجرای hello_world.py انجام می‌دهد نگاهی دقیق‌تر بیاندازیم. برخلاف تصوّر ما پایتون حتی هنگام اجرا کردن یک برنامه‌ی ساده هم کارهای قابل توجّهی انجام می‌دهد:

1
print("Hello Python world!")

اجرای این کد چنین خروجی‌ای تولید می‌کند:

1
Hello Python world!

هنگامی که فایل hello_world.py را اجرا می‌کنید، پسوند .py مشخّص می‌کند که این فایل یک برنامه‌ی پایتون است. پس ویرایشگر متنی این فایل را از طریق مفسّر پایتون اجرا می‌کند. این مفسّر برنامه را می‌خواند و مشخّص می‌کند که هر واژه در برنامه چه معنی‌ای می‌دهد. برای مثال هنگامی که مفسّر به واژه‌ی print با دو پرانتزِ پس از آن می‌رسد، هر آن‌چه‌که داخل پرانتزها قرار دارد روی صفحه چاپ می‌کند.

همچنان که به نوشتن برنامه ادامه می‌دهید ویرایشگر شما بخش‌های مختلف برنامه را به روش‌های مختلف هایلایت و رنگ‌آمیزی می‌کند. برای مثال تشخیص می‌دهد که print() نام یک تابع است و آن را با یک رنگ نمایش می‌دهد. همچنین تشخیص می‌دهد که “Hello Python world!” کد پایتون نیست و آن را با رنگِ دیگری نمایش می‌دهد. این ویژگی برجسته‌سازی یا هایلایت نحوی نامیده می‌شود و برای شروعِ برنامه‌نویسی بسیار سودمند خواهد بود.

2 - متغیّرها

حال بیایید از یک متغیّر در hello_world.py استفاده کنیم. یک خط به ابتدای فایل خود بیفزایید و خط دوم را این‌گونه تغییر دهید:

1
2
message = "Hello Python world!"
print(message)

برنامه را اجرا کنید تا ببینید چه رخ می‌دهد. باید خروجی‌ای مشابه قبل ببینید:

1
Hello Python world!

یک متغیّر به نام message اضافه کرده‌ایم. هر متغیّر با یک مقدار در ارتباط است که اطّلاعات مرتبط با آن متغیّر را در بر دارد. در این مورد مقدارْ همان متنِ “Hello Python world!” است.

اضافه کردن یک متغیّر کارِ مفسّر پایتون را کمی سخت‌تر می‌کند. هنگامی که مفسّر خط اوّل را پردازش می‌کند متغیّر message را به متن “Hello Python world!” ارتباط می‌دهد و زمانی که به خطّ دوم رسید مقداری را که به message اختصاص یافته چاپ می‌کند.

حال با تغییر دادن hello_world.py برای چاپ پیام دیگری، این برنامه را تغییر می‌دهیم. یک خطّ خالی به فایل خود اضافه کنید و این دو خطّ جدید را اضافه کنید:

1
2
3
4
message = "Hello Python world!"
print(message)
message = "Hello Python Crash Course world!"
print(message)

اکنون با اجرای hello_world.py دو خطّ زیر را در خروجی می‌بینید:

1
2
Hello Python world!
Hello Python Crash Course world!

در برنامه‌ی خود می‌توانید مقدار یک متغیّر را هر زمانی تغییر دهید و پایتون همیشه مقدار فعلی و جدید آن را در نظر خواهد گرفت.

نام‌گذاری و به‌کار‌گیری مغیّرها

هنگام استفاده از متغیّرها در پایتون باید تعداد اندکی قانون و راهنمایی را رعایت کنید. تخطّی از برخی از این قانون‌ها موجب بروز خطا خواهند شد. راهنمایی‌ها به شما کمک می‌کند تا کدی بنویسید که راحت‌تر قابل خواندن و فهمیدن باشد. قوانین زیر را در رابطه با متغیّرها حتماً به خاطر داشته باشید:

  • نام متغیّرها تنها می‌تواند شامل حروف، اعداد و زیر‌خط باشند. نام‌ها می‌توانند با حرف یا زیر‌خط و نه با عدد آغاز شوند. برای مثال می‌توانید یک متغیّر را message_1 بنامید امّا نام‌گذاری 1_message ممکن نیست.

  • گذاشتن فاصله در نام متغیّرها مجاز نیست امّا برای فاصله‌گذاری بین چند واژه در نام متغیّرها می‌توانید از زیر‌خط استفاده کنید. برای مثال greeting_message مجاز است امّا greeting message موجب خطا می‌شود.

  • از به‌کارگیری کلیدواژگان و نام توابع پایتون به عنوان نام متغیّر پرهیز کنید. به بیان دیگر از واژگانی که پایتون برای اهداف خاص برنامه‌نویسی در نظر گرفته، مانند print، برای نام‌گذاری استفاده نکنید. (ن.ک «کلیدواژگان و توابع داخلی پایتون» ص ***)

  • نام متغیّرها بهتر است کوتاه امّا گویا باشند. برای مثال name از n و student_name از s_n و name_length از length_of_persons_name بهتر است.

  • هنگام استفاده از حرف کوچک l (اِل) و حرف بزرگ O دقّت کنید چون ممکن است با اعداد 1 و 0 اشتباه گرفته شوند.

ممکن است یادگیریِ روشِ ایجاد نام‌های مناسب برای متغیّرها کمی به تمرین نیاز داشته باشد، به ویژه زمانی که برنامه‌های شما جذّاب‌تر و پیچیده‌تر می‌شوند. هر چه برنامه‌های بیشتری بنویسید و کدهای دیگران را بیشتر بخوانید در یافتن نام‌های معنادار پیشرفت حاصل خواهید کرد.

نکته
بهتر است متغیّرهای پایتون را با حروف کوچک بنویسید. استفاده از حروف بزرگ موجب خطا نمی‌شود امّا به‌کارگیری آن‌ها در نام متغیّرها معنای خاصّی دارد که در فصل‌های پایانی به آن خواهیم پرداخت.

پرهیز از نام‌گذاری اشتباه متغیّرها

هر برنامه‌نویسی اشتباه می‌کند و بیشتر آن‌ها هر روزه مرتکب اشتباه می‌شوند. هرچند برنامه‌نویسان خوب هم ممکن است خطا کنند امّا در عین حال می‌دانند چگونه به درستی آن را رفع کنند. اجازه دهید به خطایی که احتمالاً به زودی مرتکب می‌شوید و روش برطرف کردن آن نگاهی بیندازیم.

در اینجا عمداً برنامه‌ای می‌نویسیم که خطا ایجاد کند. در کد زیر واژه‌ی mesage که پررنگ نشان داده‌شده غلط املایی دارد:

1
2
message = "Hello Python Crash Course reader!"
print(mesage)

هنگامی که در برنامه‌ای خطا رخ می‌دهد مفسّر پایتون تمام تلاش خود را می‌کند تا محل وقوع آن را پیدا کند. زمانی که برنامه به درستی اجرا نمی‌شود مفسّر یک traceback ارائه می‌کند. هنگامی که مفسّر کد شما را اجرا می‌کند و در جایی به مشکل می‌خورد، Traceback پیشینه‌ای از مشکل و محلّ وقوع آن را ذخیره می‌کند. اینجا نمونه‌ای از traceback می‌بینیم که پس از اجرای برنامه با نامِ غلطِ متغیّر ایجاد می‌شود:

1
2
3
4
Traceback (most recent call last):
   File "hello_world.py", line 2, in <module>
print(mesage)
NameError: name 'mesage' is not defined

خروجی خط ۲ وقوع خطایی را در خطِّ دومِ فایلِ hello_world.py گزارش می‌دهد. مفسّرْ خطِ ۳ را برای کمک به یافتن سریع‌تر خطا و خط ۴ را برای بیان نوع خطایی که پیدا کرده تولید می‌کند. در این مورد مفسّر به خطای name error برخورده و اعلام می‌کند که متغیّر mesage که قرار است چاپ شود، قبلاً جایی تعریف نشده است. پایتون نمی‌تواند نامی را که به غلط ارائه شده تشخیص دهد. خطای نام‌گذاری معمولاً به این معنی است که یا مقدار متغیّر را پیش از به‌کارگیری آن تعیین نکرده‌ایم یا در وارد کردن نام متغیّر مرتکب اشتباه املایی شده‌ایم.

می‌دانیم که در این کد و در خطِ دوم حرف s را در نام متغیّر message جاانداخته‌ایم. مفسّر پایتون کد شما را از لحاظ املایی بررسی نمی‌کند امّا مطمئن می‌شود که متغیّرها همواره به درستی نوشته شده‌اند. برای مثال ببینید اگر واژه‌ی message را یک جای دیگر برنامه هم اشتباه بنویسیم چه رخ می‌دهد:

1
2
mesage = "Hello Python Crash Course reader!"
print(mesage)

اینجا برنامه به درستی اجرا می‌شود!

1
Hello Python Crash Course reader!

زبان‌های برنامه‌نویسی گرچه سخت‌گیرند امّا به درست‌ یا غلط نوشتن واژگان اهمّیّتی نمی‌دهند. در نتیجه نیازی نیست که املا و دستور زبان انگلیسی را هنگام نام‌گذاری متغیّرها و نوشتن کد در نظر بگیرید.

بسیاری از خطاهای برنامه‌نویسی غلط‌های املایی ساده و یک‌کاراکتری در خطّی از برنامه هستند. اگر زمان زیادی را صرف پیدا کردن چنین خطاهایی می‌کنید بدانید که با بسیاری دیگر همدردید. بسیاری از برنامه‌نویسان مجرّب و مستعد ساعت‌ها وقت صرف شکار چنین خطاهای کوچکی می‌کنند. سخت نگیرید و از آن‌ها بگذرید و بدانید که چنین خطاهایی در دوران برنامه‌نویسی شما بسیار رخ خواهد داد.

متغیّرها برچسب هستند

گاهی متغیّرها را مانند جعبه‌ای در نظر می‌گیرند که مقادیر را در آن‌ها ذخیره می‌کنید. دفعات اوّلی که از متغیّرها استفاده می‌کنید چنین طرز نگاهی سودمند است امّا این روشی دقیق برای بیان نحوه‌ی نمایش داخلی متغیّرها در پایتون نیست. بهتر است به متغیّرها به چشم برچسب‌هایی نگاه کنید که به مقادیر مختلف می‌زنید. همچنین می‌توانید بگویید که متغیّرها به مقدار مشخّصی اشاره می‌کنند.

این تمایز احتمالاً در برنامه‌های آغازین شما خیلی مهم نیست امّا بهتر است آن را زودتر فرابگیرید. ممکن است جایی به رفتار غیرمنتظره‌ی یک متغیّر بربخورید و درک صحیح و دقیق چگونگی کارکرد متغیّرها به تشخیص آنچه در برنامه رخ می‌دهد کمک می‌کند.

نکته
بهترین راه فهمیدن مفاهیم جدید برنامه‌نویسی به کار بردن آن‌ها در یک برنامه است. اگر هنگام انجام تمرین‌های این کتاب به مشکل برخوردید، ابتدا آن را رها کنید و به کار دیگری بپردازید. اگر پس از پرداختن دوباره مشکل حل نشد بخش‌های مرتبط با آن را در کتاب مرور کنید. اگر باز هم به کمک نیاز داشتید به توصیه‌های موجود در پیوست پ مراجعه کنید

خودآزمایی

برای هر تمرین یک برنامه‌ی جداگانه بنویسید. هر برنامه را با نامی ذخیره کنید که مطابق قواعد استاندارد پایتون است، از حروف کوچک و زیرخط استفاده کنید. برای مثال simple_message.py یا simple_messages.py.

Simple Message

پیامی به یک متغیّر نسبت دهید و سپس آن را چاپ کنید.

Simple Messages

پیامی به یک متغیّر نسبت دهید و آن را چاپ کنید. سپس مقدار متغیّر را به پیام جدیدی تغییر دهید و پیام جدید را چاپ کنید.

3 - رشته‌ها

از آن‌جایی‌که بیشتر برنامه‌ها انواعی از داده را تعریف و جمع‌آوری می‌کنند و سپس روی آن‌ها عملیّاتی انجام می‌دهند، دسته‌‌بندی انواع مختلف داده سودمند است. اوّلین نوع داده‌ای که بررسی می‌کنیم رشته‌ها هستند. رشته‌ها در نگاه اوّل ساده به نظر می‌آیند امّا می‌توانید آن‌ها را به روش‌های مختلف به کارگیرید.

رشته دنباله‌ای از حروف یا کاراکترها است. در پایتون هر آن‌چه داخل علامت نقل قول باشد رشته در نظر گرفته می‌شود و می‌توانید مانند زیر علامت نقل قول تکی یا دوتایی را دور رشته قرار دهید:

1
2
"This is a string."
'This is also a string.'

این آزادی عمل در به‌کارگیری علامت‌های نقل قول کمک می‌کند تا به راحتی از علامت‌های نقل قول و آپستروفی در رشته‌های خود استفاده کنید:

1
2
3
'I told my friend, "Python is my favorite language!"'
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."

اکنون چند روش استفاده از رشته‌ها را بررسی می‌کنیم.

تغییر بزرگ و کوچکی حروف در یک رشته به کمک متدها

یکی از ساده‌ترین کارهای انجام با با رشته‌ها تغییر دادن وضعیت بزرگ و کوچکی حروف در کلمات آن است. به کد زیر نگاه کنید و سعی کنید آن‌چه را که رخ می‌دهد شرح دهید:

1
2
name = "ada lovelace"
print(name.title())

فایل را با نام name.py ذخیره و آن را اجرا کنید. باید چنین خروجی‌ای را ببینید:

1
Ada Lovelace

در این مثال متغیّر name به رشته‌ای با حروف آغازین کوچک “ada lovelace” اشاره می‌کند. هنگام فراخوانی print، متدِ title() پس از متغیّر آمده است. متد عملی است که پایتون می‌تواند روی قطعه‌ای از داده انجام دهد. نشانه‌ی نقطه (.) پس از name در name.title() به پایتون می‌گوید که متد title() را روی متغیر name اعمال کند. پس از هر متد یک جفت پرانتز می‌آید زیرا متدها گاهی به اطّلاعات بیشتری برای انجام کار خود نیاز دارند. چنین اطّلاعاتی داخل این پرانتزها قرار داده می‌شوند. تابع title() به هیچ اطّلاعات اضافه‌ای نیاز ندارد در نتیجه پرانتزها خالی مانده‌اند.

متد title() هر کلمه را به حالت عنوان درمی‌آورد که در آن هر واژه با حروف بزرگ آغاز می‌شود. زمانی که به نام به عنوان نوعی اطّلاعات نگاه می‌کنیم، کاربرد چنین متدی آشکار می‌شود. برای مثال ممکن است از برنامه‌ی خود بخواهید تمام مقادیر ورودی مانند Ada, ADA و ada را یک نام در نظر بگیرد و همه‌ی آن‌ها را به شکل Ada نمایش دهد.

تعدادی متد سودمند دیگر هم برای تغییر وضعیّت بزرگی و کوچکی حروف وجود دارد. مثلاً می‌توانید تمام حروف یک رشته را به حروف بزرگ یا کوچک تبدیل کنید:

1
2
3
name = "Ada Lovelace"
print(name.upper())
print(name.lower())

خروجی زیر مشاهده خواهد شد:

1
2
ADA LOVELACE
ada lovelace

متد lower() به ویژه هنگام ذخیره‌سازی اطّلاعات سودمند است. در بسیاری از موارد شما نمی‌خواهید به حروف بزرگ و کوچکی که کاربر وارد کرده اعتماد کنید، پس پیش از ذخیره کردن تمام حروف اطّلاعات ورودی را به حروف کوچک تبدیل می‌کنید. پس از آن هر زمان که خواستید اطّلاعات را نمایش دهید از حالتی استفاده می‌کنید که بیشتری معنا را برای هر رشته دارد.

به‌کارگیری متغیّرها در رشته‌ها

مواردی پیش می‌آید که می‌خواهید از مقدار یک متغیّر در داخل یک رشته استفاده کنید. برای مثال دو متغیّر دارید که یکی نام کوچک و دیگر نام خانوادگی را نمایش می‌دهند و می‌خواهید این دو مقدار را با هم ترکیب کنید تا نام و نام خانوادگی یک نفر را بیان کنید:

1
2
3
4
first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
print(full_name)

برای وارد کردن مقدار یک متغیّر داخل یک رشته، حرف f را مانند ۳ درست پیش از علامت نقل قول آغازین قرار دهید. دور نام یا نام‌های هر متغیّری که داخل رشته وارد می‌شود یک آکُلاد قرار دهید. پایتون هنگام نمایش رشته هر متغیّر را با مقدار آن جایگزین می‌کند.

به این رشته‌ها f-string می‌گویند. f سرواژه‌ی format است، زیرا پایتون این رشته‌ها را با جایگزینیِ نامِ متغیّرهای داخلِ هر آکُلاد با مقدارِ آن، قالب‌بندی می‌کند. خروجی کد قبلی به شکل زیر است:

1
ada lovelace

با f-stringها کارهای زیادی می‌توانید انجام دهید.مثلاً می‌توانید با اطَلاعاتِ یک متغیّر پیام‌های کاملی بسازید، مانند زیر:

1
2
3
4
first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
print(f"Hello, {full_name.title()}!")

در پیامی که برای تبریک گفتن به شخص ساخته می‌شود نام کامل او آورده می‌شود ۴. متد title() حروف اوّل نام کامل را بزرگ می‌کند. این کد پیامی ساده امّا با قالبی زیبا تولید می‌کند:

1
Hello, Ada Lovelace!

به جز این می‌توانید از f-stringها برای تولید یک پیام و انتساب کلّ آن به یک متغیّر استفاده کنید:

1
2
3
4
5
first_name = "ada"
last_name = "lovelace"
full_name = f"{first_name} {last_name}"
message = f"Hello, {full_name.title()}!"
print(message)

همانند کد قبلی این کد هم پیام Hello, Ada Lovelace! را نمایش می‌دهد امّا این بار با قرار دادن پیام در یک متغیّر خط ۱ فراخوانی تابع نهاییprint() را بسیار ساده‌تر کردیم. خط ۲

نکته

f-stringها اوّلین بار در نسخه‌ی ۳.۶ معرّفی شدند. اگر از نسخه‌ی ۳.۵ یا قبل از آن استفاده می‌کنید باید به جای آن از متد format() استفاده کنید. برای این کار متغیّرهای مورد نظر خود را در پرانتزهایی که پس از format می‌آیند فهرست کنید. ارجاع به هر متغیّر با یک جفت آکُلاد صورت می‌پذیرد؛ آکُلادها با مقدارهایی که در پرانتزها قرار داده‌ شده‌اند، با همان ترتیب، پر خواهند شد:

1
full_name = "{} {}".format(first_name, last_name)

افزودن فضای خالی به رشته‌ها به کمک تب و خطوط جدید

در برنامه‌نویسی به هر حرف چاپ‌نشدنی مانند علامت‌های فاصله، تب و پایانِ خط فضای خالی گفته می‌شود. می‌توانید به کمک این فضاهای خالی به خروجی خود شکل دهید تا خواندنِ آن برای کاربر ساده‌تر باشد.

برای اضافه کردن تب به متن خود از ترکیب حروف \t مانند آن‌چه در خط ۱ نمایش داده شده استفاده کنید:

1
2
3
4
>>> print("Python")
Python
>>> print("\tPython")
Python

برای افزودن خط جدید به رشته‌ی خود از ترکیب حروف \n استفاده کنید:

1
2
3
4
5
>>> print("Languages:\nPython\nC\nJavaScript")
Languages:
Python
C
JavaScript

همچنین می‌توانید تب‌ها و خط‌های جدید را در یک رشته ترکیب کنید. رشته‌ی “\n\t” به پایتون می‌گوید که به خطّ جدید برو و خطّ بعدی را با یک تب شروع کن.

مثال زیر نشان می‌دهد که چگونه می‌توانید با یک رشته‌ی یک‌خطّی خروجی‌ای در چهار خط تولید کنید:

1
2
3
4
5
>>> print("Languages:\n\tPython\n\tC\n\tJavaScript")
Languages:
Python
C
JavaScript

در دو فصل آینده هنگامی که می‌خواهید با چند خط کد خطوط زیادی در خروجی تولید کنید، تب‌ها و خط‌های جدید بسیار کاربردی خواهند بود.

حذف کردن فاصله‌های خالی

در برنامه‌های شما وجود فاصله‌ی اضافی در یک رشته می‌تواند گیج‌کننده باشد. برای برنامه‌نویسان دو رشته‌ی ‘python’ و ‘python ’ تقریباً یکی هستند. امّا برای یک برنامه‌ی رایانه‌ای این‌ها دو رشته‌ی متفاوت‌اند. پایتون فاصله‌ی اضافی را در ‘python ’ تشخیص داده و تمایز آن را در نظر می‌گیرد مگر آن‌که شما جور دیگری بخواهید.

اهمّیّت فاصله‌های خالی آن‌جا معلوم می‌شود که گاهی می‌خواهید دو رشته را برای بررسی یکی بودن مقایسه ‌کنید. یک مورد مهم، برای مثال، مقایسه‌ی نام کاربری کاربران هنگام ورود آن‌ها به یک وب‌سایت است. فاصله‌ی اضافی در موارد خیلی ساده‌تر هم ممکن است گیج‌کننده باشد. خوشبختانه پایتون حذف کردن فاصله‌ی خالی را از داده‌هایی که کاربران وارد می‌کنند ساده کرده است.

پایتون می‌تواند فاصله‌های خالی را در سمتِ چپ یا راستِ یک رشته تشخیص دهد. برای اطمینان یافتن از عدم وجود فاصله‌ی خالی در سمت راست یک رشته از متد rstrip() استفاده می‌کنیم:

1
2
3
4
5
6
7
>>> favorite_language = 'python '
>>> favorite_language
'python '
>>> favorite_language.rstrip()
'python'
>>> favorite_language
'python '

در پایان رشته‌ای که در خط ۱ به عنوان مقدار به favorite_language نسبت داده‌ایم یک فاصله‌ی خالی اضافی وجود دارد. وقتی در خط ۲ از پایتون می‌خواهید که این مقدار را در نشست ترمینال نمایش دهد، فاصله را در انتهای آن می‌بینید. هنگامی که در خط ۴ متد rstrip() روی متغیّر favorite_language عمل می‌کند، فاصله‌ی اضافی حذف می‌شود. با این حال این حذف شدن موقّتی است. اگر بار دیگر مقدار متغیّر favorite_language را نمایش دهید، خواهید دید که مقدار رشته همانند قبل است و فاصله‌ی اضافی همچنان وجود دارد. ۶

برای حذف دائمی فاصله از رشته باید مقدار رشته‌ی اصلاح‌شده را دوباره به نام همان متغیّر نسبت دهید:

1
2
3
4
>>> favorite_language = 'python '
>>> favorite_language = favorite_language.rstrip()
>>> favorite_language
'python'

همانطور که در خط ۲ نشان داده شده است، برای حذف فاصله‌ی اضافی از رشته، آن را از سمت راست رشته حذف می‌کنید و مقدار جدید را به متغیّر اولیّه نسبت می‌دهید. تغییر مقدار یک متغیّر در برنامه‌نویسی بسیار متداول است. این‌گونه است که مقدار یک متغیّر می‌تواند حین اجرای برنامه یا در پاسخ به ورودیِ کاربر تغییر کند.

همچنین می‌توانید با متد lstrip() فاصله‌های خالی یک رشته را از سمت چپ یا با متد strip() فاصله‌ها را از هر دو طرف حذف کنید:

1
2
3
4
5
6
7
>>> favorite_language = ' python '
>>> favorite_language.rstrip()
' python'
>>> favorite_language.lstrip()
'python '
>>> favorite_language.strip()
'python'

در خط ۱ از متغیّری شروع می‌کنیم که در ابتدا و انتهای آن فاصله وجود دارد. سپس در ۲ فاصله‌ی اضافه را سمت راست، در ۴ از سمت چپ و در۶ از هر دو طرف پاک می‌کنیم. تجربه‌ی کار با این متدها شما را نحوه‌ی دست‌کاری کردن رشته‌ها آشنا می‌کند. در دنیای واقعی از این متدها معمولاً برای تمیز کردن اطّلاعات ورودی کاربر پیش از ذخیره کردن آن‌ها استفاده می‌شود.

پرهیز از خطاهای نحوی هنگام کار با رشته‌ها

خطای نحوی از جمله ایراداتی است که معمولاً با آن برخورد می‌کنید. خطای نحوی هنگامی رخ می‌دهد که پایتون بخشی از برنامه‌ی شما را به عنوان کد معتبر پایتون تشخیص ندهد. برای مثال اگر از آپستروفی داخل علامت نقل تکّی استفاده کنید به خطا خواهید خورد. این اتّفاق به این دلیل می‌افتد که پایتون هر آن‌چه بین اوّلین علامت نقل قول و آپستروفی می‌بیند به عنوان یک رشته تعبیر می‌کند و پس از آن سعی می‌کند بقیه‌ی متن را به عنوان پایتون کد تفسیر کند و به مشکل می‌خورد.

اینجا نحوه‌ی صحیح استفاده از علائم نقل قول تکّی و دوتایی را می‌بینیم. برنامه را به نام apostrophe.py ذخیره و آن را اجرا کنید:

1
2
message = "One of Python's strengths is its diverse community."
print(message)

در اینجا آپستروفی بین یک جفت علامت نقل قول دوتایی ظاهرا شده و مفسّر پایتون بدون هیچ مشکلی آن را می‌خواند:

1
One of Python's strengths is its diverse community.

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

1
2
message = 'One of Python's strengths is its diverse community.'
print(message)

چنین خروجی‌ای را خواهید دید:

1
2
3
4
File "apostrophe.py", line 1
message = 'One of Python's strengths is its diverse community.' 
                        ^ 
      SyntaxError: invalid syntax

چنانچه در خروجی می‌بینید خطا در ۲ درست بعد از علامت نقل قول تکّی دوم رخ داده است. این خطای نحوی نشان می‌دهد که مفسّر بخشی از کد شما را کد معتبر پایتون نمی‌داند. خطاها ممکن است منشاهای مختلفی داشته باشند و موارد متداولِ آن‌ها هنگام برخوردن معرّفی خواهد شد. هنگامی که مشغول یادگیری برنامه‌نویسی پایتون هستید به خطاهای نحوی برخواهید خورد. خطاهای نحوی ناویژه‌ترین و نامشخّص‌ترین انواع خطا هستند در نتیجه تشخیص و اصلاح آن‌ها ممکن است سخت و خسته‌کننده باشد. اگر به خطای سمجی برخوردید توصیه‌های پیوست پ را ببینید.

نکته
ویژگی برجسته‌سازی و هایلایت نحوی ویرایشگرتان می‌تواند همزمان با نوشتنِ برنامه برخی از خطاهای نحوی را آشکار کند. اگر علامت‌های نقل قول را نابه‌جا به کار ببرید برجسته‌سازیِ رشته در ویرایشگر‌ها دچار مشکل می‌شود. اگر ویرایشگر کد پایتون را مانند متن معمولی یا متنی را مانند کد پایتون برجسته کرد معلوم می‌شود در به‌کارگیری علامت نقل قول اشتباه کرده‌اید.

خودآزمایی

هر کدام از این تمرین‌ها را در فایلی جداگانه با نامی مانند name_cases.py ذخیره کنید. اگر گیر کردید، کمی تامل کنید یا توصیه‌های پیوست پ را ببینید.

پیام شخصی

متغیّری برای نمایش نام یک شخص تعریف و پیامی خطاب به او چاپ کنید. پیام باید ساده باشد، مثل: “Hello Eric! would you like to learn some Python today?”

بزرگ و کوچک کردن حروف نام

متغیّری برای نمایش نام یک شخص در نظر بگیرید سپس نام او را با حروف بزرگ، کوچک و به صورت عنوان چاپ کنید.

نقل قول مشهور

نقل قولی از شخصی مشهور بیابید که مورد احترامتان باشد. نقل و قول و نام گوینده‌ی آن را چاپ کنید. پیام شما باید شامل علامت نقل قول و چیزی شبیه به این باشد: Albert Einstein once said, “A person who never made a mistake never tried anything new.”

نقل قول معروف ۲

تمرین ۲-۵ را تکرار کنید امّا این بار نام شخص معروف را با یک متغیّر نمایش دهید. سپس پیام خود را تولید کنید، آن را در یک متغیّر جدید به نام message ذخیره کنید و آن را چاپ کنید.

زدودن فاصله از نام‌ها

متغیّری برای نمایش نام یک فرد در نظر بگیرید و تعدادی فاصله‌ی خالی به ابتدا و انتهای آن اضافه کنید. از کاراکترهای ترکیبی\t و \n حداقل یک بار استفاده کنید.

یک بار نام را با حروف اضافه‌ی سر و ته آن چاپ کنید. سپس نام را با اعمال کردن توابع lstrip()، rstrip() و strip() چاپ کنید.

4 - عددها

اعداد در برنامه‌نویسی کاربردهای فراوانی دارند، از جمله برای نمایش امتیاز در بازی‌ها، بیان داده‌ها هنگام بصری‌سازی، ذخیره‌سازی اطّلاعات در نرم‌افزارهای وب و … . بسته به روشی که عدد مورد استفاده قرار می‌گیرد پایتون با آن برخوردی متفاوت دارد. ابتدا به نحوه‌ی مدیریت اعداد صحیح در پایتون می‌پردازیم زیرا ساده‌ترین نوع برای کار کردن هستند.

اعداد صحیح

در پایتون می‌توانید اعداد صحیح را جمع (+)، تفریق (-)، ضرب (*) یا تقسیم (/) کنید.

1
2
3
4
5
6
7
8
>>> 2 + 3
5
>>> 3 - 2
1
>>> 2 * 3
6
>>> 3 / 2
1.5

پایتون در نشست ترمینال به سادگی نتیجه‌ی عملیّات را نشان می‌دهد. برای به توان رساندن از دو علامت ضرب (**) استفاده می‌کنیم:

1
2
3
4
5
6
>>> 3 ** 2
9
>>> 3 ** 3
27
>>> 10 ** 6
1000000

پایتون ترتیب عملیّات را هم رعایت می‌کند پس می‌توانید چند عملیّات را در یک عبارت بگنجانید. همچنین می‌توانید از پرانتز برای تعیین تقدّم عملیّات استفاده کنید تا پایتون عبارت را با ترتیبی که شما می‌خواهید ارزیابی کند.

1
2
3
4
>>> 2 + 3*4
14
>>> (2 + 3) * 4
20

در پایتون فاصله‌گذاری تاثیری بر نحوه‌ی ارزیابی عبارت ندارد و تنها هنگام خواندن کد کمک می‌کند تا عبارت‌هایی را که اولویّت بیشتری دارد سریع‌تر پیدا کنید.

اعداد اعشاری

پایتون هر عدد ممیزدار را به عنوان ممیز شناور (float) می‌شناسد. این اصطلاح در بسیاری از زبان‌های برنامه‌نویسی به کار می‌رود زیرا به این حقیقت که ممیز می‌تواند در هر جای عدد ظاهر شود (=شناور باشد) دلالت دارد. هر زبان برنامه‌نویسی باید برای مدیریت صحیح اعداد اعشاری به دقّت طرّاحی شود تا صرف نظر از محل قرارگیری ممیّز رفتار آن عدد درست باشد.

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

1
2
3
4
5
6
7
8
>>> 0.1 + 0.1
0.2
>>> 0.2 + 0.2
0.4
>>> 2 * 0.1
0.2
>>> 2 * 0.2
0.4

امّا متوجّه باشید که گاهی در پاسخ خود ارقامی با تعداد نامشخّص در بخش اعشاری خواهید دید:

1
2
3
4
5

>>> 0.2 + 0.1
0.30000000000000004
>>> 3 * 0.1
0.30000000000000004

این اتفاّق در تمام زبان‌های برنامه‌نویسی می‌افتد و نگرانی چندانی در پی ندارد. پایتون برای یافتن راهی جهت نمایش هر چه دقیق‌تر نتیجه تلاش می‌کند امّا این راه ممکن است به سادگی یافت نشود زیرا چگونگی نمایش داخلی اعداد در رایانه‌ها بر آن تاثیر می‌گذارد. فعلاً کافی‌ست که اعشار اضافی را در نظر نگیرید. هنگامی که در پروژه‌های بخش دوم کتاب به مدیریّت این بخش‌های اعشاری اضافی نیاز داشتیم، این کار را خواهید آموخت.

اعداد صحیح و اعشاری

هنگام تقسیمِ دو عدد صحیح و بخش‌پذیر که حاصل آن نیز عددی صحیح است، به عددی اعشاری برخواهید خورد:

1
2
>>> 4/2
2.0

همچنین اگر در هر عملیّاتی یک عدد صحیح و اعشاری را ترکیب کنید، حاصل اعشاری خواهد بود:

1
2
3
4
5
6
>>> 1 + 2.0
3.0
>>> 2 * 3.0
6.0
>>> 3.0 ** 2
9.0

پیش‌فرض پایتون در هر عملیّات عددی عدد اعشاری است، حتّی اگر خروجی عملیّات عددی صحیح باشد.

زیرخط در اعداد

هنگام نوشتن اعداد بزرگ می‌توانید به کمک زیرخط رقم‌های آن را دسته‌بندی کنید تا این اعداد خواناتر شوند:

1
>>> universe_age = 14_000_000_000

هنگام چاپ اعدادی که با زیرخط تعریف شده‌اند پایتون تنها رقم‌ها را نمایش می‌دهد:

1
2
>>> print(universe_age)
14000000000

پایتون هنگام ذخیره کردن این مقادیر زیرخط را نادیده می‌گیرد. حتّی اگر ارقام را در دسته‌های سه‌تایی قرار ندهید، باز هم مقدار تغییر نمی‌کند. برای پایتون 1000 با 1_000 یا 10_00 تفاوتی ندارد. این ویژگی در اعداد صحیح و اعشاری قابل استفاده است امّا تنها در پایتون ۳.۶ و بعد از آن در دسترس است.

انتساب چندگانه

می‌توانید بیشتر از یک متغیّر را تنها در یک خط مقداردهی کنید. این کار برنامه‌ها را کوتاه‌تر و خواندن آن‌ها را ساده‌تر می‌کند. هنگام مقداردهی اولیّه‌ی مجموعه‌ای از اعداد از این روش به مراتب استفاده خواهید کرد.

برای مثال اینجا سه متغیّر x، y و z را با صفر مقدارهای اولیّه می‌کنیم:

1
>>> x, y, z = 0, 0, 0

باید نام متغیّرها و همچنین مقدار آن‌ها را با کاما از یکدیگر جدا کنید. پایتون هر مقدار را به متغیّر متناظرش منسوب خواهد کرد. تا زمانی که تعداد مقادیر با تعداد متغیّرها برابر باشد، پایتون آن‌ها را به درستی با هم جور می‌کند.

ثابت‌ها

ثابت به متغیّری گفته می‌شود که مقدار آن در طول عمر یک برنامه تغییر نمی‌کند. پایتون نوع ثابت داخلی و پیش‌ساخته ندارد امّا برنامه‌نویسان برای متغیّرهایی که ثابت در نظر گرفته می‌شوند و مقدار آن‌ها هرگز تغییر نمی‌کند، از نام‌گذاری با حروف بزرگ استفاده می‌کنند:

1
MAX_CONNECTIONS = 5000

اگر می‌خواهید در برنامه‌ی خود با متغیّری مثل یک ثابت برخورد کنید نام آن را با تماماً با حروف بزرگ بنویسید.

خودآزمایی

عدد هشت

چهار عملیّات جمع، تفریق، ضرب و تقسیم بنویسید که حاصل همه‌ی آن‌ها عدد ۸ شود. مطمئن شوید که عملیّات را داخل print() قرار می‌دهید تا نتیجه‌ی آن را ببینید. باید چهار خط مانند زیر بنویسید:

1
print(5+3)

خروجی چهار خط را به سادگی نمایش می‌دهد که در هر کدام عدد ۸ نمایش داده شده است.

عدد موردعلاقه

متغیّری برای نمایش عدد مورد علاقه‌ی خود تعریف کنید. سپس با استفاده از این متغیّر پیامی تولید و چاپ کنید که عدد مورد علاقه‌ی شما را فاش می‌کند.

5 - توضیحات

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

چگونه یک توضیح بنویسیم؟

علامت هَش (#) در پایتون نمایان‌گر یک توضیح است. مفسّر پایتون هر آن‌چه را پس از این علامت بیاید نادیده می‌گیرد. برای مثال:

1
2
# Say hello to everyone.
print("Hello Python people!")

پایتون از خط اوّل می‌گذرد و دومی را اجرا می‌کند:

1
Hello Python people!

چه‌جور توضیحی باید به برنامه اضافه کنید؟

دلیل اصلی اضافه کردن توضیحات به برنامه این است که مقصود آن توضیح داده و بگویید که چگونه آن را به کار انداخته‌اید‌. هنگامی که شما در جریانِ انجام یک پروژه هستید می‌دانید که اجزای مختلف چگونه با هم جفت شده‌اند. امّا هنگامی که پس از گذشت مدت زمانی به پروژه برمی‌گردید به احتمال زیاد برخی از جزئیات را فراموش کرده‌اید. هرچند همیشه می‌توانید کد خود را بررسی کنید و بفهمید که قسمت‌های مختلف آن چگونه کار می‌کرده‌اند، امّا با نوشتن توضیحات مناسب و خلاصه کردن رویکرد کلّی خود به زبان ساده، در زمان صرفه‌جویی می‌کنید.

اگر می‌خواهید به برنامه‌نویسی حرفه‌ای تبدیل شوید و یا با برنامه‌نویسان دیگر همکاری کنید باید توضیحات معنادار بنویسید. امروزه بیشتر نرم‌افزارها را یا گروهی از برنامه‌نویسان در یک شرکت یا گروهی از مردم در قالب یک پروژه‌ی متن‌باز به صورت مشارکتی می‌نویسند. برنامه‌نویسان باتجربه انتظار دیدن توضیحات در کد دارند پس بهتر است از همین الان نوشتن توضیحات گویا در برنامه‌های خود را آغاز کنید. نوشتن توضیحات واضح و شفّاف در کد یکی از سودمندترین عادت‌هایی است که به عنوان یک برنامه‌نویس جدید می‌توانید پیدا کنید.

پیش از تصمیم‌گیری برای نوشتن یک توضیح به این فکر کنید که آیا برای رسیدن به جواب رویکردهای مختلفی را در نظر گرفته‌اید یا نه. اگر این چنین است توضیحی درباره‌ی راه‌حل خود بنویسید. این که بعداً چند توضیح اضافی را پاک کنید بسیار ساده‌تر از اضافه کردن توضیح به کدی است که به خوبی شرح داده نشده است. از الان به بعد از توضیحات در مثال‌ها استفاده خواهد شد تا بخش‌های مختلف کد توضیح داده شود.

خودآزمایی

اضافه کردن توضیح

از بین برنامه‌هایی که نوشته‌اید دو تا را انتخاب کنید و به هر کدام حداقل یک توضیح اضافه کنید. اگر به دلیل سادگی برنامه‌ها توضیحی برای افزودن نمی‌یابید صرفاً اسم و تاریخ نوشتن کد را بالای برنامه اضافه کنید. سپس یک جمله در مورد هدف برنامه اضافه کنید.

6 - ذنِ پایتون

برنامه‌نویسان باتجربه‌ی پایتون همواره شما را به پرهیز از پیچیدگی و در پی گرفتن سادگی، هر جا که ممکن باشد، تشویق می‌کنند. فلسفه‌ی جامعه‌ی پایتون در “The Zen of Python” اثر Tom Peters شرح داده شده است. با وارد کردن import this در مفسّر پایتون خود می‌توانید این مجموعه‌ی خلاصه‌ از اصول نوشتن کد پایتون خوب را پیدا کنید. کل Zen of Python را اینجا نمایش نداده‌ایم امّا برای کمک به درک اهمّیّت آن به عنوان برنامه‌نویس تازه‌کار پایتون چند خط از آن را می‌آوریم.

1
2
3
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.

برنامه‌نویسان پایتون این نکته را پذیرفته‌اند که کد می‌تواند زیبا و ظریف باشد. افراد با برنامه‌نویسی مسائل را حل می‌کنند. برنامه‌نویسان همواره راه‌حل‌های بهینه، خوش‌ساخت و حتّی زیبا را ستوده‌اند. همان‌طور که پایتون را فرامی‌گیرید و از آن برای نوشتن برنامه‌های بیشتری استفاده می‌کنید، ممکن است روزی کسی روی شانه‌های شما بایستد و بگوید: «عجب کد زیبایی!»

1
Simple is better than complex.

اگر بین یک راه‌حل ساده و یک راه‌حل پیچیده مخیّر بودید و هر دو کار می‌کرد، ساده را انتخاب کنید. نگهداری از کد شما راحت‌تر و استفاده از آن برای ایجاد برنامه‌های دیگر ساده‌تر خواهد بود.

1
Complex is better than complicated.

زندگی واقعی سخت و درهم‌ریخته است و ممکن است راه‌حلی ساده برای یک مساله دست‌نیافتنی باشد. در چنین حالتی ساده‌ترین راه‌حلی را به کار بگیرید که جواب می‌دهد.

1
Readability counts.

حتّی اگر کد شما پیچیده است تلاش کنید آن را خوانا نگه دارید. زمانی که روی پروژه‌ای با برنامه‌های پیچیده کار می‌کنید بر روی نوشتن توضیحات پرمعنی تمرکز کنید.

1
There should be one-- and preferably only one --obvious way to do it.

اگر از دو برنامه‌نویس پایتون بخوانید که مساله‌ای مشابه را حل کنند، نتیجه‌ای که می‌گیرند باید تا حدود زیادی به یکدیگر بخورد. این به معنی تهی بودن برنامه‌نویسی از ابتکار و خلّاقیّت نیست. درست برعکس! امّا برنامه‌نویسی بیشتر استفاده از رویکردهای ساده و مشترک برای رسیدن به شرایطی ساده در یک پروژه ی بزرگتر است. پیچ و مهره‌ی برنامه‌های شما باید برای دیگر برنامه‌نویسان پایتون قابل فهم و استفاده باشد.

1
Now is better than never.

می‌توانید باقی عمر خود را به آموختن ریزه‌کاری‌های پایتون و در حالت کلی برنامه‌نویسی بپردازید امّا با این وضع هرگز هیچ پروژه‌ای را به پایان نخواهید رساند. تلاش نکنید که عالی‌ترین کد را بنویسید، بلکه کدی بنویسید که کار کند و سپس تصمیم بگیرید که آیا این کد نیاز به بهبود دارد یا باید آن را رها کرد و به چیز جدیدی پرداخت.

همچنان که به فصل بعدی می‌روید و پرداختن به موضوعات پیچیده‌تر را شروع می کنید این فلسفه‌ی سادگی و شفافیّت را در ذهن داشته باشید.

برنامه‌نویسان مجرّب کد شما را خواهند پسندید، با کمال میل به شما بازخورد خواهند داد و در پروژه‌های جذّاب با شما همکاری خواهند کرد.

خودآزمایی

ذن پایتون

import this را در یک ترمینال پایتون وارد کنید و باقی اصول را مرور کنید.

7 - خلاصه

در این فصل کار کردن با متغیّرها را آموختید. آموختید که چگونه نام بامعنا برای متغیّرها برگزینید و هنگام برخوردن به خطاهای نحوی و نام‌‌گذاری چه‌ کنید. یاد گرفتید که رشته‌ها چه هستند و چگونه آن‌ها را با حروف کوچک، بزرگ و در حالت عنوان نمایش دهید. به‌کارگیری فاصله را برای مرتب کردن خروجی‌ها و طرز حذف کردن فاصله‌های اضافی را از قسمت‌های مختلف یک رشته آغاز کردید. کار کردن با اعداد صحیح و اعشاری را شروع کردید و کمی با داده‌های عددی کار کردید. همچنین نوشتن توضیحات گویا را برای افزایش خوانایی کد خود آموختید. در پایان در مورد فلسفه‌ی ساده‌ نگه‌داشتن کد تا جای ممکن، هر جا که میسّر داشت، مطالعه کردید.

در فصل ۳ ذخیره کردن مجموعه‌ای از اطّلاعات را در ساختمان داده‌ای به نام لیست خواهید آموخت و کار کردن با لیست و تغییر دادن اطّلاعات داخل آن را یاد خواهید گرفت.