آموزش پایتون - فصل دوم (متغییر ها ، عبارات و ...)

یکی از قوی ترین ویژگی های موجود در زبان های برنامه نویسی ، توانایی دستکاری متغیر هاست . متغیر نامی هست که به یک مقدار اشاره میکنه .عبارات تخصیص :یک عبارت تخصیص ، متغیری رو میسازه و به اون مقداری رو میده :code sample :>>> message = 'And now for something completely different'>>> n = 17>>> pi = 3.141592653589793در مثال های بالا سه تا عمل تخصیص صورت میگیره . در اولی مقدار رشته ای به متغیری بنام message تخصیص پیدا میکنه ، در دومی مقدار صحیحِ 17 به متغیری بنام n تخصیص داده میشه و در سومی مقدار تقریبی عدد پی (یکی از اعداد پرکاربرد در ریاضی) به متغیری بنام pi تخصیص داده میشه .نام گذاری متغیر ها :معمولا برنامه نویس ها برای متغیرهایی که تعریف میکنن نام های با معنایی رو انتخاب میکنن . نام متغیر شما میتونه هرچقدر که دوست دارید طولانی باشه . همچنین میتونید برای اسم متغیر از حروف و اعداد در کنارهم استفاده کنید .نکته : نام متغیر نمیتونه با عدد شروع بشه.شما میتونید از حروف بزرگ الفبای انگلیسی برای نامگذاری متغیرهاتون استفاده کنید ولی استفاده از حروف کوچک بیشتر مرسوم هست. علاوه براین ، در استفاده از علامت خط زیرین(underline) هم محدودیتی ندارید . درواقع علامت خط زیرین در نام گذاری متغیر هایی که از چندین کلمه تشکیل شده اند کاربرد داره ، مانند :your_name و airspeed_of_unladen_swallowاگر شما نام گذاری غیر مجازی رو برای متغیرهاتون انجام بدید ، با خطای نوشتاری (syntax error) مواجه خواهید شد :>>> 76trombones = 'big parade'SyntaxError: invalid syntax>>> more@ = 1000000SyntaxError: invalid syntax>>> class = 'Advanced Theoretical Zymurgy'SyntaxError: invalid syntaxحالا یک به یک بررسی میکنیم که چرا مفسر پایتون این نام گذاری هارو قبول نکرده . در متغیر اول (76trombones) ، چون نام متغیر با عدد شروع شده پس غیر مجاز هست . در متغیر دوم چون نام متغیر شامل کاراکتر @ هست ، این نام گذاری هم در پایتون غیر مجاز اعلام میشه . اما میرسیم به سومین نام گذاری ؛ بنظرتون کجای کار ایراد داره که این نام گذاری هم غیر مجاز اعلام شده ؟جواب : کلمه ی class که به عنوان نام متغیر قرار داده شده ، یکی از کلید واژه های زبان پایتون هست . مفسر پایتون از کلید واژه ها استفاده میکنه تا ساختار برنامه ی ما رو شناسایی کنه و ما اجازه نداریم که از این کلید واژه ها در نامگذاری متغیر ها استفاده کنیم .عبارات و بیانیه ها (Expressions and Statements) :یک عبارت (Expression) ، ترکیبی از مقدار ، متغیر و عملگر هست . متغیر و مقدار به خودی خود یک عبارت در نظر گرفته میشن . به مثال ها توجه کنید :code sample :>>> 4242>>> n17>>> n + 2542زمانی که شما عبارتی رو داخل خط فرمان پایتون تایپ میکنید ، مفسر اون رو ارزیابی میکنه یعنی مقدار عبارت مورد نظر رو پیدا میکنه . برای مثال در نمونه کد بالا ، ارزیابی میکنه که n مقدار ۱۷ و n + 25 مقدار 42 رو داره .یک بیانیه (statement) ، یک واحد کدی هست که اثری داره ، مثل : ساختن متغیر یا نشون دادن یک مقدار . به مثال ها توجه کنید :code sample :>>> n = 17>>> print(n)خط اول بیانیه ی تخصیصی هست که یک مقدار رو به متغیرِ n اختصاص میده و خط دوم بیانیه ای شامل دستور print هست که مقدار متغیر n رو به ما نشون میده .حالت اسکریپتی :تا اینجای کار ما داشتیم مستقیما با مفسر پایتون کار میکردیم . این روش برای شروع خوبه ولی اگر ما با بیش از چند خط کد سرو کار داشته باشیم ، روش جالبی نیست . دوتا روش جایگزین وجود داره : اولی اینه که کدهامون رو داخل یک فایلی با پسوند py. (به این فایل اسکریپت میگیم ) ذخیره کنیم و بعد از داخل مفسر پایتون اون رو باز و اجرا کنیم . روش دوم هم استفاده از ویرایشگر های کد و آی دی ای (IDE) ها هست . IDE مخفف Integrated Development Environment به معنی محیط توسعه یکپارچه هست . از بین ویرایشگرها ، من ویژوال استویدو کد (Visual Studio Code) و از بین IDE ها ، PyCahrm نسخه ی Community رو بهتون پیشنهاد میکنم که میتونید از سایتشون که در خط بالایی لینک دادم دانلود و شروع به کدنویسی کنید .بین کار کردن با پایتون در حالت مستقیم و حالت اسکریپتی (منظورم ‌ذخیره در فایل ، استفاده از ویرایشگرهای کد و IDE هاست ) تفاوت هایی وجود داره . برای مثال فرض کنید که در حالت استفاده ی مستقیم ، کدهای زیر رو تایپ میکنید :code sample :>>> miles = 26.2>>> miles * 1.6142.182خط اول یک مقداری رو به متغیر miles نسبت میده . خط دوم یک عبارت هست پس مفسر پایتون اون رو ارزیابی میکنه و نتیجه رو به ما نشون میده . مثلا در این مثال به ما میگه که طول مسیر ماراتن تقریبا 42 کیلومتر هست .اما اگر همین کد رو بصورت اسکریپتی بنویسیم و اجراش بکنیم ، هیچ خروجی ای به ما نشون داده نمیشه . در حالت اسکریپتی ، مفسر پایتون عبارت رو ارزیابی میکنه و تا زمانی که بهش گفته نشده ، مقداری رو به ما نشون نمیده :code sample :miles = 26.2print(miles * 1.61)این رفتار ممکنه در اوایلِ کار شما رو سردرگم بکنه ولی جای هیچ نگرانی نیست :)یک اسکریپت معمولا دارای دنباله ای از بیانیه (statement) هاست . اگر ما داخل اسکریپت بیش از یک بیانیه داشته باشیم و اون رو اجرا بکنیم ، همه ی نتایج در یک خروجی نشون داده میشن . به مثال زیر توجه کنید :code sample :print(1)x = 2print(x)قطعه کد بالا این خروجی رو به ما نشون میده :12نکته : بیانیه ی تخصیص (x = 2)در مثال بالا ، به خودی خود هیچ خروجی ای به ما نشون نمیده .برای اینکه این قضیه براتون بیشتر تفهیم بشه ازتون میخوام که کد زیر رو داخل مفسر پایتون بصورت مستقیم وارد بکنید و ببینید که چه اتفاقی میوفته :code sample :5x = 5x + 1و بعد ، همین کد رو داخل یک اسکریپتی بنویسید و اجراش بکنید ببینید این دفعه چه اتفاقی میوفته .حالا اسکریپت رو یکمی تغییر بدید ؛ به این صورت که همه ی بیانیه هارو داخل دستور print بنویسید و دوباره اجراش بکنید .ترتیب عملگرها :وقتی یک عبارت شامل چند عملگر باشه ، ترتیب ارزیابی به ترتیب عملگرهای موجود در اون بستگی داره . برای عملگرهای ریاضی ، پایتون از ترتیب عملگرها در ریاضیات پیروی میکنه . برای بخاطر سپردن ترتیب عملگرها میتونید از کلمه ی PEMDAS استفاده کنید :پرانتز (Parentheses) :پرانتز ها دارای بالاترین اولویت هستند . شما میتونید برای سازماندهی ارزیابی از پرانتز استفاده کنید. عباراتی که داخل پرانتز نوشته میشن ، اول از همه مورد ارزیابی توسط مفسر قرار میگیرن . برای مثال حاصل عبارت های زیر به ترتیب میشه 4 و 8 :code sample :2 * (3 - 1)(1 + 1) ** (5 - 2)همچنین شما میتونید برای خوانایی بهتر کدهاتون بدون اینکه نتیجه محاسبات تغییری بکنه از پرانتز ها استفاده کنید :code sample :(minute * 100) / 60توان (Exponentiation) :بعد از پرانتز ، توان رسانی در اولویت دوم هست . برای مثال حاصل عبارت های زیر به ترتیب میشه 9 و 18 :code sample :1 + 2 ** 32 * 3 ** 2اولویت های بعدی (Multiplication , Division , Addition and Subtraction): بعد از دو اولویت اول نوبت میرسه به ضرب و تقسیم و بعد این دو هم اولویت با جمع و تفریق هست . برای مثال حاصل عبارات زیر به ترتیب میشه 5 و 8 :code sample :2 * 3 - 16 + 4 / 2نکته : بجز عملگر توان رسانی ، اگر در عبارتی عملگرهایی با اولویت های یکسان داشته باشیم ، مفسر پایتون اون هارو از سمت چپ به راست عبارت مورد ارزیابی قرار میده .عملگرهای مربوط به رشته ها :ما معمولا نمیتونیم برای کار روی رشته ها از عملگرهای ریاضی استفاده کنیم حتی اگر اون ها شبیه اعداد باشند . برای مثال نمونه های زیر همگی در پایتون غیر مجاز شناخته میشن :code sample :' 2 ' - ' 1 '' eggs ' / ' easy '' apple ' * ' orange 'ولی در زبان پایتون در مورد این مساله دوتا استثنا وجود داره : عملگر + و عملگر *عملگرِ + در کار کردن با رشته ها ، عملِ پیوند رشته ای رو انجام میده به این معنی که چند رشته رو بهم میچسبونه . به مثال های زیر توجه کنید :code sample :>>> first = 'milad'>>> second = 'sadeghi'>>> first + secondmiladsadeghiعملگرِ * هم در کار با رشته ها عملِ تکرار کردن یک رشته رو انجام میده . برای مثال حاصل عبارت 3 * 'spam' میشه spamspamspam . نکته : در مثال بالا مادامی که یکی از مقادیر از نوع رشته ای هست ، باید مقدار بعدی از نوع عدد صحیح (integer) باشه .نوشتن توضیحات (comments) در داخل کد :هرچقدر که برنامه هایی که مینویسیم بزرگتر و پیچیده تر میشن ، قابلیت خوانایی اونها هم رفته رفته پایینتر میاد و وقتی که داریم به قطعه کدی از برنامه نگاه میکنیم ، به سختی میشه فهمید که اون قسمت از برنامه داره چیکار میکنه و چرا ؟به همین دلیل بهتره یادداشت هایی رو برای توضیح دادن این که هر قسمت از برنامه چه کاری رو انجام میده به برنامه مون اضافه کنیم . به این یادداشت ها اصطلاحا کامنت(comment) میگیم که با علامت # شروع میشن. برای مثال :code sample :# compute the percentage of the hour that has elapsedpercentage = (minute * 100) / 60در این مثال ، خط اول بعنوان کامنت قرار داده شده و درباره ی کاری که خط دوم قراره انجام بده توضیح میده . همچنین شما میتونید بجای نوشتن کامنت و کد در دو خط مجزا ، اونهارو در یک خط بنویسید . برای مثال :code sample :percentage = (minute * 100) / 60 # percentage of an hourنکته : هر چیزی که بعد از بعد از علامت # مینویسیم ، مفسر پایتون اون رو تا انتهای همون خط نادیده اش میگیره ؛ یعنی هیچ تاثیری روی روند اجرای برنامه مون نخواهد گذاشت .روش صحیح نوشتن کامنت برای برنامه :به مثال های زیر توجه کنید :code sample :v = 5 # assign 5 to vv = 5 # velocity in meters / secondهمونطور که میبینید در خط اول مثال بالا ، یک کامنتِ بدیهی ای نوشته شده که اطلاعات چندان مفیدی در اختیار خواننده قرار نمیده . ولی در خط دوم ، مثلا اگر برنامه ما در مورد سرعت یک خودرو داره بحث میکنه ، اون اطلاعات رو به شکل مختصر و مفید داخل کامنت قرار میدیم .نکته : قرار دادن اسامی با معنا برای متغیر ها میتونه نیاز مارو برای کامنت گذاری کمتر کنه ولی در عین حال قرار دادن اسامی طولانی برای متغیر ها باعث ایجاد عبارت های پیچیده ای میشه که خوندن اونها هم خیلی سخته .خطایابی (Debugging) :انواع خطاها در برنامه نویسی : خطای نحوی (syntax error) ، خطای زمان اجرا (runtime error) و خطای معنایی (semantic error) . برای رفع سریع این خطاها لازمه که بطور مختصر و مفید اونها رو بشناسیم (در فصل های بعد بیشتر توضیح خواهم داد ) و با تفاوت هاشون آشنا بشیم :خطای نحوی :این نوع خطا به ساختار برنامه و قوانینی که این ساختارها دارند ، اشاره میکنه . برای مثال استفاده از یک پرانتز بجای یک جفت پرانتز باز و بسته ، خطای نحوی بوجود میاره :code sample :(1 + 2) # it is legal( 8 # but it is a syntax errorنکته : چنانچه در داخل کدهای برنامه ای که نوشته ایم خطای نحوی وجود داشته باشه ، مفسر پایتون بعد از نشون دادن اخطار بلافاصله روند اجرای برنامه رو متوقف میکنه و از برنامه خارج میشه و شما قادر به اجرای برنامه نخواهید بود .خطای زمانِ اجرا :نوع دوم خطا ، خطای زمان اجرا هست ؛ دلیل این نام گذاری اینه تا زمانی که برنامه ی ما شروع به کار کردن نکنه ، خطایی ظاهر نمیشه . همچنین این نوع خطاها با نام خطای استثنا ها نیز شناخته میشن.خطای معنایی :سومین نوع خطاها ، خطای معنایی نام داره و همونطور که از اسمش پیداست ، به مفهوم و هدف برنامه مربوط میشه . اگر داخل برنامه ای که نوشته ایم خطای معنایی وجود داشته باشه ، برنامه بدون نشون دادن هیچ خطایی اجرا خواهد شد و کار خواهد کرد. اما مشکل اینجاست که برنامه ی ما کاری که ازش انتظار میره رو انجام نمیده ، در واقع کار اشتباهی که ما داخل کدهامون نوشتیم رو داره انجام میده .تمرین ها :در مثال های قبل دیدیم که n = 50 عبارت درستی هست . حالا جای طرفین مساوی رو عوض کرده و صحت عبارت جدید رو بررسی کنید .درستی عبارت x = y = 1 رو بررسی کنید .در بعضی از زبان های برنامه نویسی ، برای پایان دادن به یک عبارت از علامتِ ; استفاده میشه . بررسی کنید که اگر در پایان عباراتِ پایتون از این علامت استفاده کنیم چه اتفاقی میوفته ؟بررسی کنید که اگر در پایان عبارات پایتون از نقطه استفاده کنیم چه اتفاقی میوفته ؟در نشانه گذاری ریاضی ما میتونیم برای نشون دادن ضرب x و y از عبارت xy استفاده کنیم .اگر این کار رو در زبان پایتون انجام بدیم چه اتفاقی میوفته ؟حجم کره ای با شعاع 5 واحد چقدر است؟فرض کنید قیمت روی جلد یک کتاب 30000 تومان هست و فروشگاه مورد نظر کتاب هارو با 40 درصد تخفیف میفروشه . هزینه ارسال یک کتاب 5000 تومان هست ولی فروشگاه به ازای خرید تعداد جلدهای بیشتر ، هزینه ارسال جلدهای بعدی رو 1000 تومن حساب میکنه . قیمت کل رو به ازای خرید 60 جلد کتاب حساب کنید .خب ، اینم از پایان فصل دوم . امیدوارم که مفید باشه براتون . در فصل بعدی در مورد توابع صحبت خواهیم کرد.موفق باشید :)