পাইথন for লুপ

for লুপ

অন্যান্য কমন ল্যাঙ্গুয়েজের সাথে পাইথনের 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 item in friends:
    print('Happy New Year:', item)

friends হচ্ছে একটা লিস্ট, যেখানে বন্ধুদের নাম রাখা আছে।
for লুপ দিয়ে friends লিস্টের মধ্যে ইটারেশন করে এসএমএস পাঠাতে হবে। তার জন্য লিখছি for item in friends: …
এখানে প্রথমবার friend এ থাকবে Rahim এর নাম। তখন প্রিন্ট করবে Happy New Year: Rahim
দ্বিতীয়বার friend এ থাকবে Karim এর নাম। তখন প্রিন্ট করবে Happy New Year:Karim
তৃতীয়বার friend এ থাকবে Arif এর নাম। তখন প্রিন্ট করবে Happy New Year: Arif
এর পরে অ্যারেতে আর কোন বন্ধু নেই। তাই for লুপ থেকে বের হয়ে যাবে। এবারে ফ্রেন্ড লিস্ট যত বড়ই হোক আমরা সহজে সবাইকে এসএমএস পাঠিয়ে দিতে পারব।

range()
ফর লুপ দিয়ে কোন সিকোয়েন্সের মধ্যে ইটারেশন ছাড়াও একটা নির্দিষ্ট রেঞ্জের মধ্যে ইটারেশন করতে পারি। যেমনঃ

for i in range(10):

    print(i)

যা আউটপুট দিবে 0-9 পর্যন্ত সংখ্যা গুলো। উপরে আমরা ১০ বার ইটারেশন করেছি এবং প্রতিবার কততম ইটারেশন হচ্ছে, তা প্রিন্ট করেছি। এখানে i এর ভ্যালু প্রিন্ট করা ছাড়াও অন্য যে কোন কিছু প্রিন্ট করতে পারব। যে কোন স্টেটমেন্ট এখানে রান করতে পারব।

আমরা 0 থেকে শুরু না করে নির্দিষ্ট রেঞ্জও দিতে পারি। যেমনঃ

for i in range(5, 10):

    print(i)

যা প্রিন্ট করবে 5-9 পর্যন্ত।

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

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 item in prime:
    print(item)

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

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 item in prime:
    count = count + 1
print('Total Prime numbers 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, 100 দিয়ে বুঝিয়েছি যে আমরা 1-100 পর্যন্ত সংখ্যা গুলোর মধ্যে যে মৌলিক সংখ্যা গুলো বের করব। এখানে 1-100 এর পরিবর্তে অন্য যে কোন রেঞ্জ যেমন 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। তাহলে প্রোগ্রামটি দাঁড়াবেঃ

lower_range = int(input('Lower range: '))
upper_range = int(input('Upper range: ‘))

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

নেস্টেড 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 ও প্রিন্ট করে দেখতে পারেন।

3 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

    Reply

Leave a Reply