Control flow و شرط در پایتون به همراه چند پروژه مفید
Control flow یا “کنترل جریان” در برنامهنویسی، بیانگر ترتیبی است که دستورات و عملیات در یک برنامه کامپیوتری اجرا میشوند. برخی از مفاهیم اصلی در کنترل جریان عبارتاند از:
Control flow یا “کنترل جریان”
کنترل جریان یا Control flow در هر زبان برنامهنویسی ای مانند Python، بخش ضروری از نوشتن برنامههای کاربردی است. برخی از موارد کلیدی استفاده از کنترل جریان عبارتند از:
- تصمیمگیری بر اساس شرایط: در بسیاری از موارد، برنامه باید تصمیماتی بر اساس وضعیت خاصی اتخاذ کند. مثلاً، برنامه میتواند چک کند که آیا یک کاربر وارد سیستم شده است یا خیر، و بسته به نتیجه، کارهای مختلفی را انجام دهد. این امر با استفاده از عبارات شرطی مانند
if
,elif
وelse
انجام میشود. - تکرار عملیات: در برخی از موارد، برنامه باید یک عملیات را چندین بار تکرار کند. به عنوان مثال، میتوان یک لیست از اعداد را مرور کرد و هر عدد را به دو ضرب کرد. این امر با استفاده از حلقهها مانند
for
وwhile
انجام میشود. - مدیریت خطاها و استثناها: وقتی با دادههای ورودی نامعتبر یا شرایط خطای غیر منتظره مواجه میشویم، میخواهیم بتوانیم به صورت مناسب با آنها برخورد کنیم. با استفاده از بلاکهای
try
وexcept
میتوانیم این خطاها را مدیریت کنیم و از خراب شدن کل برنامه جلوگیری کنیم. -
ساختمانهای کد مرتبط: زمانی که یک بخش خاص از کد را چندین بار استفاده میکنیم، میتوانیم آن را در یک تابع یا متد جداگانه قرار دهیم. این کار باعث میشود کد ما تمیزتر، خواناتر و قابل نگهداری تر باشد. با استفاده از کنترل جریان میتوانیم تصمیم بگیریم که کدام تابع یا متد باید در زمان خاصی اجرا شود.
انواع Control flow ها در پایتون:
- شرطی (
if
,elif
,else
): این ابزارها به برنامه اجازه میدهند تا بر اساس برخورد یک شرط، کد مختلفی را اجرا کند. اگر شرطif
برقرار باشد، بلوک کد مربوطه اجرا میشود. اگر نباشد، برنامه به شرطهایelif
(اگر وجود داشته باشد) میپردازد و اگر هیچ یک از شرایط برقرار نباشد، بلوک کدelse
(اگر وجود داشته باشد) اجرا میشود. - حلقهها (
for
,while
): حلقهها به برنامه اجازه میدهند تا یک بلوک کد را به طور مکرر اجرا کند. حلقهfor
معمولاً برای اجرای کد به تعداد دفعات مشخص استفاده میشود، در حالی که حلقهwhile
کد را تا زمانی که شرط مشخصی برقرار است، اجرا میکند. - کنترل کنترل جریان (Control flow) با استفاده از
break
وcontinue
:break
وcontinue
دستوراتی هستند که میتوانند کنترل جریان (Control flow) در حلقهها را تغییر دهند.break
باعث میشود حلقه فوراً پایان یابد، در حالی کهcontinue
باعث میشود برنامه به دور بعدی حلقه بپردازد و بخش باقیمانده از حلقه فعلی را نادیده بگیرد. - توابع و زیربرنامهها: توابع و زیربرنامهها اجازه میدهند تا بخشهایی از کد را در یک برنامه جدا کنیم و به صورت مستقل اجرا کنیم. این امکان باعث میشود کد قابل مدیریتتر و خواندنیتر باشد و از تکرار کد جلوگیری کند.
- استثناها و خطاها: ممکن است هنگام اجرای برنامه، خطاهایی رخ دهد. با استفاده از try/except، میتوانیم برخی از این خطاها را مدیریت کنیم. این باعث میشود برنامه به جای اینکه کاملاً متوقف شود، بتواند به طور مناسب به خطاها و استثناها واکنش نشان دهد.
همانطور که بالا نیز گفته شد “شرطی” یکی از اصول اصلی برنامه نویسی است که برنامه نویسان به کمک آن می توانند برای کد های خود شرایط خاص تعریف کنند و در صورت برآورده شدن آن شرایط، کد مورد نظر اجرا شود. در زبان برنامه نویسی پایتون، برای تعریف شرطی از ساختارهای “if”، “elif” و “else” استفاده می شود.
1. ساختار if
:
این ساختار برای اجرای یک بلوک کد در صورتی که یک شرط برقرار باشد، استفاده می شود. ساختار کلی آن به شکل زیر است:
if condition: # code to execute if condition is True
مثال:
x = 10 if x > 0: print("x is positive")
در این مثال، اگر مقدار x بیشتر از 0 باشد، عبارت “x is positive” چاپ می شود.
2. ساختار elif
:
elif
کوتاه شده else if
است و برای بررسی شرایط بیشتر پس از شرط if
اصلی استفاده می شود. ساختار کلی آن به شکل زیر است:
if condition1: # code to execute if condition1 is True elif condition2: # code to execute if condition1 is False and condition2 is True
مثال:
x = 10 if x > 0: print("x is positive") elif x == 0: print("x is zero")
در این مثال، اگر x برابر با 0 باشد و شرط اصلی (x > 0
) برقرار نباشد، عبارت “x is zero” چاپ می شود.
3. ساختار else
:
else
برای مشخص کردن بلوک کدی استفاده می شود که در صورتی که هیچ کدام از شرایط if
یا elif
برقرار نباشند، اجرا می شود. ساختار کلی آن به شکل زیر است:
if condition1: # code to execute if condition1 is True elif condition2: # code to execute if condition1 is False and condition2 is True else: # code to execute if neither condition1 nor condition2 is True
مثال:
x = -10 if x > 0: print("x is positive") elif x == 0: print("x is zero") else: print("x is negative")
در این مثال، اگر هیچ کدام از شرایط x > 0
یا x == 0
برقرار نباشند، عبارت “x is negative” چاپ می شود.
نکته مهم این است که شما می توانید تعداد دلخواهی elif
بعد از if
اصلی داشته باشید ولی else
فقط یک بار و در انتهای همه شرایط می تواند استفاده شود.
این برنامه ساده در پایتون، عدد وارد شده توسط کاربر را چک میکند که آیا زوج است یا فرد:
number = int(input("Which number do you want to check? ")) if number % 2 == 0: print("even") else: print("odd ")
در اینجا توضیح کاملی از کد بالا ارائه میدهم:
- ابتدا، از کاربر خواسته میشود یک عدد وارد کند. تابع
input()
این امکان را فراهم میکند. پیام"Which number do you want to check? "
به عنوان یک رشته به تابعinput()
داده شده است و کاربر پس از مشاهده این پیام، عدد خود را وارد میکند. - تابع
input()
به طور پیش فرض مقداری که توسط کاربر وارد شده است را به عنوان یک رشته برمیگرداند. با توجه به اینکه میخواهیم با این مقدار به عنوان یک عدد کار کنیم، تابعint()
استفاده شده است تا رشته ورودی را به عدد صحیح تبدیل کند. - در بخش بعدی کد، شرط
if
بررسی میکند که آیا عدد وارد شده توسط کاربر بر 2 بخشپذیر است یا خیر. عملگر%
باقیمانده تقسیم عدد اول بر عدد دوم را برمیگرداند. اگر عدد وارد شده توسط کاربر بر 2 بخشپذیر باشد، باقیمانده صفر خواهد بود. - اگر
number % 2 == 0
صحیح باشد (یعنی عدد بر دو بخشپذیر باشد)، برنامه پیام"even"
را چاپ میکند. اگر این شرط صحیح نباشد (یعنی عدد بر دو بخشپذیر نباشد و پس فرد است)، برنامه به بخشelse
میرود و پیام"odd"
را چاپ میکند.
در ادامه، چندین نکته مهم در مورد استفاده از شرطی if
, elif
, else
در پایتون را بررسی می کنیم:
- توجه به تورفتگی: در پایتون، برخلاف برخی از زبانهای دیگر برنامهنویسی، شما باید از تورفتگی (indentation) استفاده کنید تا بلوکهای کد را تعریف کنید. برای مثال، کدی که باید در صورت برقراری شرط
if
اجرا شود، باید توسط یک تب (یا چهار فاصله) به سمت راست منتقل شود. - استفاده از عملگرهای مقایسهای: در شرط
if
وelif
، میتوانید از عملگرهای مقایسهای متعددی استفاده کنید، از جمله==
(برابر است)،!=
(برابر نیست)،<
(کمتر است)،>
(بیشتر است)،<=
(کمتر یا مساوی است) و>=
(بیشتر یا مساوی است). - شرایط مرکب: شما همچنین میتوانید با استفاده از عملگرهای
and
وor
وnot
، شرایط مرکب بسازید. برای مثال:if x > 0 and x < 10:
. - بررسی شرایط متعدد با
elif
:elif
به شما اجازه میدهد تا شرایط متعدد را بررسی کنید. پایتون از بالا به پایین شرایط را بررسی میکند و به محض اینکه به شرطی برخورد کند که برقرار باشد، بلوک کد مربوطه را اجرا میکند و سپس از بلوک شرطی کلی خارج میشود. به همین دلیل، ترتیب شرایط مهم است. - استفاده از
else
برای شرایط پیش فرض:else
به عنوان یک شرط پیشفرض عمل میکند و بلوک کد مربوط به آن فقط در صورتی اجرا میشود که هیچ یک از شرایطif
یاelif
برقرار نباشد. لازم به ذکر است که استفاده ازelse
اختیاری است و شما میتوانید بدون آن یک بلوک شرطیif
یاelif
بسازید.
حالا برای درک بهتر بیاید یک بازی 🎮🕹️ درست کنیم ، این یک بازی متنی ساده است که کاربر را از طریق یک سری انتخابها در یک ماجراجویی به جنگلی میبرد. بر اساس انتخابهای کاربر، نتیجهی بازی مشخص میشود. اجزای مختلف کد به شرح زیر است:
- نمایش خوش آمدگویی: چند خط اول کد، یک نمایشگره دیجیتالی “ASCII” و یک پیام خوشآمدگویی به کاربر را چاپ میکند.
- استفاده از تابع
input
: این تابع به کاربر اجازه میدهد تا ورودی را از خط فرمان وارد کند. خروجی این تابع به صورت رشته است و به متغیرهایchoice1
،choice2
وchoice3
اختصاص داده شده است. - استفاده از شرطهای
if
,elif
وelse
: این کد بر اساس انتخابهای کاربر که درchoice1
،choice2
وchoice3
ذخیره شدهاند، بلوکهای مختلف کد را اجرا میکند. برای مثال، اگر کاربر درchoice1
“left” را انتخاب کند، سپس درchoice2
“wait” را انتخاب کند و در نهایت درchoice3
“unknown” را انتخاب کند، پیام “You found the hidden gem! You Win!” چاپ میشود. - استفاده از تابع
lower
: این تابع تمامی حروف ورودی کاربر را به حروف کوچک تبدیل میکند. این امر باعث میشود کد حساس به بزرگی یا کوچکی حروف نباشد. به عبارت دیگر، “LEFT”، “Left” و “left” همگی به عنوان یک ورودی معتبر در نظر گرفته میشوند.
کلیت این بازی این است که کاربر با انتخابهای مختلف خود، سرنوشت خود را در بازی شکل میدهد. در نهایت، بر اساس این انتخابها، کاربر میتواند برنده شود یا بازی را از دست بدهد.
print(''' ******************************************************************************* | | | | _________|________________.=""_;=.______________|_____________________|_______ | | ,-"_,="" `"=.| | |___________________|__"=._o`"-._ `"=.______________|___________________ | `"=._o`"=._ _`"=._ | _________|_____________________:=._o "=._."_.-="'"=.__________________|_______ | | __.--" , ; `"=._o." ,-"""-._ ". | |___________________|_._" ,. .` ` `` , `"-._"-._ ". '__|___________________ | |o`"=._` , "` `; .". , "-._"-._; ; | _________|___________| ;`-.o`"=._; ." ` '`."\` . "-._ /_______________|_______ | | |o; `"-.o`"=._`` '` " ,__.--o; | |___________________|_| ; (#) `-.o `"=.`_.--"_o.-; ;___|___________________ ____/______/______/___|o;._ " `".o|o_.--" ;o;____/______/______/____ /______/______/______/_"=._o--._ ; | ; ; ;/______/______/______/_ ____/______/______/______/__"=._o--._ ;o|o; _._;o;____/______/______/____ /______/______/______/______/____"=._o._; | ;_.--"o.--"_/______/______/______/_ ____/______/______/______/______/_____"=.o|o_.--""___/______/______/______/____ /______/______/______/______/______/______/______/______/______/______/_____ / ******************************************************************************* ███╗ ██╗███████╗██╗ ██╗████████╗ █████╗ ██████╗ ███╗ ███╗██╗███╗ ██╗ ████╗ ██║██╔════╝╚██╗██╔╝╚══██╔══╝██╔══██╗██╔══██╗████╗ ████║██║████╗ ██║ ██╔██╗ ██║█████╗ ╚███╔╝ ██║ ███████║██║ ██║██╔████╔██║██║██╔██╗ ██║ ██║╚██╗██║██╔══╝ ██╔██╗ ██║ ██╔══██║██║ ██║██║╚██╔╝██║██║██║╚██╗██║ ██║ ╚████║███████╗██╔╝ ██╗ ██║ ██║ ██║██████╔╝██║ ╚═╝ ██║██║██║ ╚████║ ╚═╝ ╚═══╝╚══════╝╚═╝ ╚═╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═══╝ ''') print("Welcome to Jungle Adventure.") print("Your mission is to find the hidden gem.") choice1 = input('You\'re at a fork in the path. Which way do you want to go? Type "left" or "right" \n').lower() if choice1 == "left": choice2 = input('You encounter a river. Do you want to wait for a raft or swim across? Type "wait" or "swim" \n').lower() if choice2 == "wait": choice3 = input("You arrive at a temple with 3 chambers. One has snakes, one has spiders, and one is unknown. Which one do you choose? Type 'snakes', 'spiders', or 'unknown' \n").lower() if choice3 == "snakes": print("You get bitten by a venomous snake. Game Over.") elif choice3 == "spiders": print("You get overwhelmed by a swarm of spiders. Game Over.") elif choice3 == "unknown": print("You found the hidden gem! You Win!") else: print("You chose a chamber that doesn't exist. Game Over.") else: print("You get swept away by the current. Game Over.") else: print("You step into a quicksand. Game Over.")
برای درک بهتر Control flow و کد، دیاگرام Diagram این کد به صورت زیر می باشد:
برنامه محاسبه BMI ورژن 2
ما قبلا در “برنامه محاسبه BMI با استفاده از پایتون و F-Strings” یک برنامه برای محاسبه BMI درست کرده بودیم حالا همان برنامه را با توجه به چیز های جدیدی که در این مطلب یادگرفتیم میخوایم بروز کنیم تا بعد از مشخص شده عدد BMI حالا به ما بگه تو کدام دسته بندی قرار می گیریم ، مقادیر باید به صورت زیر تغییر کند:
- اگر شاخص توده بدنی کمتر از 18.5 باشد، فرد دارای وزن کم (کمبود وزن) است.
- اگر شاخص توده بدنی بیشتر از 18.5 اما کمتر از 25 باشد، فرد دارای وزن نرمال است.
- اگر شاخص توده بدنی بیشتر از 25 اما کمتر از 30 باشد، فرد اندکی چاق است.
- اگر شاخص توده بدنی بیشتر از 30 اما کمتر از 35 باشد، فرد چاق است.
- اگر شاخص توده بدنی بیشتر از 35 باشد، فرد دچار چاقی بالینی است.
با این توضیحات کد ما به صورت زیر میشه:
height = float(input("enter your height in m: ")) weight = float(input("enter your weight in kg: ")) bmi = round(weight / height ** 2) if bmi < 18.5: print(f"Your BMI is {bmi}, you are underweight.") elif bmi < 25: print(f"Your BMI is {bmi}, you have a normal weight.") elif bmi < 30: print(f"Your BMI is {bmi}, you are slightly overweight.") elif bmi < 35: print(f"Your BMI is {bmi}, you are obese.") else: print(f"Your BMI is {bmi}, you are clinically obese.")
کدی که در بالا مشاهده میکنید به این ترتیب کار میکند:
- ابتدا از کاربر میخواهد تا قد خود را به متر و وزن خود را به کیلوگرم وارد کند.
- سپس برنامه شاخص توده بدنی را با استفاده از فرمول
وزن / قد ** 2
محاسبه میکند. - برنامه سپس بر اساس مقدار BMI، وضعیت وزن فرد را تعیین میکند. این تعیین وضعیت بر اساس محدودههای مختلف BMI است که توسط سازمان جهانی بهداشت تعیین شدهاند.
- در نهایت، برنامه وضعیت وزن فرد را چاپ میکند.
این کد یک نمونه ساده از چگونگی استفاده از ورودی کاربر، محاسبات ریاضی و شرطی در برنامهنویسی است.
برنامه ای برای نمایش سال کبیسه (Leap year)
برای تشخیص اینکه یک سال خاص سال کبیسه است یا نه، میتوان از فرمول زیر استفاده کرد:
- اگر سال بر 4 بخشپذیر است، این ممکن است یک سال کبیسه باشد.
- اما اگر سال بر 100 بخشپذیر است، این ممکن است یک استثنا از قاعده سال کبیسه باشد. پس باید بررسی کنیم که آیا سال بر 400 بخشپذیر است یا نه.
- اگر سال بر 400 بخشپذیر است، باز هم یک سال کبیسه است. در غیر این صورت، سال کبیسه نیست.
بنابراین، یک سال کبیسه است اگر بر 4 بخشپذیر باشد، مگر اینکه بر 100 بخشپذیر باشد. اما اگر بر 400 بخشپذیر باشد، باز هم یک سال کبیسه است.
با این توضیحات برنامه ما به صورت زیر میشه:
year = int(input("Which year do you want to check? ")) if year % 4 == 0: if year % 100 == 0: if year % 400 == 0: print("Leap year") else: print("Not leap year.") else: print("Leap year.") else: print("Not leap year.")
سال کبیسه سالی است که 366 روز دارد به جای 365 روز معمولی. این اضافه شدن یک روز اضافه، به منظور هماهنگ سازی تقویم با حرکت واقعی زمین دور خورشید است.
برنامه به این ترتیب کار میکند:
- ابتدا از کاربر میخواهد تا یک سال را وارد کند.
- سپس برنامه بررسی میکند که آیا سال وارد شده بر 4 بخشپذیر است یا نه. اگر بر 4 بخشپذیر بود، این ممکن است یک سال کبیسه باشد.
- اگر سال بر 4 بخشپذیر بود، برنامه سپس بررسی میکند که آیا سال بر 100 بخشپذیر است یا نه. اگر بر 100 بخشپذیر بود، این ممکن است یک استثنا از قاعده سال کبیسه باشد.
- اگر سال بر 100 بخشپذیر بود، برنامه سپس بررسی میکند که آیا سال بر 400 بخشپذیر است یا نه. اگر بر 400 بخشپذیر بود، باز هم یک سال کبیسه است. در غیر این صورت، سال کبیسه نیست.
- در نهایت، برنامه وضعیت سال کبیسه یا غیر کبیسه بودن سال را چاپ میکند.
این برنامه یک نمونه خوب از چگونگی استفاده از شرطهای تودرتو در برنامهنویسی است.
برنامه مدیریت فروش بلیت در شهربازی
این برنامه یک برنامه ساده برای مدیریت فروش بلیت یک شهربازی است. برنامه ابتدا از کاربر میپرسد که قد او چقدر است. اگر قد کاربر 120 سانتیمتر یا بیشتر باشد، او میتواند سوار رولرکوستر شود و برنامه به مرحله بعدی میرود.
در مرحله بعد، برنامه از کاربر سن او را میپرسد. بر اساس سن کاربر، قیمت بلیت تعیین میشود: بلیت کودکان 5 دلار، بلیت نوجوانان 7 دلار و بلیت بزرگسالان 12 دلار است.
سپس برنامه از کاربر میپرسد که آیا میخواهد عکسی از او در حین سواری رولرکوستر گرفته شود یا نه. اگر کاربر بله بگوید، 3 دلار به قیمت نهایی او اضافه میشود.
در نهایت، برنامه به کاربر میگوید که قیمت نهایی بلیت او چقدر است.
اگر قد کاربر کمتر از 120 سانتیمتر باشد، برنامه به او میگوید که باید قدش بیشتر شود تا بتواند سوار رولرکوستر شود.
با این توضیحات کد به صورت زیر می شود:
print("Welcome to the rollercoaster!") height = int(input("What is your height in cm? ")) bill = 0 if height >= 120: print("You can ride the rollercoaster!") age = int(input("What is your age? ")) if age < 12: bill = 5 print("Child tickets are $5.") elif age <= 18: bill = 7 print("Youth tickets are $7.") else: bill = 12 print("Adult tickets are $12.") wants_photo = input("Do you want a photo taken? Y or N. ") if wants_photo == "Y": bill += 3 print(f"Your final bill is ${bill}") else: print("Sorry, you have to grow taller before you can ride.")
برنامه سفارش پیتزا
برنامه ابتدا از کاربر سایز پیتزا را می پرسد. سپس از کاربر می پرسد که آیا می خواهد پپرونی به پیتزا اضافه شود یا خیر. در نهایت از کاربر می پرسد که آیا می خواهد پنیر اضافی به پیتزا اضافه شود یا خیر.
بر اساس انتخابات کاربر، مبلغ نهایی سفارش محاسبه می شود. اگر کاربر پپرونی یا پنیر اضافی انتخاب کند، هزینه های مربوط به آنها به مبلغ نهایی اضافه می شود. در نهایت، مبلغ نهایی سفارش به کاربر نمایش داده می شود.
با توجه به این توضیحات کد پایتون آن به صورت زیر می باشد:
print("Welcome to Python Pizza Deliveries!") size = input("What size pizza do you want? S, M, or L ") add_pepperoni = input("Do you want pepperoni? Y or N ") extra_cheese = input("Do you want extra cheese? Y or N ") bill = 0 if size == "S": bill += 15 elif size == "M": bill += 20 else: bill += 25 if add_pepperoni == "Y": if size == "S": bill += 2 else: bill += 3 if extra_cheese == "Y": bill += 1 print(f"Your final bill is: ${bill}.")