آموزش پایتون بخش آخر

آموزش پایتون بخش آخر

 دستور if…elif…else 

اگر بخواهید چند شرط را بررسی کنید چکار میکنید؟ میتوانید از چندین دستور if استفاده کنید و بهتر است که این دستورات if را به صورت زیر بنویسید: 

if (condition): 
   code to execute;      
else:    
if (condition): 
      code to execute;     
 else: 
      if (condition): 
         code to execute;      
 else: 
         code to execute;     

خواندن کد بالا سخت است. بهتر است دستورات را به صورت تو رفتگی در داخل بلوکelse  بنویسید. میتوانید کد بالا را ساده تر کنید

if (condition): 
   code to execute; 
elif (condition): 
   code to execute; 
elif (condition): 
   code to execute; 
else: 
   code to execute; 

حال که نحوه استفاده از دستور if else را یاد گرفتید باید بدانید که مانندelif ،else  نیز به دستور if وابسته است. دستور elif وقتی اجرا میشود که اولین دستور if اشتباه باشد حال اگر elif اشتباه باشد دستور elif بعدی اجرا میشود. و اگر آن نیز اجرا نشود در نهایت دستور else اجرا میشود. برنامه زیر نحوه استفاده از دستورelif را نشان میدهد:  

print("What's your favorite color?"); 
print("[1] Black"); 
print("[2] White");
 print("[3] Blue"); 
print("[4] Red"); 
print("[5] Yellown");  
choice = int(input("Enter your choice: ")); 
if (choice == 1): 
    print("You might like my black t-shirt."); 
elif (choice == 2): 
        print("You might be a clean and tidy person.");
 elif (choice == 3): 
            print("You might be sad today."); 
elif (choice == 4): 
            print("You might be inlove right now."); 
elif (choice == 5):    
 print("Lemon might be your favorite fruit."); 
else:    
 print("Sorry, your favorite color is not in the choices above."); 

خروجی تکه کد بالا

What's your favorite color? 
[1]	Black 
[2]	White 
[3]	Blue  

[4]	Red 
[5]	Yellow 
 Enter your choice: 1 
You might like my black t-shirt. 
What's your favorite color? 
[1]	Black 
[2]	White 
[3]	Blue 
[4]	Red 
[5]	Yellow 
 Enter your choice: 999 
Sorry, your favorite color is not in the choices above. 

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

دستورif  تو در تو  

میتوان از دستورif  تو در تو در پایتون استفاده کرد. یک دستور سادهif  در داخل دستورif  دیگر:

if (condition): 
    code to execute;     
if (condition): 
         code to execute;       
 elif (condition):        
 if (condition): 
           code to execute; 
else:   
  if (condition): 
       code to execute;  

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

age = int(input("Enter your age: ")); 
gender = input("Enter your gender (male/female): "); 
 if (age > 12):    
 if (age < 20):   
      if (gender == "male"): 
            print("You are a teenage boy.");  
       else:       
      print("You are a teenage girl.");
     else: 
        print("You are already an adult."); else: 
            print("You are still too young."); 

خروجی تکه کد بالا

Enter your age: 18 Enter your gender: male 
You are a teenage boy. 
Enter your age: 12 Enter your gender: female 
You are still too young. 

 

اجازه بدهید که برنامه را کالبد شکافی کنیم. ابتدا برنامه از شما درباره سنتان سؤال میکند (خط 1). در خط 1 درباره جنستان از شما سؤال میکند. سپس به اولین دستورif  میرسد (خط 4). در این قسمت اگر سن شما بیشتر از 11 سال باشد برنامه وارد بدنه دستورif  میشود در غیر اینصورت وارد بلوکelse  (خط 11) مربوط به همین دستورif  میشود.

