آشنایی با انواع دستورات در زبان برنامه نویسی پایتون


در یک تقسیم بندی می توان دستورهای پایتون را در دو دسته ی دستورهای ساده (Simple Statements) و دستورهای مرکب (Compound Statements) قرار داد که در این آموزش قصد داریم با ذکر مثال هایی، به بررسی این دو گروه بپردازیم.

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

>>> num1 = 4 + 5
>>> message = """Welcome to
SokanAcademy.com"""
>>> num1 += 8
>>> 2 + 3 >= 6
False

همان طور که می بینیم بعضی از این دستورها خروجی خاصی ندارند، مثل سه دستور اول و در حقیقت با وارد کردن آن ها مفسر پایتون در پشت صحنه عملیات انتساب را انجام می دهد و ما بعداً می توانیم از نتایج این عملیات استفاده کنیم؛ مثلاً متغیر message که در این عملیات در حافظه ایجاد و به آبجکتی از نوع استرینگ "Welcome to SokanAcademy.com" منتسب شده است را چاپ کنیم. این در حالی است که دستور چهارم یک خروجی قابل مشاهده به ما نشان می دهد. همان طور که در این مثال ها می بینید هر یک از این دستورها را به صورت مستقل از هم در یک خط مثل دستور اول، یا در بیش از یک خط مثل دستور دوم نوشته ایم و اجرا می کنیم. در زبان پایتون اصطلاحاً به هر یک از این دستورهای ساده، یک Logical Line یا «سطر منطقی» گفته می شود. 

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

برای مثال دستورات ساده ی زیر را در نظر بگیرید:

>>> message = "Welcome to
SyntaxError: EOL while scanning string literal
>>> message = "Welcome to\
SokanAcademy.com"
>>> message = "Welcome to \ # This is a line continuation character.
SyntaxError: EOL while scanning string literal

همان طور که در دستور اول می بینید، وقتی بدون استفاده از کاراکتر \ دکمه ی اینتر را می زنیم تا ادامه ی دستور را در خط بعدی بنویسیم، مفسر پایتون بلافاصله اعلام خطای سینتکسی می کند؛ با این حال زمانی که از کاراکتر \ استفاده می کنیم به راحتی می توانیم به سطر بعدی برویم و ادامه ی دستور خود را وارد کنیم. در دستور سوم هم می بینید که بعد از قرار دادن کاراکتر \ نمی توان آن خط را ادامه داد و توضیح در آن وارد کرد، هرچند که مفسر توضیحات را نادیده می گیرد.

گرچه اکیدا توصیه می شود که دستورات ساده و مستقل از هم در خطوط جداگانه وارد شوند، با این حال برای نوشتن آن ها در یک خط کافی است بین آن ها کاراکتر ; را قرار دهیم. به مثال زیر که در حالت تعاملی IDLE وارد شده است توجه کنید:

>>> num = 2 ; num += 8 ; num
10

همان طور که می بینید در این خط سه دستور متفاوت وارد شده است که با کاراکتر ; از هم جدا شده اند.

نکته
توجه: در این حالت فراموش کردن درج کاراکتر ; (سمی کالن) بین دستورات منجر به بروز خطای سینتکسی می شود.

دستورهای مرکب:
دستورهای مرکب اجرای سایر دستورها را کنترل می کنند یا بر روند اجرای آن ها تأثیر می گذارند. به طور مثال دستورهای شرطی در این گروه جای می گیرند که در ساده ترین حالت ممکن در صورت برقراری یک شرط خاص مفسر یک سری از دستورات را اجرا می کند، و در صورتی که شرط برقرار نباشد آن دستورات را نادیده می گیرد و اجرا نمی کند (در آموزش های آتی، با دستورات شرطی بیشتر آشنا خواهیم شد.)

یک دستور مرکب از یک یا چند Clause (کلاز یا بند) تشکیل می شود. یک بند از یک سر بند یا Header و یک بدنه یا Suite تشکیل شده است. هر سر بند با یک کلمه ی کلیدی یکتا آغاز می شود و با کاراکتر دو نقطه : پایان می یابد. پیش از این لیستی از کلمات کلیدی پایتون را به شما معرفی کردیم و گفتیم این کلمات شناسه هایی هستند که به صورت پیش فرض تعریف شده اند و معنای خاصی را به مفسر پایتون می رسانند. مثال هایی از تعریف هدر برای یک بند به صورت زیر است:

if x > y:
def move():

همان طور که می بینید این هدرها با کلمات کلیدی if و def آغاز شده اند و با : پایان می یابند (در آموزش های بعدی با مفهوم هر یک از این کلمات کلیدی آشنا خواهیم شد.) بدنه، گروهی از دستورات هستند که اجرای آن ها در یک بند کنترل می شود. دستورات بدنه ی یک بند را می توان به دو صورت نوشت:

1- تمام دستورات بدنه را در همان خطی که سربند را وارد کردیم بنویسیم و در صورتی که چند دستور وجود داشته باشد آن ها را با سمی کالن ; از هم جدا کنیم. فرم کلی چنین بندی به صورت زیر خواهد بود:

Clause Header : Statement1 ; Statement2 ; …

به طور مثال:

if x > y: x = 0; y += 1; z = x+y

همان طور که می بینید در مثال بالا بدنه از سه دستور ساده تشکیل شده است که در همان خطی که هدر قرار دارد نوشته شده اند و با سمی کالن از هم جدا شده اند.

