পাইথন for লুপ

কোন সিকোয়েন্সের সব গুলো আইটেমের মধ্যে লুপ চালানোর জন্য for লুপ ব্যবহার করা হয়। যেমন Python এই শব্দটির মধ্যে যত গুলো লেটার আছে, আমরা তার মধ্যে লুপ চালাবো, এবং লেটার গুলো একটা একটা করে প্রিন্ট করব। তার জন্যঃ

for letter in 'Python':
   print 'Current Letter :', letter

এখানে letter একটা ভ্যারিয়েবল। for letter in ‘Python’ দিয়ে “Python” এর প্রতিটা লেটারের জন্য আমরা লুপ চালিয়েছি। প্রথমবার letter এর মধ্যে Python এর P লেটার এসাইন করা হয়েছে, for letter in ‘Python’: এ লাইনের মধ্যে। যা অটোমেটিক এসাইন হয়। এরপর আমরা লেটারটি প্রিন্ট করেছি। দ্বিতীয়বার লুপেটি এক্সিকিউট করার সময় letter এ y লেটারটি এসাইন হয়েছে। যখন দেখেছে Python এ আর কোন লেটার অবশিষ্ঠ নেই, তখন লুপটির কাজ শেষ হয়েছে।

আমরা একটা অ্যারের মধ্যেও লুপ চালাতে পারি, তার জন্যঃ

friends = ['Rahim', 'Karim', 'Arif']
for friend in friends:
    print 'Happy New Year:', friend
print 'all done!'

friends হচ্ছে একটা অ্যারে, যেটার মধ্যে আপনার ফ্রেন্ডদের নাম রাখা আছে। ধরে নিচ্ছি আপনার তিনজন ফ্রেন্ড রয়েছে, এবং এদের নাম Rahim, Karim, Arif

ধরে নিচ্ছি আপনি একজন অলস মানুষ। সবাইকে পহেলা বৈশাখের শুভেচ্ছা জানাতে আপনার অনেক বার লিখতে হবে। আপনি এ জন্য বুদ্ধি করে একটা প্রোগ্রাম লিখে ফেলেছেন, যেটা প্রতিটা ফ্রেন্ডকে আপনার হয়ে এসএমএস পাঠিয়ে দিবে।

for লুপ দিয়ে ফ্রেডদের মধ্যে ইটারেশন করে এসএমএস বে, তার জন্য লিখছি for friend in friends: …

এখানে প্রথমবার friend এ থাকবে Rahim এর নাম। তখন প্রিন্ট করবে Happy New Year: Rahim
দ্বিতীয়বার friend এ থাকবে Karim এর নাম। তখন প্রিন্ট করবে Happy New Year:Karim
তৃতীয়বার friend এ থাকবে Arif এর নাম। তখন প্রিন্ট করবে Happy New Year: Arif

এর পরে আমাদের অ্যারেতে আর কোন ফ্রেন্ড নেই। তাই for লুপ থেকে বের হয়ে যাবে। এবং আপনাকে জানাবে, সবাইকে এসএমএস পাঠানো শেষ! all done!

এবার আপনি আপনার সব গুলো ফ্রেন্ড এর নাম নিয়ে একটা বিশাল অ্যারে তৈরি কর। উপরে প্রোগ্রামটা মডিফাই করে দেখুন, এবং দেখুন কি আউটপুট পাওয়া যায়।

while লুপ দিয়ে করা “ami r dustumi korbo na” প্রোগ্রামটি for দিয়েও লিখতে পারিঃ

for a in range(1,100):
 print "ami r dustumi korbo na"

এটা করবে কি, আপনার হয়ে আপনার জন্য ১০০ বার লিখে দিবে “ami r dustumi korbo na”