حال فرض کنیم که سن شما بیشتر از 11 سال است و شما وارد بدنه اولینif  شدهاید. در بدنه اولینif  دو دستورif  دیگر را مشاهده میکنید. اگر سن کمتر 11 باشد شما وارد بدنهif  دوم میشوید و اگر نباشد به قسمتelse  متناظر با آن میروید (خط 11). دوباره فرض میکنیم که سن شما کمتر از 11 باشد، در اینصورت وارد بدنهif  دوم شده و با یکif  دیگر مواجه میشوید (خط 6). در اینجا جنسیت شما مورد بررسی قرار میگیرد که اگر برابر“male”  باشد، کدهای داخل بدنه سومینif  اجرا میشود در غیر اینصورت قسمت else مربوط به اینif  اجرا میشود (خط 1). پیشنهاد میشود که ازif  تو در تو در برنامه کمتر استفاده کنید چون خوانایی برنامه را پایین میآورد.

 

استفاده از عملگرهای منطقی  

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

تأثیر  

مثال  

عملگر  

مقدارZ  در صورتیTrue  است که هر دو شرط دو طرف عملگر مقدارشان

 

 

True باشد. اگر فقط مقدار یکی از شروطFalse  باشد مقدارFalse  ،z خواهد شد. 

 z = (x > 2) and (y < 10)

 and

مقدارZ  در صورتیTrue  است که یکی از دو شرط دو طرف عملگر

 

 

مقدارشانTrue  باشد. اگر هر دو شرط مقدارشانFalse  باشد مقدار z ، Falseخواهد شد .

 z = (x > 2) or (y < 10)

 or

مقدارZ  در صورتیTrue  است که مقدار شرطFalse  باشد و در صورتی

 

 

False است که مقدار شرطTrue  باشد 

 z = not(x > 2)

  •  not

 

به عنوان مثال جمله z = (x > 2) and (y < 10) را به این صورت بخوانید: “در صورتی مقدارz  برابرTrue  است که مقدارx  بزرگتر از  2و مقدارy  کوچکتر از 11 باشد در غیر اینصورتFalse  است”. این جمله بدین معناست که برای اینکه مقدار کل دستور True باشد باید مقدار همه شروطTrue  باشد. عملگر منطقی or تأثیر متفاوتی نسبت به عملگر منطقی and دارد. نتیجه عملگر منطقی or برابرTrue  است اگر فقط مقدار یکی از شروط True باشد. و اگر مقدار هیچ یک از شروطTrue  نباشد نتیجهFalse  خواهد شد.

میتوان عملگرهای منطقیand  وor  را با هم ترکیب کرده و در یک عبارت به کار برد مانند:  

if ( (x == 1) and ( (y > 3) or z < 10) ) ): 
   #do something here 

در اینجا استفاده از پرانتز مهم است چون از آن در گروه بندی شرطها استفاده میکنیم. در اینجا ابتدا عبارت (y > 3) or (z < 10) مورد بررسی قرار میگیرد (به علت تقدم عملگرها). سپس نتیجه آن بوسیله عملگرand  با نتیجه (x == 1) مقایسه میشود. حال بیایید نحوه استفاده از عملگرهای منطقی در برنامه را مورد بررسی قرار دهیم:  

 

age = int(input("Enter your age: ")); 
gender = input("Enter your gender (male/female): "); 
 if (age > 12 and age < 20):  
   if (gender == "male"): 
        print("You are a teenage boy.");  
   else:    
     print("You are a teenage girl."); 
else: 
    print("You are not a teenager."); 

خروجی کد بالا

Enter your age: 18 
Enter your gender (male/female): female 
You are a teenage girl. 
Enter you age: 10 
Enter your gender (male/female): male 
You are not a teenager. 

