oruji.github.io
oruji.github.ioPersian Tutorials
ویرایش: 1396/11/2 20:41
A A

آموزش متغیرها، عبارات و جمله ها در پایتون

مقادیر و نوع ها

مقدار (value) یکی از چیز های پایه می باشد که یک برنامه با آن سر و کار دارد، مانند یک حرف یا یک عدد.

این مقادیر متعلق به نوع های مختلفی می باشد: عدد 2 یک integer می باشد، و 'Hello, World!' یک رشته، زیرا رشته ای از حروف می باشد. شما (و مفسر) می توانید رشته ها را تشخیص دهید چرا که رشته ها درون علامت کتیشن قرار می گیرند.

در صورتی که نوع یک مقدار را نمی دانید، مفسر می تواند به شما نوع آن مقدار را نشان دهد.

>>> type('Hello, World!') <type 'str'> >>> type(17) <type 'int'>

موضوع عجیبی نیست، رشته ها متعلق به نوع str و اعداد متعلق به نوع int می باشند. بدیهی است که اعداد اعشاری متعلق به نوع float می باشند. چرا که این اعداد در قالب اعشاری نمایش داده می شوند.

>>> type(3.2) <type 'float'>

گاهی اوقات مقادیر به شکل '17' و یا '3.2' نمایش داده می شوند، تکلیف این مقادیر چه می شود؟ این مقادیر شبیه به اعداد هستند، ولی درون علامت کتیشن قرار گرفته اند مانند رشته ها.

>>> type('17') <type 'str'> >>> type('3.2') <type 'str'>

نوع این نوع مقادیر نیز رشته می باشد.

زمانی که می خواهید یک عدد طولانی را تایپ کنید، ممکن است بخواهید بین آن رقم سه رقم از کاما استفاده کنید، مانند 1,000,000. این یک نوع integer قانونی در پایتون به شمار نمی آید، ولی موردی نخواهد داشت:

>>> 1,000,000 (1, 0, 0)

خوب، خروجی فوق به هیچ وجه چیزی نیست که ما انتظار داشتیم! پایتون 1,000,000 را ترتیبی از integer های جدا شده توسط کاما تفسیر می کند. این اولین مثال خطای معنایی است که مشاهده کردیم: کد بدون تولید هیج پیام خطایی اجرا می شود، ولی کاری درست را انجام نی دهد.

متغیرها

یکی از قدرتمند ترین خصوصیات یک زبان برنامه نویسی توانایی مدیریت متغیرها می باشد. متغیر نامی است که به یک مقدار نسبت داده می شود.

یک عبارت مقدار دهی، متغیرهای جدید را ایجاد و به آن ها مقادیر می دهد.

>>> message = 'And now for something completely different' >>> n = 17 >>> pi = 3.1415926535897932

مثال فوق سه مورد مقدار دهی را نشان می دهد. اولی متغیری با نام message را مقدار دهی می کند. دومی عدد 17 را درون n می ریزد و سومی مقدار تقریبی عدد π را درون pi می ریزد.

رایج ترین روش برای نمایش متغیرها بر روی کاغذ، نوشتن نام نام متغیر به همراه یک پیکان که به مقدار متغیر اشاره می کند می باشد. این حالت نمایش را state diagram می نامند، به این دلیل که در این حالت وضعیتی که هر متغیر در آن است را نشان می دهد. شکل 1.1 نتیجه مثال قبل را نشان می دهد.

شکل

شکل 1-1

شکل 1-1

در واقع نوع یک متغیر، نوع مقداری است که به آن متغیر نسبت داده شده است.

>>> type(message) <type 'str'> >>> type(n) <type 'int'> >>> type(pi) <type 'float'>

تمرین 1

در صورتی که یک مقدار integer را با یک صفر در اول آن تایپ کنید، ممکن است با یک خطای گیچ کننده مواجه شوید:

>>> zipcode = 02492 ^ SyntaxError: invalid token

اعداد دیگری با این حالت به نظر می رسد بدون خطا کار می کنند، ولی خروجی عجیب و غریب است:

>>> zipcode = 02132 >>> zipcode 1114

آیا می توانید بیابید که موضوع از چه قرار است؟ اشاره: مقادیر 01، 010، 0100 و 01000 را در خروجی امتحان کنید.

نام متغیرها و کلمات کلیدی

برنامه نویسان معمولا اسامی معناداری برای متغیرهای خود انتخاب می کنند، آن ها دلیل استفاده هر متغیر را توضیح می دهند.