আমাদের ১ থেকে ১০০ পর্যন্ত প্রাইম নাম্বারের একটা লিস্ট আছে, যেমন নিচেঃ

 prime =[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

আমরা চাচ্ছি একটা একটা করে প্রিন্ট করতে। for লুপ দিয়ে ইটারেশন চালিয়ে আমরা লিখতে এভাবে প্রাইম গুলো প্রিন্ট করতে পারিঃ

 prime =[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
for number in prime:
     print number

তো এটা করবে কি উপরের প্রাইম নাম্বার গুলো থেকে একটা একটা করে প্রিন্ট করে দিবে।

আপনার মনে প্রশ্ন জাগতে পারে, ১ থেকে ১০০ পর্যন্ত কত গুলো প্রাইম আছে। আপনার কাছে যেহেতু লিস্ট আছে, একটা একটা করে গুনে দেখতে পারেন। কিন্তু আপনি প্রোগ্রামার। অন্যদের মত বোকামি করলে তো সমস্যা। আপনি ছোট্ট একটা প্রোগ্রাম লিখে ফেলবেন, তখন সেই আপনাকে বলে দিবে, ১ থেকে একশ এর মধ্যে কয়টা প্রাইম নাম্বার রয়েছে। তার জন্যঃ

prime =[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]
count = 0;
for number in prime:
     count++
print 'Total Prime number in 1-100:,  count

এভাবে আপনার কাছে যত বড় লিস্টই থাকুক, আপনি সহজেই গুণে ফেলতে পারবেন একটা লিস্টে কয়টা প্রাইম রয়েছে।

প্রাইম নাম্বারের লিস্ট বের করা

আমদের কাছে এর আগে প্রাইম নাম্বারের লিস্ট ছিল। এখন যদি আপনার কাছে প্রাইম নাম্বারের লিস্ট না থাকে, তখন কি করবেন? হ্যা, তখন আমরা প্রাইম নাম্বার গুলো প্রিন্ট করে নিব। কারণ আমরা এখন প্রোগ্রামিং জানি, যেমন আমরা ১ থেকে ১০০ এর মধ্যে প্রাইম নাম্বার গুলো প্রিন্ট করব। তার জন্যঃ

for num in range(1,100):
   if num > 1:
       for i in range(2,num):
           if (num % i) == 0:
               break
       else:
           print(num)

এখানে প্রথমে for num in range(1,100): লাইনে রেঞ্জ দেওয়া হয়েছে। আমরা কত থেকে কত রেঞ্জের সংখ্যা গুলোর মধ্যকার প্রাইম গুলো বের করব। এখানে 1-1000 পর্যন্ত সংখ্যা গুলোর মধ্যে যে প্রাইম গুলো রয়েছে, তাই আমরা বের করব। আপনি এখানে 1-1000 এর পরিবর্তে অন্য যে কোন রেঞ্জ যেমন 500-50000 দিয়ে দেখতে পারেন।

প্রাইম নাম্বার গুলো হয় ১ থেকে বড়। আর প্রাইম নাম্বার নেগেটিভ হতে পারে না। তাই আমরা প্রথমেই চেক করে নিয়েছি আমাদের নাম্বারটিকি ১ থেকে বড় কিনা if num > 1: কন্ডিশন দিয়ে। যদি কন্ডিশন সত্য হয়, তাহলে এর ভেতরের কোড গুলো এক্সিকিউত হবে।

একটা সংখ্যা তখনই প্রাইম হবে, যখন ঐ সংখ্যাটি ১ ব্যতিত অন্য কোন সংখ্যা দিয়ে ভাগ না যায়। যদি কোন সংখ্যা অন্য কোন সংখ্যা দিয়ে ভাগ যায়, তাহলে ভাগ শেষ হবে ০, আমরা % দিয়ে চেক করতে পারি, একটা সংখ্যা কি ভাগ যায় কি যায় না। ভাগ যায়, তাহলে ০ হবে। আর যদি ভাগ না যায়, তাহলে অন্য কোন নাম্বার হবে। ভাগ যায় কিনা তা দেখার জন্য আমরা ২ থেকে ঐ সংখ্যার আগ পর্যন্ত সব গুলো সংখ্যা দিয়ে ভাগ করে দেখেছি। দ্বিতীয় ফর লুপ দিয়ে। যেমন ৫ প্রাইম কিনা, তা চেক করার জন্য আমরা ২-৪ পর্যন্ত সব গুলো সংখ্যা দিয়ে ভাগ করে দেখেছি ভাগ যায় কিনা। যদি ভাগ যায়, তাহলে ৫ প্রাইম নয়, আর যদি ভাগ না যায়, তাহলে ৫ প্রাইম নাম্বার।

এখন যদি কোন সংখ্যা তার থেকে ছোট যে কোন একটা সংখ্যা দিয়ে ভাগ যায়, তাহলে তা আর আমাদের লুপ চালাতে হবে না, কারণ ভাগ গেলেই তা আর প্রাইম নাম্বার না। তাই আমরা দ্বিতীয় ফর লুপ থেকে বের হয়ে যাবো, break দিয়ে।

আর যদি কোন সংখ্যা দিয়ে ভাগ না যায়, তা চেক করেছি else দিয়ে, তাহলে ঐ সংখ্যাটি প্রিন্ট করব।

যদি উপরের প্রোগ্রামটি বুঝতে অসুবিধে হয়, তাহলে আরেকটু সহজ একটা প্রোগ্রাম লিখতে পারি। যেখানে একটি সংখ্যা প্রাইম কি প্রাইম না, তা চেক করবে। তার জন্যঃ

num = 5

for i in range(2,num):
     if (num % i) == 0:
          print(num,"is not a prime number")
          break
else:
     print(num,"is a prime number")

উপরে num =5; এর জাগায় অন্য কোন সংখ্যা দিয়ে চেক করা যেতে পারে। প্রোগ্রামটি করবে কি, কোন সংখ্যা যদি প্রাইম হয়, তা বলবে। আর যদি প্রাইম না হয় তাও বলবে।
এবার উপরের প্রাইম লিস্ট বের করার কোড এবং প্রাইম চেক করার কোড গুলো মিলিয়ে দেখলে দেখা যাবে প্রায় একই রকম কোড। এখানে আমরা একটি নাম্বার চেক করেছি। আর লিস্টের ক্ষেত্রে আমরা for দিয়ে রেঞ্জের মধ্যে সব গুলো নাম্বার চেক করেছি। যদি দেখেছি প্রাইম, তখন তা প্রিন্ট করেছি।

নাম্বারটি আমরা চাইলে কনসোল/ইউজা থেকে ইনপুট নিতে পারি। প্রোগ্রামটি প্রথমে জিজ্ঞেস করবে একটি নাম্বার ইনপুট দিতেঃ

num = int(input("Enter a number: "))

for i in range(2,num):
     if (num % i) == 0:
          print(num,"is not a prime number")
          break
else:
     print(num,"is a prime number")

এখন ইনপুট দেওয়ার পর সংখ্যাটি প্রাইম কি প্রাইম না, তা বলে দিবে। এখন ব্যবহার কারী যদি ১ বা কোন ন্যাগেটিভ সংখ্যা ইনপুট দেয়, তাহলে সে গুলোতো আর প্রাইম হতে পারে না। তাই আমরা আমাদের প্রোগ্রামের শুরুতেই তা চেক করে নিবঃ

num = int(input("Enter a number: "))
if num > 1:
   # check for factors
   for i in range(2,num):
       if (num % i) == 0:
           print(num,"is not a prime number")
           break
   else:
       print(num,"is a prime number")       

else:
   print(num,"is not a prime number")

আপনি এবার প্রাইম লিস্ট বের করার প্রোগ্রামটি একটু মডিফাই করতে পারেন, যেন তা ইউজার থেকে রেঞ্জটি ইনপুট নেয়। একটা হবে upper range একটা হবে lower range. যেমন আমাদের প্রাইম লিস্ট বের করার প্রোগ্রামে for num in range(1,100) এখানে 1 হচ্ছে lower range, 100 হচ্ছে upper range.

নেস্টেড for
আমরা একটা for লুপের ভেতর আরেকটা for লুপ ব্যবহার করতে পারি। একটা উদাহরণ দেখি। প্যাটার্ন প্রিন্ট করার। যেমনঃ
*
* *
* * *
* * * *
* * * * *
উপরের প্যাটার্ণটি আমরা আউটপুট হিসেবে পেতে চাচ্ছি। তার জন্য আমরা একটা প্রোগ্রাম লিখব। আমরা for লুপ ব্যবহার করে এভাবে লিখতে পারিঃ

for i in range(0, 5):
for j in range(0, i + 1):
print(“* “, end=””)
print(“\r”)
এখানে প্রথম for লুপটি কন্ট্রোল করে কয়টা লাইন হবে টোটা। আমরা রেঞ্জ দিয়ে দিয়েছি 5, তাই প্রথম for লুপ ৫ বার ঘুরবে এবং পাঁচটি লাইন প্রিন্ট করবে। দ্বিতীয় for লুপের কাজ হচ্ছে স্টার গুলো প্রিন্ট করা। আর এটি কন্ট্রোল করে প্রতিটা লাইনে কয়টা স্টার প্রিন্ট করবে। যেমন প্রথম লাইনে একটা, দ্বিতীয় লাইনে দুইটা, তৃতীয় লাইনে তিনটা ইত্যাদি।
এখানে print(“\r”) দিয়ে নতুন লাইন দেওয়া হয়েছে। দ্বিতীয় লুপের কাজ শেষ হলে এটি এক্সিকিউট হবে।

উপরের প্রোগ্রামে * প্রিন্ট করার পরিবর্তে j এর ভ্যালু প্রিন্ট করলে আমরা সুন্দর একটি নাম্বার প্যাটার্ণ পাবো। পরিবর্তন করে দেখুন। এছাড়া j এর পরিবর্তে i ও প্রিন্ট করে দেখতে পারেন।

2 thoughts on “পাইথন for লুপ

  1. ami ai program ti run kori
    n=1,3,5,7,9,11,13,15
    count= 0;
    for nam in n:
    count++
    print(“total number count “,count)

    kinto ata dekacce.
    count++
    ^
    SyntaxError: invalid syntax

Leave a Reply