برنامه بالا نحوه استفاده از عملگر منطقیand  را نشان میدهد (خط 4). وقتی به دستورif  میرسید (خط 4) برنامه سن شما را چک میکند. اگر سن شما بزرگتر از 11 و کوچکتر از 11 باشد (سنتان بین 11 و 11 باشد) یعنی مقدار هر دوTrue  باشد سپس کدهای داخل بلوکif  اجرا میشوند. اگر نتیجه یکی از شروط False باشد کدهای داخل بلوکelse  اجرا میشود. عملگرand  عملوند سمت چپ را مورد بررسی قرار میدهد. اگر مقدار آنFalse  باشد دیگر عملوند سمت راست را بررسی نمیکند و مقدارFalse  را بر میگرداند. بر عکس عملگرor  عملوند سمت چپ را مورد بررسی قرار میدهد و اگر مقدار آنTrue  باشد سپس عملوند سمت راست را نادیده میگیرد و مقدارTrue  را بر میگرداند.

if (x == 2 and y == 3): 
   #Some code here 
 
if (x == 2 or y == 3) 
   #Some code here 

نکته مهم اینجاست که شما میتوانید از عملگرهایand  وor  به عنوان عملگر بیتی استفاده کنید. تفاوت جزئی این عملگرها وقتی که به عنوان عملگر بیتی به کار میروند این است که دو عملوند را بدون در نظر گرفتن مقدار عملوند سمت چپ مورد بررسی قرار میدهند. به عنوان مثال حتی اگر مقدار عملوند سمت چپFalse  باشد عملوند سمت چپ به وسیله عملگر بیتی and ارزیابی میشود. اگر شرطها را در برنامه ترکیب کنید استفاده از عملگرهای منطقی and و or به جای عملگرهای بیتی and و or بهتر خواهد بود. یکی دیگر از عملگرهای منطقی عملگر not است که نتیجه یک عبارت را خنثی یا منفی میکند. به مثال زیر توجه کنید:

if (not(x == 2)) 
   print("x is not equal to 2."); 

ا گر نتیجه عبارتx == 2  برابر False باشد عملگرnot  آن راTrue  میکند.

عملگر شرطی  

عملگر شرطی در پایتون مانند دستور شرطیif…else  عمل میکند. در زیر نحوه استفاده از این عملگر آمده است:

condition_is_true if condition else condition_is_false 

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

pet1 = "puppy";
 pet2 = "kitten"; 
 
type1 = "dog" if (pet1 == "puppy" ) else "cat";
 type2 = "cat" if (pet2 == "kitten") else "dog"; 
 print(type1);
 print(type2); 

خروجی کد بالا

dog cat 

برنامه بالا نحوه استفاده از این عملگر شرطی را نشان میدهد. خط 4 به این صورت ترجمه میشود که مقدارdog  را در متغیرtype1  قرار بده اگر مقدار pet1 برابر با puppy بود در غیر این صورت مقدار cat را type1 قرار بده. خط 5 به این صورت ترجمه میشود که مقدار cat را در type2 قرار بده اگر مقدار pet2 برابر با kitten بود در غیر این صورت مقدار dog. حال برنامه بالا را با استفاده از دستور if else می نویسیم  :

if (pet1 == "puppy"): 
   type1 = "dog";
 else:   
 type1 = "cat"; 

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

 تکرار  

ساختارهای تکرار به شما اجازه میدهند که یک یا چند دستور کد را تا زمانی که یک شرط برقرار است تکرار کنید. بدون ساختارهای تکرار شما مجبورید همان تعداد کدها را بنویسید که بسیار خسته کننده است. مثلاً شما مجبورید 11 بار جمله“.Hello World”  را تایپ کنید مانند مثال زیر: 

print("Hello World!");
 print("Hello World!");
 print("Hello World!");
 print("Hello World!"); 
print("Hello World!");
 print("Hello World!");
 print("Hello World!");
 print("Hello World!"); 
print("Hello World!");
 print("Hello World!"); 

 

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

  1. while

  2. for

 

حلقه While

ابتدایی ترین ساختار تکرار در پایتون حلقه While است. ابتدا یک شرط را مورد بررسی قرار میدهد و تا زمانیکه شرط برقرار باشد کدهای درون بلوک اجرا میشوند. ساختار حلقه While به صورت زیر است: 

while(condition): 
    code to loop; 

