ফর লুপ

এর আগে আমরা দেখেছি কোন একটা নির্দিষ্ট কন্ডিশনের সত্যতার উপর ভিত্তি করে একটি কাজ একাধিকবার করার জন্য while লুপের ব্যবহার। কিন্তু, পাইথনের যেকোনো সিকোয়েন্স টাইপ অবজেক্ট যেমন, লিস্ট (list) এর প্রত্যেকটি এলিমেন্ট নিয়ে কাজ করার জন্য while লুপ ব্যবহার করলে একটু বেশি কোড লিখতে হয়। যেমন while লুপের কনসেপ্ট ঝালাই করতে এবং ব্যাপারটা বুঝতে নিচের উদাহরণটি দেখি,

fruits = ["Apple", "Orange", "Pineapple", "Grape"]
# Lets make juice with these fruits

start_index = 0
max_index = len(fruits) - 1

while start_index <= max_index: # Work until this condition is True
    fruit = fruits[start_index]
    print(fruit + " Juice!")

    start_index = start_index + 1

আউটপুট,

Apple Juice!
Orange Juice!
Pineapple Juice!
Grape Juice!

ঠিক একই কাজ for লুপ ব্যবহার করে করলে অনেক কম কোড লিখেই করা সম্ভব। for লুপ দিয়ে খুব সহজেই যেকোনো সিকোয়েন্স টাইপ অবজেক্ট যেমন list, string ইত্যাদির মধ্যে iterate করা যায়। তাহলে দেখি উপরের প্রোগ্রামটি কিভাএব ফর লুপ ব্যবহার করে করা সম্ভব,

fruits = ["Apple", "Orange", "Pineapple", "Grape"]
# Lets make juice with these fruits

for fruit in fruits:
    print(fruit + " Juice!")

আউটপুট,

Apple Juice!
Orange Juice!
Pineapple Juice!
Grape Juice!

আউটপুট কিন্তু একই। তাই, যখনই কোন iterable নিয়ে কাজ করার প্রয়োজন পরবে তখন for লুপ ব্যবহার করাই ভালো হয়।

অন্যান্য ল্যাঙ্গুয়েজ যেমন php তে এরকম কাজের জন্য আছে foreach যা দিয়ে কোন অ্যারে তে অপারেশন করা অনেক সহজ হয়ে যায়

এখন ধরুন আপনার কাছে কোন লিস্ট নাই কিন্তু নির্দিষ্ট সংখ্যকবার একটি কাজ পুনরাবৃত্তি করা দরকার। তখন কি করব? এ জন্য একটি সুন্দর ফাংশন হতে পারে range যা আমরা আগের চ্যাপ্টারে দেখে এসেছি। মনে আছে, range ব্যবহার করে ইচ্ছামত লিস্ট তৈরি করা যায়? এটাকেই কাজে লাগিয়ে নিচের উদাহরণটি দেখি,

for i in range(10):
    print(i)

আউটপুট,

0
1
2
3
4
5
6
7
8
9

অর্থাৎ, range ফাংশন ব্যবহার করে একটি কাল্পনিক লিস্ট তৈরি করা হয়েছে যার এলিমেন্ট গুলো ছিল ০ থেকে ৯ পর্যন্ত [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] এরকম। আর সেই লিস্টকেই iterate করা হয়েছে for লুপ দিয়ে অর্থাৎ ১০ বার কাজ করানো হয়েছে এই লুপকে। আর কাজটা ছিল তেমন কিছুই না প্রত্যেকটি এলিমেন্টকে ধরে প্রিন্ট করা।

আচ্ছা, string তো একরকম iterable তাহলে এখানেও একবার for লুপ খাটিয়ে দেখি কিছু করা যায় কিনা -

for letter in 'Python': # Here "Python" acts like a list of characters
    print(letter)

আউটপুট,

P
y
t
h
o
n

while লুপের মত ফর লুপেও break, continue ইত্যাদি কিওয়ার্ড ব্যবহার করে কাজের ধারাকে নিয়ন্ত্রণ করা যায়। যেমন -

for i in range(20):
    if i == 5:
        continue
    if i > 9:
        break
    print(i)

print("Printed first 10 numbers except 5!")
0
1
2
3
4
6
7
8
9
Printed first 10 numbers except 5!

উপরে 0 থেকে 19 এই ২০টি এলিমেন্ট ওয়ালা একটি লিস্ট/রেঞ্জ এর উপর কাজ করা হয়েছে কিন্তু যখন 5 এলিমেন্টকে পাওয়া গেছে (i এর মাধ্যমে) তখন continue ব্যবহার করে একে প্রিন্ট না করে এড়িয়ে যাওয়া হয়েছে (লুপের শুরুতে ফিয়ে গিয়ে)। আবার যখন এলিমেন্টটি 9 এর বড়, সেই সময় ফর লুপের কাজ break এর মাধ্যমে থামিয়ে দেয়া হয়েছে যে কারনে 9 প্রিন্ট এর পর ফর লুপের কোন কাজ দেখা যাচ্ছে না বরং প্রোগ্রামের শেষ একটি সাধারণ প্রিন্ট স্টেটমেন্ট এর এক্সিকিউশন হয়েছে।

সংকলন - নুহিল মেহেদী