دوره H پایتون – فصل 2: ساختار کنترلی – درس 6: حلقه for

دوره H پایتون – فصل 2: ساختار کنترلی – درس 6: حلقه for

دوره H برنامه نویسی پایتون
فصل دوم: ساختار کنترلی پایتون
درس ششم: حلقه for در پایتون


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

در درس چهارم این فصل، با حلقه while آشنا شدیم؛ اما حالا می‌خواهیم به نحوه استفاده از حلقه for در پایتون بپردازیم.

به یاد حلقه while

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

words = ["hello", "world", "spam", "eggs"]
index = 0
words_length  = len(words)

while index < words_length:
   word = words[counter]
   print(word + "!")
   index = index + 1

خروجی این کد:

>>>
hello!
world!
spam!
eggs!
>>>

مثال بالا، کدنوشته شده داخل حلقه را به ازای هر آیتم داخل لیست تکرار می‌کند! و در واقع ما با استفاده از یک متغیری به نام index که تعریف کردیم، به مقایر جدید لیست دسترسی پیدا می‌کنیم! چراکه در پایان حلقه، این متغیر را یکی بیشتر می‌کنیم تا دفعه‌ی بعدی، به آیتم بعدی اشاره کند! و البته شرط حلقه، تا زمانی است که مقدار index، از تعداد آیتم‌های لیست عبور نکند. چراکه اگر عبور کند، به مقداری تعریف نشده اشاره کرده و خطایی رخ می‌دهد و شما می‌بینید که آن را کمتر از طول لیست قرار دادیم؛ چراکه ایندکس از 0 شروع می‌شود! البته این به منطق کد ما مربوط می‌شود که چگونه این شرط را بنویسیم تا درست کار کند! برای مثال کد بالا را بصورت زیر می‌نویسیم و بازهم بدرستی و همانند آن کار می‌کند:

words = ["hello", "world", "spam", "eggs"]
index = 0
max_index = len(words) - 1

while index <= max_index:
   word = words[counter]
   print(word + "!")
   index = index + 1

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

حلقه for در پایتون

قبل از استفاده از حلقه for، لازم به ذکر است که در پایتون، حلقه for به معنای واقعی و طبق تعریفی که از حلقه‌ها داشتیم پیاده نشده است و این حلقه در قالب ساختار foreach تعریف شده است. در واقع پایتون با در نظر گرفتن اینکه در while هم می‌توان شمارنده را تعریف کرد، دیگر نیازی به این ندیده است تا یک ساختار حلقه‌ی دیگری تعریف کند و به خاطر همین، کاربرد for را برای foreach تعریف کرده است.

همانطور که در مثال قبل دیدید، نوشتن کد یکسان برای مقادیر یک لیست با استفاده از حلقه while، به نوشتن کدهای زیادی منجر می‎شود. اما پایتون، حلقه‌ی for را به عنوان یک شورتکات یا میانبور برای انجام این کار فراهم کرده است. به مثال زیر که همان مثال قبلی می‌باشد دقت کنید:

words = ["hello", "world", "spam", "eggs"]
for word in words:
  print(word + "!")

و اما خروجی این کد:

>>>
hello!
world!
spam!
eggs!
>>>

بنابراین با استفاده از for، کد قبلی را در 3 خط خلاصه کردیم و خیلی ساده‌تر شد! به اینگونه که در for مشخص کردیم به ازای هر word در داخل لیست words، کد داخل حلقه را اجرا کند! در واقع متغیر word، هربار با آیتم جدید لیست پر می‌شود. و  البته این مقداردهی word، از ایندکس 0 شروع شده و به انتهای لیست می‌رسد و به صورت رندوم یا نامنظم نیست.

همچنین فراموش نکنید که نام word اختیاری بوده و تنها به دلیل داشتن مفهوم، این اسم را انتخاب کردیم؛ وگرنه می‌توانید آن را h یا x و … هم انتخاب کنید.

فقط همین نیست!

البته که for تنها برای نوشتن کد یکسان برای مقادیر یک آرایه به کار برده نمی‌شود! شما با range در درس قبلی آشنا شدید. حالا فرض کنید می‌خواهیم با حلقه for، کاری کنیم که کدمان به تعداد معینی تکرار شود! بنابراین با استفاده از range، مثال زیر را در نظر بگیرید:

for i in range(5):
  print("hello!")

خروجی کد بالا:

>>>
hello!
hello!
hello!
hello!
hello!
>>>

همانطور که می‌بینید، نیازی به تبدیل range به list نیست! چرا که range بر خلاف list ها، ایندکس شده نمی‌باشد! و اصلا نیازی به ایندکس هم نداریم.

گرچه این نوع نوشتن، شبیه for موجود در جاوا، سی‌شارپ و … نیست؛ اما تصور کنید که شما طول بازه و مقدار تغییر را در range مشخص کرده‌اید! بنابراین این for نیز از لحاظی همانند for های زبان‌های گفته شده است؛ با این تفاوت که شبیه یک foreach نوشته شده است و منطق دیگری دارد.
درس بعدی (به زودی)درس قبلی

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

cp-codfk

نظرات ثبت شده بدون دیدگاه

توضیحات پیشنهادی نظرات اشتراک