میبینید که ساختار While مانند ساختارif  بسیار ساده است. ابتدا یک شرط را که نتیجه آن یک مقدار بولی است مینویسیم اگر نتیجه درست یا true باشد سپس کدهای داخل بلوک While اجرا میشوند. اگر شرط غلط یا false باشد وقتی که برنامه به حلقه While برسد هیچکدام از کدها را اجرا نمیکند. برای متوقف شدن حلقه باید مقادیر داخل حلقه While اصلاح شوند.

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

 

counter = 1; 
 while (counter <= 10): 
    print("Hello World!");
     counter = counter + 1; 

 

خروجی تکه کد بالا

Hello World! 
Hello World! 
Hello World! 
Hello World! 
Hello World! 
Hello World! 
Hello World! 
Hello World! 
Hello World!
 Hello World! 

 

برنامه بالا 11 بار پیغام Hello World! را چاپ میکند. اگر از حلقه در مثال بالا استفاده نمیکردیم مجبور بودیم تمام 11 خط را تایپ کنیم .

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

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

در خط 3 حلقه while را وارد میکنیم. در حلقه while ابتدا مقدار اولیه شمارنده با 11 مقایسه میشود که آیا از 11 کمتر است یا با آن برابر است. نتیجه هر بار مقایسه ورود به بدنه حلقه While و چاپ پیغام است. همانطور که مشاهده میکنید بعد از هر بار مقایسه مقدار شمارنده یک واحد اضافه میشود (خط 5). حلقه تا زمانی تکرار میشود که مقدار شمارنده از 11 کمتر باشد.

اگر مقدار شمارنده یک بماند و آن را افزایش ندهیم و یا مقدار شرط هرگز false نشود یک حلقه بینهایت به وجود میآید. به این نکته توجه کنید که در شرط بالا به جای علامت < از =< استفاده شده است. اگر از علامت < استفاده میکردیم کد ما 9 بار تکرار میشد چون مقدار اولیه 1 است و هنگامی که شرط به 11 برسد false میشود چون 11 < 11 نیست. اگر میخواهید یک حلقه بی نهایت ایجاد کنید که هیچگاه متوقف نشود باید یک شرط ایجاد کنید که همواره درست(true)  باشد:

while(True): 
   #code to loop 

 

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

  حلقه for 

 

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

for iterator_var in sequence: 
   code to repeat; 

iterator_var یک متغیر موقتی ،in کلمه کلیدی وsequence  هم یک سری مانند list ،tuple و … می باشد. می توان حلقه for را اینگونه ترجمه کرد، که به ازای یا به تعداد آیتم های موجود در سری، فلان کارها یا کدها را تکرار کن. در زیر یک مثال از حلقهfor  آمده است:

for i in [1, 2, 3, 4, 5, 6, 7, 8, 9, :]01 
    print("Number ", i); 

 

خروجی تکه کد بالا

Number 1 
Number 2 
Number 3 
Number 4 
Number 5 
Number 6 
Number 7 
Number 8 
Number 9 
Number 10 

 

برنامه بالا اعداد 1 تا 11 را با استفاده از حلقهfor  میشمارد. ابتدا یک متغیر موقتی (i)، سپس کلمه کلیدیin  و در آخر یک سری از اعداد که در اینجا یکlist  می باشد، تعریف میکنیم. کد اجرا میشود. هر بار که حلقه اجرا می شود، ابتدا یکی از آیتم هایlist  در متغیرi  قرار گرفته و در خط بعد چاپ می شود. این کار تا چاپ آخرین آیتم ادامه می یابد. به جایlist  در کد بالا می توانید از dictionary و tuple هم استفاده کنید :

for i in (1, 2, 3, 4, 5, 6, 7, 8, 9, :)01 
for i in {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}: 

 

حلقه های تو در تو  (Nested Loops) 

 

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

for iterator_var in sequence: 
    for iterator_var in sequence:        
        statements(s)           
        statements(s)           