نام متغیر می تواند به طور دلخواه نامی بلند باشد. نام متغیر می تواند ترکیبی از حروف و عدد باشد، ولی نام متغیر می بایست با حرف شروع شود. معمولا از حروف بزرگ استفاده نمیشود، ولی ایده بدی نیست که نام متغیرها با یک حرف کوچک شروع شود.

می توان از کاراکتر خط تیره (ـ) درون نام متغیر استفاده کرد. این کاراکتر معمولا برای نام هاییی که در آن ها چندین لغت به کار رفته استفاده می شود مانند my_name یا airspeed_of_unladen_swallow

در صورتی از یک نام غیر قانونی درون کد استفاده کنید، با خطای syntax مواجه خواهید شد.

>>> 76trombones = 'big parade' SyntaxError: invalid syntax >>> more@ = 1000000 SyntaxError: invalid syntax >>> class = 'Advanced Theoretical Zymurgy' SyntaxError: invalid syntax

متغیر 76trombones به دلیل اینکه با حرف شروع نشده است نامی غیر قانونی است. متغیر more@ به دلیل اینکه دارای یک کاراکتر غیر قانونی است استفاده از جایز نیس. ولی مشکل متغیر class چیست؟

نام class یکی از کلمات کلیدی پایتون می باشد. مفسر از کلمات کلیدی برای تشخیص ساختار برنامه استفاده می کند، و کلامت کلیدی نمی توانند برای نام متغیر استفاده شوند.

پایتون نسخه 2 دارای 31 کلمه کلیدی می باشد:

and del from not while as elif global or with assert else if pass yield break except import print class exec in raise continue finally is return def for lambda try

در پایتون نسخه 3، exec دیگر یک کلمه کلیدی نبوده، ولی nonlocal یک کلمه کلیدی می باشد.

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

عملگرها و عملوندها

عملگرها (Operators) نمادهای خاصی می باشند که محاسبات را نمایش می دهند، مانند عملات جمع و ضرب. مقادیری که عملگر بر آن ها اعمال می شود را عملوند (Operands) می نامند.

همانطور که در مثال زیر مشاهده می کنید، عملگرهای ، -، *، / و ** به ترتیب عملیات جمع، تفریق، ضرب، تقسیم و به توان رساندن را انجام می دهند.

20 32 hour-1 hour*60 minute minute/60 5**2 (5 9)*(15-7)

در بعضی زبان های برنامه نویسی، علامت ^ برای عملات توان استفاده شده است، ولی در پایتون این علامت برای عمگر بیتی که XOR نامیده می شود استفاده شده است. در مورد عمگرهای بیتی بعدا صحبت خواهیم کرد، ولی در صورت تمایل می توانید به http://wiki.python.org/moin/BitwiseOperators مراجعه کنید.

در پایتون نسخه 2 عملگر تقسیم ممکن است کاری را که شما دقیقا انتظار انجام آن را دارید، انجام ندهد.

>>> minute = 59 >>> minute/60 0

مقدار متغیر minute عدد 59 می باشد، و بر طبق قوانین حساب، 59 تقسیم بر 60 می شود 0.9833، نه 0. دلیل این تفاوت به این خاطر است که پایتون برای تقسیم از floor division استفاده می کند بدین معنی که نتیجه تقسیم را به سمت عدد کمتر گرد می کند. در صورتی که مقادیر تقسیم شده بر یکدیگر هر دو integer باشند، نتیجه تقسیم نیز integer خواهد بود.

در پایتون نسخه 3، نتیجه تقسیم فوق یک مقدار اعشاری است. و عملگر جدید // کار floor division را انجام می دهد.

>>> minute/60.0 0.98333333333333328

عبارات و جمله ها

عبارت (expression) ترکیبی از مقادیر، متغیرها و عملگرهاست. یک مقدار به تنهایی می تواند یک عبارت باشد، متغیر نیز به همین ترتیب، بنابراین بنابراین 3 خط زیر همگی عبارات قانونی پایتون به حساب می آیند (با فرض اینکه مقداری به متغیر X تخصیص داده شده است):

17 x x 17

یک جمله (statement) بخشی از کد می باشد که مفسر می تواند آن را اجرا کند. تا اینجا ما با دو جمله آشنا شدیم: print و تخصیص مقادیر (assignment).

از نظر تکنیکی یک عبارت همچنین یک جمله نیز هست، ولی شاید ساده تر باشد که فکر کنیم این دو از یکدیگر متفاوت هستند.

