هنر برنامه نویسی با پایتون ، بخش پنجم : تصمیم گیری و هدایت جریان برنامه

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

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

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

اگر  چراغ راهنمایی سبز است   آنگاه   به حرکت خود ادامه دهید

اگر چراغ راهنمایی قرمز است   آنگاه   خودرو را از حرکت باز بدارید.

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

مثال 1: تصمیم گیری یک پزشک برای تجویز دارو برای تب

اگر دمای بدن بیمار بالای 38 درجه سانتی گراد است و بیمار بزرگسال است آنگاه  به بیمار قرص آسپرین بدهید.

مثال 2 : تصمیم گیری یک باغبان برای سم پاشی درختان باغ

اگر  اواخر زمستان یا اوایل بهار است و هوا بارانی نیست آنگاه درختان را سم پاشی کنید.

مثال 3: تصمیم گیری یک فعال بازار

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

مثال4 : تصمیم گیری در اداره مالی یک دانشگاه

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

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

دستور if

ساده ترین روش برای تصمیم گیری و هدایت جریان برنامه در زبان پایتون بکارگیری دستور if است با استفاده از این دستور می توان مفسر پایتون را وادار کرد تا به هنگام اجرای برنامه  یک و یا بیش از یک شرط را بررسی کند و در صورت درست بودن شرط یا شرط های بررسی شده  ، یک یا چند دستور نوشته شده درون بدنه دستور if را اجرا کند.


هر دستور ساده if از چها بخش اصلی تشکیل شده است :

1- رهنمون if

2- بخش شرط که می تواند یک و یا بیش از یک گزاره منطقی و یا مقایسه ای و یا آمیزه ای از هردو نوع را در برداشته باشد. به زبان ساده می توان گفت که در بخش شرط یک دستور if تنها می توان از عملگرهای منطقی و یا مقایسه ای استفاده کرد.

3- بخش  آنگاه  که با نویسه دو نقطه بیانی ( : ) نشان داده می شود و پس از بخش شرط قرار می گیرد.

 4- بدنه if که می تواند یک و یا بیش از یک دستور و عبارت زبان پایتون را در بر داشته باشد. دستورات موجود در بدنه باید با استفاده از یک یا چند فاصله نسبت به if تورفتگی داشته باشند .مقدار تورفتگی را برنامه نویس به دلخواه انتخاب می کند اما باید تا پایان قطعه کد بدنه ثابت باقی بماند. بیشتر برنامه نویسان برای ایجاد تورفتگی از چهار فاصله خالی استفاده می کنند . پس به یاد داشته باشید که : بدنه  if با تورفتگی نسبت به خود دستور آغاز می شود. و با اولین دستور بدون تو رفتگی پایان می یابد.

شکل کلی دستور if  :

If   بخش شرط  :

        بدنه   

مثال :

a=20

b=15

if   a>b:

     print ("a greater than b")