while expression: 
    while expression:       
        statement(s)         
        statement(s)         

نکتهای که در مورد حلقههای تو در تو وجود دارد این است که، میتوان از یک نوع حلقه در داخل نوع دیگر استفاده کرد. مثلاً میتوان از حلقهfor  در داخل حلقهwhile  استفاده نمود. در مثال زیر نحوه استفاده از این حلقه ها ذکر شده است. فرض کنید که میخواهید یک مستطیل با 3 سطر و 5 ستون ایجاد کنید: 

for i in (1, 2, 3, :)4 
    for j in (1, 2, 3, 4, 5):   
       print("*", end=' ');      
    print();      

خروجی تکه کد بالا

* *  *  *  * 
* *  *  *  * 
* *  *  *  * 
* *  *  *  * 

در کد بالا به ازای یک بار اجرای حلقهfor  اول (خط 1)، حلقهfor  دوم (3-1) به طور کامل اجرا میشود. یعنی وقتی مقدارi  برابر عدد 1 میشود، علامت * توسط حلقه دوم 5 بار چاپ میشود، وقتیi  برابر 1 میشود، دوباره علامت * پنج بار چاپ میشود و … . در کل منظور از دو حلقهfor  این است که در 4 سطر علامت * در 5 ستون چاپ شود یا 4 سطر ایجاد شود و در هر سطر 5 بار علامت * چاپ شود. خط 4 هم برای ایجاد خط جدید است. یعنی وقتی حلقه داخلی به طور کامل اجرا شد، یک خط جدید ایجاد میشود و علامتهای * در خطوط جدید چاپ میشوند. 

خارج شدن از حلقه با استفاده ازcontinue،break  وpass   

گاهی اوقات با وجود درست بودن شرط میخواهیم حلقه متوقف شود. سؤال اینجاست که چطور این کار را انجام دهید؟ با استفاده از کلمه کلیدی break حلقه را متوقف کرده و با استفاده از کلمه کلیدی continue میتوان بخشی از حلقه را رد کرد و به مرحله بعد رفت .

برنامه زیر نحوه استفاده از break ،continue وpass  را نشان میدهد:  

print("Demonstrating the use of break\n"); 
 for x in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10):
     if (x == 5):   
      break; 
 
    print("Number ", x); 
 
print("\nDemonstrating the use of continue\n"); 
 for x in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10):     
if (x == 5):  
       continue; 
 
    print("Number ", x); 
 
print("\nDemonstrating the use of pass\n"); 
 for x in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10):  
   if (x == 5):   
      pass; 

خروجی تکه کد بالا

Demonstrating the use of break 
 Number  1 
Number  2 
Number  3 
Number  4 
 Demonstrating the use of continue 
 Number  1 
Number  2 
Number  3 
Number  4 
Number  6 
Number  7 
Number  8 
Number  9 
Number  10  Demonstrating the use of pass 

 

در این برنامه از حلقه for برای نشان دادن کاربرد دو کلمه کلیدی فوق استفاده شده است اگر به جای for از حلقه while استفاده میشد نتیجه یکسانی به دست میآمد. همانطور که در شرط برنامه (خط 4) آمده است ،وقتی که مقدارx  به عدد 5 برسد، سپس دستور break اجرا (خط 5) و حلقه بلافاصله متوقف میشود، حتی اگر شرط x < 10 برقرار باشد. از طرف دیگر در خط 11 حلقه for فقط برای یک تکرار خاص متوقف شده و سپس ادامه مییابد .وقتی مقدارx  برابر 5 شود حلقه از 5 رد شده و مقدار 5 را چاپ نمیکند و بقیه مقادیر چاپ میشوند. 

 

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

 

امیدواریم از این مقاله بهره کافی را برده باشید وبرای شما مفید بوده باشد.

سؤالات خود در رابطه با این مقاله و همچنین انتقادات و پیشنهادات خود را در قسمت نظرات با ما در میان بگذارید


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