مقدمات یادگیری پایتون

پایتون (Python) چیست؟
Python یک زبان برنامهنویسی سطح بالا، متنباز و همهمنظوره است که در سال 1991 توسط Guido van Rossum طراحی شد. این زبان به دلیل نحو ساده و خوانا، یادگیری آسان و جامعهی کاربری گسترده، محبوبیت زیادی پیدا کرده است. Python از سبکهای مختلف برنامهنویسی مانند شیگرا، رویهای و تابعگرا پشتیبانی میکند و در حوزههای مختلفی مانند توسعه وب، علم دادهها، هوش مصنوعی، خودکارسازی و تحلیل دادهها کاربرد دارد. وجود کتابخانههای قدرتمندی مثل Django، NumPy، Pandas و TensorFlow باعث شده که Python به یکی از پرکاربردترین زبانهای برنامهنویسی جهان تبدیل شود.
هدف گذاری
هدف این مجموعه مقالات، آموزش طرز تفکر مانند یک دانشمند کامپیوتر است. این طرز تفکر ترکیبی از بهترین ویژگیهای ریاضیات، مهندسی و علوم طبیعی است. مانند ریاضیدانها، دانشمندان کامپیوتر از زبانهای رسمی برای نشان دادن ایدهها (بهویژه محاسبات) استفاده میکنند. مانند مهندسان، آنها چیزها را طراحی کرده و اجزا را به سیستمها تبدیل میکنند و مزایا و معایب گزینههای مختلف را ارزیابی میکنند. مانند دانشمندان، آنها رفتار سیستمهای پیچیده را مشاهده کرده، فرضیههایی میسازند و پیشبینیها را آزمایش میکنند.
مهمترین مهارت برای یک دانشمند کامپیوتر، حل مسئله است. حل مسئله یعنی توانایی فرمولبندی مسائل، تفکر خلاقانه درباره راهحلها و بیان یک راهحل بهطور واضح و دقیق. جالب است که فرآیند یادگیری برنامهنویسی فرصتی عالی برای تمرین مهارتهای حل مسئله است. به همین دلیل این فصل با عنوان “راه برنامهنویسی” نامگذاری شده است.
در یک سطح، شما برنامهنویسی را یاد خواهید گرفت که خود یک مهارت مفید است. در سطح دیگر، از برنامهنویسی به عنوان ابزاری برای دستیابی به هدف استفاده خواهید کرد. به مرور زمان، این هدف روشنتر خواهد شد.
برنامه (program) چیست؟
یک برنامه دنبالهای از دستورالعملهاست که مشخص میکند چگونه یک محاسبه انجام شود. این محاسبه ممکن است چیزی ریاضی مانند حل یک دستگاه معادلات یا پیدا کردن ریشههای یک چندجملهای باشد، اما میتواند یک محاسبه نمادین هم باشد، مانند جستجو و جایگزینی متن در یک سند یا چیزی گرافیکی مانند پردازش تصویر یا پخش ویدیو.
جزئیات این کار در زبانهای مختلف متفاوت است، اما چند دستورالعمل پایهای در تقریباً هر زبان وجود دارد:
- ورودی (input): دریافت دادهها از صفحهکلید، فایل، شبکه یا هر دستگاه دیگری.
- خروجی (output): نمایش دادهها روی صفحهنمایش، ذخیره آنها در یک فایل یا ارسال آنها از طریق شبکه.
- ریاضیات (math): انجام عملیاتهای ریاضی پایه مانند جمع و ضرب.
- اجرای شرطی (conditional execution): بررسی شرایط خاص و اجرای کد مناسب.
- تکرار (repetition): انجام یک عمل بهطور مکرر، معمولاً با برخی تغییرات.
باور کنید یا نه، تقریباً همینهاست. هر برنامهای که تاکنون استفاده کردهاید، هرچقدر هم پیچیده باشد، از دستورالعملهایی ساخته شده که تقریباً شبیه همینها هستند. بنابراین میتوانید برنامهنویسی را بهعنوان فرایند شکستن یک کار بزرگ و پیچیده به بخشهای کوچکتر و کوچکتر تصور کنید تا زمانی که این بخشهای کوچک به اندازهای ساده شوند که با یکی از این دستورالعملهای پایهای قابل انجام باشند.
اجرای پایتون
یکی از چالشهای شروع کار با پایتون این است که ممکن است لازم باشد پایتون و نرمافزارهای مرتبط را روی کامپیوتر خود نصب کنید. اگر با سیستمعامل خود آشنا هستید، بهویژه اگر با رابط خط فرمان راحت هستید، نصب پایتون کار مشکلی نخواهد بود. اما برای مبتدیان ممکن است یادگیری نحوه مدیریت سیستم و برنامهنویسی همزمان، کمی دردسرساز باشد.
برای جلوگیری از این مشکل، پیشنهاد میکنم پایتون را ابتدا در یک مرورگر اجرا کنید. بعداً که با پایتون راحتتر شدید، پیشنهادهایی برای نصب پایتون روی کامپیوترتان خواهم داد.
تعدادی وبسایت وجود دارد که میتوانید برای اجرای پایتون از آنها استفاده کنید. اگر قبلاً یکی از این وبسایتها را پیدا کردهاید، از آن استفاده کنید. در غیر این صورت، پیشنهاد میکنم از PythonAnywhere استفاده کنید.
دو نسخه از پایتون وجود دارد که به آنها پایتون 2 و پایتون 3 میگویند. این دو نسخه بسیار مشابه هستند، بنابراین اگر یکی را یاد بگیرید، راحت میتوانید به دیگری منتقل شوید. در واقع، چند تفاوت کوچک خواهید دید که برای مبتدیان قابل توجه نیست. این مجموعه مقالات آموزش پایتون برای پایتون 3 نوشته شده است، اما برخی یادداشتها در مورد پایتون 2 هم آورده شده است.
مفسر پایتون برنامهای است که کد پایتون را میخواند و اجرا میکند. بسته به محیط شما، ممکن است مفسر را با کلیک بر روی آیکن یا تایپ کردن python در خط فرمان آغاز کنید. وقتی شروع کردید، باید خروجیای مانند این ببینید:
Python 3.4.0 (default, Jun 19 2015, 14:20:21)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
سه خط اول شامل اطلاعاتی در مورد مفسر و سیستمعاملی است که روی آن اجرا میشود، بنابراین ممکن است برای شما متفاوت باشد. اما باید بررسی کنید که شماره نسخه که در این مثال 3.4.0 است، با عدد 3 شروع شود، که نشان میدهد شما در حال اجرای پایتون 3 هستید. اگر با عدد 2 شروع شود، به این معنی است که شما در حال اجرای پایتون 2 هستید.
خط آخر یک پیام نمایشی است که نشان میدهد مترجم آماده است تا کد وارد شده را اجرا کند. اگر یک خط کد وارد کرده و Enter را فشار دهید، مترجم نتیجه را نمایش خواهد داد:
>>> 1 + 1
2
حالا شما آمادهاید تا شروع کنید. از این به بعد، فرض میکنم که میدانید چگونه مترجم پایتون را شروع کرده و کد را اجرا کنید.
اولین برنامه
به طور سنتی، اولین برنامهای که در یک زبان جدید مینویسید، “سلام، دنیا!” نام دارد، زیرا تمام کاری که انجام میدهد این است که عبارت “سلام، دنیا!” را نمایش میدهد. در پایتون، این برنامه به شکل زیر خواهد بود:
>>> print('Hello, World!')
این یک نمونه از دستور چاپ است، اگرچه واقعاً هیچ چیزی روی کاغذ چاپ نمیکند. در عوض، نتیجه را روی صفحه نمایش میدهد. در این مورد، نتیجه عبارت است از:
Hello, World!
علائم نقل قول در برنامه، شروع و پایان متنی که باید نمایش داده شود را نشان میدهند؛ این علائم در نتیجه ظاهر نخواهند شد.
پرانتز نشان می دهد که print یک تابع است. در آموزشهای آتی به توابع خواهیم پرداخت
در Python 2، عبارت print کمی متفاوت است. این یک تابع نیست، بنابراین از پرانتز استفاده نمی کند.
>>> print 'Hello, World!'
این تمایز به زودی منطقی تر خواهد شد، اما برای شروع کافی است.
اپراتورهای حسابی
بعد از “سلام دنیا”، مرحله بعدی انجام محاسبات ریاضی است. پایتون اپراتورهایی را فراهم میکند که نمادهای خاصی هستند که محاسباتی مانند جمع و ضرب را نشان میدهند.
اپراتورهای +، - و * به ترتیب برای جمع، تفریق و ضرب استفاده میشوند، مانند مثالهای زیر:
>>> 40 + 2
42
>>> 43 - 1
42
>>> 6 * 7
42
اپراتور / برای تقسیم استفاده میشود:
>>> 84 / 2
42.0
شاید بپرسید چرا نتیجه 42.0 است به جای 42؟ این موضوع در بخش بعدی توضیح داده خواهد شد.
در نهایت، اپراتور ** برای اعمال توان استفاده میشود؛ یعنی یک عدد را به توان میرساند:
>>> 6**2 + 6
42
در برخی زبانهای دیگر، از ^ برای توان استفاده میشود، اما در پایتون این اپراتور یک اپراتور بیتی به نام XOR است. اگر با اپراتورهای بیتی آشنا نیستید، نتیجه ممکن است شما را شگفتزده کند:
>>> 6 ^ 2
4
من در این آموزش به اپراتورهای بیتی نپرداختهام، اما میتوانید در مورد آنها در این لینک مطالعه کنید.
مقادیر و انواع دادهها
یک مقدار یکی از اجزای اصلی است که یک برنامه با آن کار میکند، مانند یک عدد یا یک حرف. برخی از مقادیری که تاکنون مشاهده کردهایم عبارتند از: 2، 42.0 و 'Hello, World!'.
این مقادیر به انواع دادههای مختلف تعلق دارند: 2 یک عدد صحیح (integer) است، 42.0 یک عدد اعشاری (floating-point) است، و 'Hello, World!' یک رشته (string) است، زیرا حروف آن به صورت رشتهای کنار هم قرار گرفتهاند.
اگر نمیدانید یک مقدار به کدام نوع تعلق دارد، مترجم میتواند به شما بگوید:
>>> type(2)
<class 'int'>
>>> type(42.0)
<class 'float'>
>>> type('Hello, World!')
<class 'str'>
در این نتایج، واژه “class” به معنای دستهبندی است؛ نوع دادهها دستهبندی از مقادیر هستند.
تعجبی ندارد که اعداد صحیح (integers) به نوع int، رشتهها به str و اعداد اعشاری به float تعلق دارند.
اما مقادیری مانند '2' و '42.0' چه؟ اینها شبیه به اعداد به نظر میرسند، اما چون در علامتهای نقل قول قرار دارند، مانند رشتهها هستند.
>>> type('2')
<class 'str'>
>>> type('42.0')
<class 'str'>
اینها رشتهها هستند.
وقتی یک عدد بزرگ مینویسید، ممکن است وسوسه شوید که از کاما (,) برای جدا کردن گروههای ارقام استفاده کنید، مانند 1,000,000. این عدد در پایتون یک عدد قانونی نیست، اما اینگونه است:
>>> 1,000,000
(1, 0, 0)
این چیزی نیست که انتظار داشتیم! پایتون 1,000,000 را بهعنوان یک دنباله از اعداد صحیح جدا شده با کاما میبیند. درباره این نوع دنبالهها بعداً بیشتر یاد خواهیم گرفت.
زبانهای رسمی و طبیعی
زبانهای طبیعی زبانهایی هستند که مردم به آنها صحبت میکنند، مانند انگلیسی، اسپانیایی و فرانسوی. این زبانها توسط انسانها طراحی نشدهاند (اگرچه انسانها سعی میکنند نظمهایی بر آنها تحمیل کنند) و به طور طبیعی تکامل یافتهاند.
زبانهای رسمی زبانهایی هستند که توسط انسانها برای کاربردهای خاص طراحی شدهاند. برای مثال، نمادهایی که ریاضیدانها برای نمایش روابط میان اعداد و نمادها استفاده میکنند، یک زبان رسمی است که بهویژه در نمایش روابط میان اعداد خوب عمل میکند. شیمیدانها از یک زبان رسمی برای نمایش ساختار شیمیایی مولکولها استفاده میکنند. و مهمتر از همه:
زبانهای برنامهنویسی زبانهای رسمی هستند که برای بیان محاسبات طراحی شدهاند.
زبانهای رسمی معمولاً قوانین نحوی دقیقی دارند که ساختار جملات را تعیین میکنند. برای مثال، در ریاضیات، عبارت 3 + 3 = 6 دارای نحو درست است، اما 3+ = 3$6 اینطور نیست. در شیمی، H2O یک فرمول نحوی صحیح است، اما 2Zz نیست.
قوانین نحوی در دو نوع وجود دارند که به توکنها و ساختار مربوط میشوند. توکنها، اجزای اصلی زبان هستند، مانند کلمات، اعداد و عناصر شیمیایی. یکی از مشکلات 3+ = 3$6 این است که $ در ریاضیات (حداقل تا جایی که من میدانم) یک توکن قانونی نیست. به همین ترتیب، 2Zz قانونی نیست زیرا هیچ عنصری با نماد Zz وجود ندارد.
نوع دوم از قوانین نحوی مربوط به نحوه ترکیب توکنها است. معادله 3 + /3 غیرقانونی است، زیرا اگرچه + و / توکنهای قانونی هستند، نمیتوان آنها را کنار هم قرار داد. به همین ترتیب، در یک فرمول شیمیایی، زیرنویس باید بعد از نام عنصر باشد، نه قبل از آن.
این جمله @ یک جمله ساختاریافته در زبان انگلیسی است که توکنهای نامعتبر در آن وجود دارد. این جمله تمام توکنهای معتبر را دارد، اما ساختار آن غلط است.
وقتی جملهای در انگلیسی یا بیانیهای در یک زبان رسمی میخوانید، باید ساختار آن را شناسایی کنید (اگرچه در زبان طبیعی این کار بهطور ناخودآگاه انجام میشود). این فرآیند به آنالیز (parsing) معروف است.
اگرچه زبانهای رسمی و طبیعی ویژگیهای زیادی مشابه دارند—توکنها، ساختار و نحو—تفاوتهایی نیز وجود دارند:
- ابهام (ambiguity): زبانهای طبیعی پر از ابهام هستند که مردم با استفاده از سرنخهای معنایی و سایر اطلاعات با آنها مقابله میکنند. زبانهای رسمی طوری طراحی شدهاند که تقریباً یا کاملاً غیر ابهامآمیز هستند، به این معنی که هر بیانیه دقیقاً یک معنی دارد، بدون توجه به زمینه.
- اضافهگویی (redundancy): برای جبران ابهام و کاهش سوء تفاهمها، زبانهای طبیعی از اضافهگویی زیادی استفاده میکنند. به همین دلیل اغلب طولانی و پرجزئیات هستند. زبانهای رسمی کمتر اضافهگویی دارند و مختصرتر هستند.
- معنای دقیق (literalness): زبانهای طبیعی پر از اصطلاحات و استعارهها هستند. اگر بگویم “سکه افتاد”، احتمالاً نه سکهای وجود دارد و نه چیزی در حال افتادن است (این اصطلاح به معنای آن است که فردی بعد از مدتی سردرگمی چیزی را فهمیده است). زبانهای رسمی دقیقاً همان چیزی را میگویند که نوشتهاند.
از آنجا که همه ما از کودکی زبانهای طبیعی را یاد میگیریم، گاهی سخت است که خود را با زبانهای رسمی تطبیق دهیم. تفاوت میان زبانهای رسمی و طبیعی مانند تفاوت بین شعر و نثر است، اما بیشتر:
- شعر: کلمات هم برای صدا و هم برای معنی استفاده میشوند و کل شعر احساسی خاص ایجاد میکند. ابهام نه تنها رایج است، بلکه اغلب عمدی است.
- نثر: معنی دقیق کلمات مهمتر است و ساختار بیشتر معنای جمله را تعیین میکند. نثر بیشتر قابل تحلیل است تا شعر، اما هنوز هم گاهی ابهام دارد.
- برنامهها: معنی یک برنامه کامپیوتری دقیق و بیابهام است و میتوان آن را کاملاً با تحلیل توکنها و ساختار درک کرد.
زبانهای رسمی از زبانهای طبیعی فشردهتر هستند، بنابراین زمان بیشتری برای خواندن آنها لازم است. همچنین، ساختار مهم است، بنابراین همیشه از بالا به پایین و چپ به راست خواندن آنها بهترین روش نیست. به جای آن، یاد بگیرید که برنامه را در ذهن خود تجزیه و تحلیل کنید، توکنها را شناسایی کرده و ساختار را تفسیر کنید. در نهایت، جزئیات مهم هستند. اشتباهات کوچک در املاء و علائم نگارشی که در زبانهای طبیعی میتوان از آنها گذشت، در زبانهای رسمی میتوانند تفاوت بزرگی ایجاد کنند.
اشکالزدایی (Debugging)
برنامهنویسان اشتباه میکنند. به دلایلی سرگرمکننده، اشتباهات برنامهنویسی “باگ” نامیده میشوند و فرایند یافتن آنها “اشکالزدایی” نام دارد.
برنامهنویسی، و بهویژه اشکالزدایی، گاهی احساسات شدیدی را بر میانگیزد. اگر با یک باگ سخت مواجه باشید، ممکن است احساس عصبانیت، ناامیدی یا خجالت کنید.
شواهدی وجود دارد که نشان میدهد مردم به طور طبیعی به کامپیوترها مانند افراد واکنش نشان میدهند. وقتی کامپیوترها خوب کار میکنند، آنها را به عنوان همکاران خود میبینیم، و وقتی سرسخت یا بیاحترامی نشان میدهند، به همان روشی به آنها واکنش نشان میدهیم که به افراد سرسخت یا بیاحترام پاسخ میدهیم.
آماده بودن برای این واکنشها ممکن است به شما کمک کند که بهتر با آنها کنار بیایید. یکی از رویکردها این است که کامپیوتر را مانند یک کارمند با نقاط قوت خاص (مانند سرعت و دقت) و ضعفهای خاص (مانند فقدان همدلی و عدم توانایی در درک تصویر کلی) در نظر بگیرید.
وظیفه شما این است که مدیر خوبی باشید: راههایی برای بهرهبرداری از نقاط قوت پیدا کنید و ضعفها را کاهش دهید. همچنین باید راههایی پیدا کنید که از احساسات خود برای درگیر شدن با مشکل استفاده کنید، بدون اینکه اجازه دهید واکنشهای شما مداخلهگر شوند.
یادگیری اشکالزدایی می تواند خسته کننده باشد، اما این یک مهارت ارزشمند است که برای بسیاری از فعالیتهای فراتر از برنامهنویسی مفید است.
واژهنامه (Glossary)
- حل مسئله (Problem Solving): فرایند فرمولبندی یک مشکل، پیدا کردن راهحل، و بیان آن.
- زبان سطح بالا (High-level language): زبانی مانند پایتون که طراحی شده است تا برای انسانها خوانا و نوشتن آن آسان باشد.
- زبان سطح پایین (Low-level language): زبانی که طراحی شده است تا برای کامپیوتر آسان باشد که آن را اجرا کند؛ همچنین به آن “زبان ماشین” یا “زبان اسمبلی” نیز گفته میشود.
- قابلیت حمل (Portability): ویژگی یک برنامه که به آن این امکان را میدهد که روی چندین نوع کامپیوتر اجرا شود.
- مترجم (Interpreter): برنامهای که یک برنامه دیگر را میخواند و آن را اجرا میکند.
- پاسخنویس (Prompt): کاراکترهایی که توسط مترجم نمایش داده میشوند تا نشان دهند که آماده هستند تا ورودی از کاربر دریافت کنند.
- برنامه (Program): یک دنباله از دستورالعملها که مشخص میکند چگونه یک محاسبه انجام شود.
- ورودی (Input): دادههایی که از صفحهکلید، یک فایل، شبکه یا دستگاههای دیگر دریافت میشوند.
- خروجی (Output): دادههایی که به صفحهنمایش ارسال میشوند، در فایل ذخیره میشوند یا از طریق شبکه ارسال میشوند.
- عملیات ریاضی (Math Operations): انجام عملیاتهای ریاضی اساسی مانند جمع، تفریق و ضرب.
- اجرای شرطی (Conditional Execution): بررسی شرایط خاص و اجرای کد مناسب.
- تکرار (Repetition): انجام یک عمل به طور مکرر.
- توکن (Token): کوچکترین واحد معنایی در یک زبان رسمی، مانند کلمات یا اعداد در زبانهای طبیعی یا دستورات خاص در زبانهای برنامهنویسی.
- نحو (Syntax): مجموعهای از قوانین که نحوه ترکیب توکنها را در یک زبان مشخص میکنند.
- ساختار (Structure): نحوه سازماندهی و ترتیب توکنها در یک زبان.
- زبان رسمی (Formal Language): زبانی که به طور خاص برای کاربردهای خاص توسط انسانها طراحی شده است. زبانهای برنامهنویسی یک نوع زبان رسمی هستند.
- زبان طبیعی (Natural Language): زبانهایی که مردم به طور طبیعی از آنها برای برقراری ارتباط استفاده میکنند، مانند انگلیسی، فرانسوی یا فارسی.
- پارسر (Parser): برنامهای که مسئول تجزیه و تحلیل یک زبان رسمی است تا ساختار صحیح آن را شناسایی کند.
- اشکالزدایی (Debugging): فرایند شناسایی و اصلاح باگها یا اشتباهات در برنامهنویسی.
- باگ (Bug): اشتباه یا خطا در کد برنامه که باعث میشود برنامه به درستی کار نکند.
- مترجم (Interpreter): برنامهای که کد نوشته شده در یک زبان برنامهنویسی را خوانده و اجرا میکند.
- نوع داده (Data Type): دستهبندی مقادیر که نشاندهنده نوع دادهای است که یک مقدار خاص به آن تعلق دارد (مثلاً
intبرای اعداد صحیح وstrبرای رشتهها).