حالت interactive و script

یک از مزایای کار با زبان های اسکریپتی این است که می توان تکه کدها را قبل از اینکه درون script خود قرار دهید درون interactive امتحان کنید. ولی تفاوت هایی بین حالت interactive و حالت script وجود دارند که می توانند کمی گیج کننده باشند.

برای مثال، در صورتی که در حال استفاده از پایتون به عنوان یک ماشین حساب می باشید، ممکن است تایپ کنید

>>> miles = 26.2 >>> miles * 1.61 42.182

خط اول یک مقدار را درون متغیر miles قرار می دهد، ولی این عبارت هیچ خروجی ندارد. در خط دوم عبارت توسط مفسر پایتون محاسبه شده و نتیجه آن نمایش داده می شود.

ولی در صورتیکه شما کد فوق را درون script نوشته و اجرا کنید، به هیچ وجه، هیچ خروجی مشاهده نخواهید کرد. در حالت script یک عبارت به تنهایی، هیچ خروجی نخواهد داشت. در واقع پایتون عبارت را محاسبه می کند، ولی هیچ مقداری را نمایش نخواهد داد مگر اینکه به آن گفته شود:

miles = 26.2 print miles * 1.61

این رفتار می تواند در ابتدا کمی گیج کننده باشد.

script معمولا حاوی ترتیبی از جمله ها می باشد. در صورتیکه بیشتر از یک جمله وجود داشته باشد، نتیجه ها در یک زمان بعد از اجرا ظاهر خواهند شد.

برای مثال:

print 1 x = 2 print x

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

1 2

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

تمرین 2

جملات زیر را درون interactive پایتون تایپ کنید و خروجی را مشاهده کنید:

5 x = 5 x 1

حالا کد فوق را درون یک script قرار داده و آن را اجرا کنید. خروجی آن چیست؟ script را ویرایش کرده و هر عبارت را درون یک جمله print قرار دهید و سپس آن را دوباره اجرا کنید.

ترتیب عملگرها

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

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

عملگرهای رشته

به طور کلی، نمی توان عملگرهای ریاضی را بر روی رشته ها انجام داد، حتی اگر رشته مورد نظر شبیه به عدد باشد، بنابراین عبارات زیر صحیح نمی باشند:

'2'-'1' 'eggs'/'easy' 'third'*'a charm'

عملگر برای رشته ها استفاده می شود، ولی ممکن است چیزی که شما انتظار دارید نباشد: این عملگر عمل contatenation را انجام می دهد، بدین معنی که رشته ها را به یکدیگر متصل می کند. برای مثال:

first = 'throat' second = 'warbler' print first second

خروجی برنامه فوق کلمه throatwarbler می باشد.

همچنین عملگر * نیز برای رشته ها استفاده می شود. این عملگر باعث تکرار رشته می شود. برای مثال، 'Spam' * 3 می شود 'SpamSpamSpam'. در صورتیکه یکی از عملوند ها رشته باشد، دیگری باید یک integer باشد.

استفاده فوق از و * شباهت معناداری با جمع و ضرب را تداعی می کند. 3 * 4 برابر است با 4 4 4، ما فرض می کنیم که 'Spam' * 3 نیز به همین شکل است 'Spam' 'Spam' 'Spam'. از سوی دیگر تفاوت قابل توجهی در تکرار و به هم متصل کردن رشته ها با جمع و ضرب رشته وجود دارد.Can you think of a property that addition has that string concatenation does not?

کامنت ها

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

به همین دلیل، ایده بدی نیست که برای توضیح قسمت هایی از کد، یادداشت هایی را درون برنامه اضافه کنیم. به این یادداشت ها کامنت می گویند که با علامت # آغاز می شوند:

# compute the percentage of the hour that has elapsed percentage = (minute * 100) / 60

در مثال فوق، کامنت در یک خط قرار داده شده است. همچنین می توان کامنت را در انتهای یک خط نیز قرار داد.

percentage = (minute * 100) / 60 # percentage of an hour

همه چیز از علامت # به بعد تا انتهای خط نادیده گرفته خواهد شد، بدین معنی که هیچ تاثیری در برنامه نخواهد گذاشت.

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

کامنت زیر زائد و بدون استفاده است:

v = 5 # assign 5 to v

کامنت زیر حاوی اطلاعات مفیدی است که درون کد وجود ندارد:

v = 5 # velocity in meters/second.

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