لازم به یادآوری است که در بیشتر زبان های برنامه نویسی یک قطعه کد مستقل برای مثال بدنه دستور if را با استفاده از نشانه کمانک باز و بسته {} از دیگر بخش های کد جدا می کنند یعنی شروع قطعه کد با کمانک باز  }  و پایان آن با کمانک بسته {  مشخص می گردد. برای مثال بدنه دستور if در زبان برنامه نویسی c++ به شکل  زیر است :

if (شرط یا شرطها)

{

  دستورات درون بدنه;

 }

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

بخش else  در دستور if :

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

  اگر         شرط/ شرطها         آنگاه      دستور/ دستورات       وگرنه       دستور/ دستورات 

که به زبان پایتون همانند نمونه زیر نوشته می شود :

if    شرطها      :

  دستورات بخش if          

else

        دستورات پس از         else

لازم به گفتن است که رعایت اصل تورفتگی قطعه کد بدنه در بخش else دستور if  الزامی است.

نمودار جریان داده دستور if     else   به شکل زیر است :


مثال : برنامه ای بنویسید که زوج یا فرد بودن عددی را بررسی کرده و چنانچه عدد زوج باشد مربع آنرا چاپ کند وگرنه خود عدد را در خروجی نمایش دهد.

num=80

if    num % 2  == 0  :

            Print(num*num)

else

           Print(num)

مثال : برنامه ای بنویسید که قدر مطلق یک عدد را در خروجی چاپ کند

حل : می دانیم که از نظر ریاضی قدرمطلق یک عدد حقیقی x که با نماد |x| نمایش داده می شود یک عدد همواره مثبت و یا صفر است بنا بر این چنانچه x یک عدد حقیقی مثبت و یا صفر باشد آنگاه |x|=x و چنانچه x یک عدد حقیقی منفی باشد آنگاه |x|= - x برای مثال :

|2|=2

|-5|= - (-) = +5

|0|=0

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

 

number =55

if  number >=0 :

            print (number)

else

            print ( - number)

 بخش elif در دستور if :

گاهی  نرم افزار ناچار است تا بر اساس حالت های مختلف یک مسئله تصمیم گیری کند و بسته به اینکه ورودی های مسئله با شرایط تعریف شده در کدام یک از حالت های تعریف شده  سازگار است کار جداگانه ای را به سرانجام رساند. برای مثال فرض کنید شرکت های برق برای محاسبه بهای برق مصرفی  مشترکین خانگی چهار حالت مختف زیر را بر اساس میزان مصرف مشترک در یک بازه زمانی یکماهه تعریف می کنند و برای هر یک تعرفه ویژه ای را در نظر می گیرند :

1- تعرفه مصرف تا 100 کیلووات ساعت (kwh)برابر 524 ریال برای هرkwh است.

2- تعرفه مصرف از 101 تا 200 کیلو وات ساعت برابر 611 ریال برای هرkwh است.

3- تعرفه مصرف از 201 تا 300 کیلو وات ساعت برابر 1310 ریال برای هرkwh است.

4- تعرفه مصرف بیش از 300 کیلووات ساعت برابر 1550 ریال برای هرkwh است.

ساده ترین راه برای نوشتن برنامه ای که بتواند بهای برق مصرفی یک مشترک خانگی را محاسبه و چاپ کند استفاده از چهار دستور ساده if است اما پایتون راه حل بهتری برای حل چنین مسائلی دارد و آن استفاده از بخش elif در دستور if است که در برنامه زیر بکار رفته است. elif ساده شده عبارت else if است که به صورت ((در غیر این صورت اگر)) خوانده می شود.

 

 

 

 

CustomerKWH=280 

TotalCost=0

if    CustomerKWH < = 100 :

           TotalCost= CustomerKWH * 524

elif   CustomerKWH >101 and  CustomerKWH<=200 :

            TotalCost= CustomerKWH * 611

elif   CustomerKWH >201 and  CustomerKWH<=300 :

            TotalCost= CustomerKWH * 1310

elif  CustomerKWH >300 :

            TotalCost= CustomerKWH * 1550

print(TotalCost)

مثال : شاخص توده بدنی  (BMI) یک معیار مهم در پزشکی است و برای اندازه گیری سلامت وزن افراد  نسبت به قد آنان بکار می رود. و به کمک آن می توان گفت که فرد دارای اضافه وزن و یا کمبود وزن است . برای محاسبه BMI کافیست تا وزن فرد را بر مربع قد وی تقسیم کنید یکای اندازه گیری وزن باید کیلوگرم (Kg) و یکای اندازه گیری قد باید متر(m) باشد.

بسته به اینکه BMI محاسبه شده چه مقداری داشته باشد یک از چهار حالت زیر رخ خواهد داد :

1- BMI کمتر از 18.5 به معنی کمبود وزن است

2- BMI بین 18.5 تا 24.5 به معنای سلامت وزن است

3- BMI بین 25 تا 29.9 به معنای اضافه وزن است

4- BMI بیشتر از 30  به معنای چاقی است.

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

 

StudentHeight=1.5

StudentWeight=45

BMI= StudentWeight/ StudentHeight**2

if  BMI<18.5  :

print("فرد دارای کمبود وزن است")

elif  BMI >= 18.5  and  BMI <= 24.5  :

            print("فرد سلامت وزن دارد")

elif  BMI >= 25  and  BMI <= 30  :

            print("فرد دارای اضافه وزن است")

elif BMI>30

            print("فرد چاق است")

 

مثال :  المپیک 2020 توکیو در زمانی برگزار گردید که جهان با بحران همه گیری کرونا دست به گریبان بود ، در این رویداد جهانی بیش از ده هزار ورزشکار از کشورهای مختلف جهان شرکت کردند از این رو یکی از مهمترین چالش های فراروی دست اندرکاران برگزاری این مسابقات این بود که ورزشکاران در چه مکانی و در چه شرایطی باید اسکان داده شوند تا فاصله گذاری اجتماعی  بیشینه وانتقال ویروس در بین ورزشکاران کمینه گردد. سرانجام ژاپنی ها تصمیم گرفتند تا با ایجاد یک دهکده بزرگ به مساحت بیش از 44 هکتار و دارای 21 ساختمان مسکونی مجهز به 3800 واحد اقامتی بر این چالش چیره شوند فرض کنید انتقال ورزشکاران به هریک از این ساختمان ها بر اساس کشور ورزشکار انجام می شود برنامه ای بنویسید که بر اساس حالت های ذیل ساختمان محل اسکان هر ورزشکار را در خروجی چاپ کند.(برای راحتی کار تنها چهار حالت در نظر گرفته شده است در حالی که برنامه واقعی به 21 حالت نیاز خواهد داشت)  

1- ورزشکاران کشورهای ایران ، یونان و ارمنستان در ساختمان شماره 1

2- ورزشکاران آمریکا ، ایتالیا و آلمان در ساختمان شماره 2

3- ورزشکاران هند ، مصر و چین در ساختمان شماره 3

4-  ورزشکاران دیگر کشورها در ساختمانی  به انتخاب  مدیراجرایی دهکده المپیک  اسکان داده خواهند شد.

 

country="iran"

if  country =="iran"  or country =="greece"  or country =="armenia"   :

print("اسکان در ساختمان شماره 1")

elif  country =="united state"  or country =="italy" or country =="germany"  :

print("اسکان در ساختمان شماره 2")

elif  country =="india"  or country =="egypt" or country =="china"  :

print("اسکان در ساختمان شماره 3")

else

            print("بر اساس انتخاب مدیر اجرایی")

همانگونه که در مثال های بالا دیده می شود ، حالت کلی استفاده از بخش  elif درساختار دستور if  همانند الگوی زیر است :

 

if  شرط   :

      دستورات

elif شرط :

    دستورات    

elif  شرط

        دستورات

else:

       دستورات

در این الگو، مفسر شرط ها را از بالا به پایین بررسی می‌کند و با رسیدن به شرطی  با مقدار true دستورموجود در بدنه آن شرط را اجرا می کند و با خروج از ساختار if دیگر شرط ها را نادیده می گیرد. اگر هیچ‌یک از شرط ها درست (true) نبود، دستور موجود در بدنه  else پایانی اجرا خواهد شداگر else پایانی را در الگوی بالا قرار ندهید و همه‌ی شرط ها مقدار false داشته باشند، آنگاه مفسر بدون اجرای هیچ یک از دستورات موجود در ساختار if از این ساختار خارج شده وبا اجرای اولین دستور پس از این ساختار ، اجرای برنامه اصلی را پی خواهد گرفت.

 If های تودرتو

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

1- اگر کارمند با خودروی دولتی دارای راننده به ماموریت اعزام گردد بر اساس فاصله مبدا تا مقصد هزینه ماموریت روزانه به صورت زیر پرداخت گردد :

کمتر از 10 کیلومتر  0 ریال

از 10 تا 50 کیلومتر  750000 ریال

بیش از 50 کیلومتر 1150000 ریال

2- اگر کارمند با خودروی دولتی و بدون راننده به ماموریت اعزام گردد بر اساس فاصله مبدا تا مقصد ، هزینه ماموریت روزانه به صورت زیر پرداخت گردد :

کمتر از 10 کیلومتر  250000 ریال

از 10 تا 50 کیلومتر  1250000 ریال

بیش از 50 کیلومتر 1750000 ریال

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


HaveDriver = False #کارمند به همراه راننده به ماموریت اعزام شده است یا بدون راننده

Distance = 75  # فاصله میدا تا مقصد در به کیلومتر

Cost = 0               #هزینه ماموریت روزانه

if  HaveDriver == True:

      if  Distance < 10:

           Cost=0

      elif  Cost >= 10 and  Distance <= 50:

           Cost = 750000

      else:

           Cost = 1150000

else:

      if  Distance < 10:

           Cost = 250000

      elif  Cost >= 10 and  Distance <= 50:

           Cost = 1250000

      else :

           Cost = 1750000

print(Cost)

پایان بخش پنجم هنر برنامه نویسی با پایتون

محمد ایزانلو

اردیبهشت 1401

نظرات 0 + ارسال نظر
امکان ثبت نظر جدید برای این مطلب وجود ندارد.