2- دستورات بدنه را در سطرهای مجزا که در یک بلوک کد مجزا از بلوک سطر سربند قرار دارند بنویسیم.  بلوک بندی دستورات در بسیاری از زبان های برنامه نویسی هم چون جاوا و سی با استفاده از آکولادهای باز و بسته {} انجام می شود؛ حال این که در پایتون برای بلوک بندی کدها از تورفتگی یا Indentation استفاده می شود. تورفتگی با استفاده از فشردن کلیدهای Space یا Tab و ایجاد فاصله از آغاز سطر مشخص می شود.

نکته
استاندارد تورفتگی در پایتون مقداری برابر با فضای خالی ایجاد شده بواسطه ی چهار بار فشردن کلید Space یا یک بار فشردن کلید Tab است. البته در زمان نیاز، IDLE به صورت خودکار تورفتگی هر بلوک را ایجاد می کند.

در ادامه، مثالی از یک دستور مرکب که به این فرم نوشته شده است را مشاهده می کنید:

if x > y:
    x = 0
    y += 1
    z = x+y
>>>

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

if x > y:
    x = 0
    y += 1
    z = x + y
age = 5

همان طور که می بینید، بدنه ی دستور مرکب if با دستور z = x + y پایان یافته است و دستور بعدی از ابتدای سطر بعد آغاز شده است و تورفتگی ندارد. در صورتی که بدنه ی یک بند را به فرم دوم بنویسیم می توانیم از دستورات مرکب تو در تو استفاده کنیم. به طور مثال در قطعه کد زیر می بینید که دستور if دوم در دستور if اول آمده است:

if x > y:
    if z > x:
        print("z is the greatest.")
    print("x is greater than y.")
print("We found the greatest.")

گفتیم که بعضی از دستورات مرکب از چند بند تشکیل می شود؛ در این صورت هدرهای تمام بندها در یک سطح از تو رفتگی قرار می گیرند. به طور مثال دستور مرکب if … else دارای دو بند است؛ بند اول با کلمه ی کلیدی if و بند دوم با کلمه ی کلیدی else آغاز می شود. بنابراین میزان تورفتگی هدر دو بند باید برابر باشد:

if x > y:
    print("x is greater than y.")
else:
    print("y is greater than x.")

در این دستور مرکب انتظار داریم اگر شرط if برقرار بود بدنه ی بند اول دستور و در غیر این صورت بدنه ی بند دوم اجرا گردد.

لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
reza.babakhani
reza.babakhani
سلام
We found the greatest در مثال مشکل داره و بین " " قرار نداره
با تشکر از سایت خوبتون
ادمین سایت
ادمین سایت
با سلام و تشکر از تذکر شما کاربر گرامی،
احتراماً به عرض می‌رسانیم که کد اصلاح گردید.


با تشکر
ارادتمند
تیم سکان آکادمی

در پاسخ به

useramin47
useramin47
سلام
یه سوال داشتم
فایل اسکریپتی که ذخیره میکنم وقتی میخوام اجرا کنم سریعا بیرون میپره

را حل رو اگه میشه بفرمایید
با تشکر از سایت خوبتون
کاربر میهمان
کاربر میهمان
با سلام وخسته نباشید - بنده از ورژن 2.3 پایتون استفاده میکنم - در کتاب آموزشی پایتون نوشته شده که در دستور پرینت جهت نگه داشتن مکان نما در همان خط میتوان از کاراکتر کنترلی 't' استفاده کرد ولی در برنامه جدول ضرب عملا این دستور کاری انجام نمیدهد لطفا راهنمایی بفرمایید
a.r.j.f
a.r.j.f
نسخه ای که این سایت آموزش میدهد نسخه ۳.۵ هست و بیشتر دستورات این نسخه با نسخه ۲.۳ فرق میکنه پیشنهاد میکنم از نسخه ۳ استفاده کنید

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام من قطعه کد آخری رو که تو IDLE وارد میکنم ارور میده میشه توضیح بدین چرا؟
محمدهادی
محمدهادی
else رو بچسبون به سمت چپ. ینی هیچ فاصله نده.
یا شاید x یا y رو تعرف نکردی قبلش. ینی بهش عددی ندادی.

در پاسخ به

کاربر میهمان
کاربر میهمان
سلام دوستان ، می خواستم بدونم در برنامه نویسی چرا رنگ بعضی از کد های دستوری متفاوت است
با تشکر .
سجاد
سجاد
سلام و با تشکر فراوان از سایت و مطلب خوبتون
یک سوال دارم 1=+ y یهنی چی؟ ممنون میشم ک پاسخ بدید
با تشکر
محمد صالح
محمد صالح
سلام یعنی 1+y=y

در پاسخ به

aherehef
aherehef
با تشکر فراوان از سکان آکادمی.سایتتون روهم خیلی دوست دارم.چرا سرعت پست گذاشتنتون کمه؟/توی این آموزش/
کاربر میهمان
کاربر میهمان
سلام. تا اینجا که عالی بود ! یعنی میشه همینجوری ادمه بدید و پولیش نکنید ؟:( اگه آموزش های اندروید استودیو رو هم بذارید عالی تر میشه مرسی
ادمین سایت
ادمین سایت
سلام
ضمن تشکر از شما کاربر گرامی
احتراما به استحضار می رساند که این دوره تا انتها رایگان در دسترس علاقمندان قرار خواهد گرفت

با تشکر
ارادتمند
تیم سکان آکادمی

در پاسخ به

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

با تشکر از شما
ارادتمند
تیم سکان آکادمی

در پاسخ به

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