বেসিক অ্যাপ্লিকেশন ডেভেলপমেন্ট ইউজিং পাইথন
অধ্যায়-১
অধ্যায়-১
অতি সংক্ষিপ্ত
১। ফাংশন বলতে কি বুঝায়?
উত্তরঃ ফাংশন হলো প্রোগ্রামের একটি নির্দিষ্ট ব্লক বা কোডের অংশ, যা একটি নির্দিষ্ট কাজ সম্পাদন করার জন্য তৈরি করা হয় এবং প্রয়োজনে বারবার ব্যবহার করা যায়।
২। লোকাল ও গ্লোবাল ভেরিয়েবেল বলতে কি বুঝায়?
উত্তরঃ লোকাল ভেরিয়েবলঃ যে সকল ভেরিয়েবল ফাংশনের ভেতরে ডিক্লেয়ার করা হয় সেই সকল ভেরিয়েবলকে লোকাল ভেরিয়েবল বলা হয়।
গ্লোবাল ভেরিয়েবলঃ যে সকল ভেরিয়েবল ফাংশনের বাইরে বা মূল প্রোগ্রামে ডিক্লেয়ার করা হয় তাকে গ্লোবাল ভেরিয়েবল বলে।
৩। Function Argument বলতে কি বুঝায়?
উত্তরঃ ফাংশন কল করার সময় ফাংশনের ভেতরে যে মান বা ভ্যালু পাস করা হয়, তাকে ফাংশন আর্গুমেন্ট বলা হয়।
৪। User Defined Function বলতে কি বুঝায়?
উত্তরঃ প্রোগ্রামার তার নিজের প্রয়োজন অনুযায়ী যে ফাংশন তৈরি করে, তাকে ইউজার ডিফাইন্ড ফাংশন বলা হয়।
৫। কয়েকটি লাইব্রেরি ফাংশনের নাম লিখ।
উত্তরঃ পাইথনের কয়েকটি লাইব্রেরি ফাংশন হলো: print(), type(), len(), input() ইত্যাদি।
৬। Python এ Date Time module এর কাজ কি?
উত্তরঃ পাইথনে তারিখ এবং সময় সংক্রান্ত বিভিন্ন কাজ (যেমন: বর্তমান সময় দেখা, সময় ফরম্যাট করা) করার জন্য Date Time মডিউল ব্যবহৃত হয়।
সংক্ষিপ্ত
১। লোকাল ও গ্লোবাল ভেরিয়েবলের মধ্যে পার্থক্য লিখ।
উত্তরঃ লোকাল ও গ্লোবাল ভেরিয়েবলের মধ্যে পার্থক্য নিচে দেওয়া হলো।
লোকাল ভেরিয়েবল (Local Variable) | গ্লোবাল ভেরিয়েবল (Global Variable) |
|---|---|
যে সকল ভেরিয়েবল ফাংশনের ভেতরে ডিক্লেয়ার করা হয় তাকে লোকাল ভেরিয়েবল বলে। | যে সকল ভেরিয়েবল ফাংশনের বাইরে বা মূল প্রোগ্রামে ডিক্লেয়ার করা হয় তাকে গ্লোবাল ভেরিয়েবল বলে। |
লোকাল ভেরিয়েবল ফাংশনের বাহির থেকে এক্সেস করা যায় না। | প্রোগ্রামের যেকোনো স্থান থেকে বা যেকোনো ফাংশনের ভেতর থেকে এক্সেস করা যায়। |
ফাংশনের কাজ শেষ হলে এটি মেমোরি থেকে মুছে যায়। | প্রোগ্রাম শেষ না হওয়া পর্যন্ত এটি মেমোরিতে থাকে। |
অন্য ফাংশন এর ডেটা শেয়ার বা এক্সেস করতে পারে না। | একাধিক ফাংশন একই গ্লোবাল ভেরিয়েবলের ডেটা শেয়ার করতে পারে। |
২। ইউজার ডিফাইন্ড ফাংশনের সুবিধা লিখ।
উত্তরঃ ইউজার ডিফাইন্ড ফাংশনের সুবিধাসমূহ হলোঃ
৩। ফাংশন ব্যবহারের সুবিধা লিখ।
উত্তরঃ ফাংশন ব্যবহারের সুবিধা সমূহঃ
৪। পাস বাই রেফারেন্স ও পাস বাই ভ্যালু কি? সংক্ষেপে লিখ।
উত্তরঃ
পাস বাই ভ্যালু: ফাংশন কল করার সময় আর্গুমেন্ট হিসেবে ভেরিয়েবলের মূল ভ্যালুর একটি কপি পাঠানো হয়। ফাংশনের ভেতরে মান পরিবর্তন করলে মূল ভেরিয়েবলের মান পরিবর্তন হয় না।
উদাহরণ:
def passValue(x):
x = 20
a = 10
passValue(a)
print(a)
Output:
10
এখানে a-এর মান 10 ছিল। ফাংশনে a-এর মান পাঠানো হলেও x-এ পরিবর্তন করার কারণে a পরিবর্তন হয়নি।
পাস বাই রেফারেন্স: ফাংশন কল করার সময় আর্গুমেন্ট হিসেবে ভেরিয়েবলের মেমোরি অ্যাড্রেস পাঠানো হয়। ফলে ফাংশনের ভেতরে মান পরিবর্তন করলে মূল ভেরিয়েবলের মানও পরিবর্তিত হয়।
উদাহরণ:
def passByRef(numbers):
numbers.append(40)
my_list = [10, 20, 30]
passByRef(my_list)
print(my_list)
Output:
[10, 20, 30, 40]
এখানে my_list এবং numbers একই list object-কে নির্দেশ করছে। তাই numbers-এ append() করলে মূল my_list-ও পরিবর্তিত হয়েছে।
৫। রিকার্সিভ ফাংশনের সুবিধা অসুবিধা লিখ।
উত্তরঃ রিকার্সিভ ফাংশনের সুবিধা অসুবিধা সমূহঃ
সুবিধা | অসুবিধা |
|---|---|
i. কোড সহজ এবং সংক্ষিপ্ত হয়। | i. বেশি মেমোরি ব্যবহার করে। |
ii. জটিল সমস্যা সহজে সমাধানে করা যায়। | ii. Execution করতে সময় বেশি লাগে। |
iii. কিছু সমস্যায় লুপের তুলনায় Recursive Function বেশি পরিষ্কার হয়। | iii. Infinite Loop-এ পড়ে ক্র্যাশ করতে পারে। |
iv. গাণিতিক সমস্যা সমাধানে সুবিধাজনক। | iv. Debugging করা কঠিন। |
৬। Function Calling বলতে কি বুঝায়?
উত্তরঃ ফাংশন কলিং বলতে কোনো ফাংশনকে তার নির্দিষ্ট নাম ব্যবহার করে চালু বা Execute করাকে বোঝায়। অর্থাৎ, আগে একটি ফাংশন তৈরি করার পর যখন সেই ফাংশনের নাম লিখে সেটিকে চালানো হয়, তখন তাকে Function Calling বলে। ফাংশন কল না করা পর্যন্ত ফাংশনের ভেতরের কোড এক্সিকিউট হয় না। ফাংশন কল করার সময় প্রয়োজন হলে আর্গুমেন্ট পাস করা যায়।
Syntax:
def myFunc():
#statements
myFunct()
৭। User defined function and built-in function এর পার্থক্য লিখ।
উত্তরঃ User defined function and built-in function এর পার্থক্যঃ
বিল্ট-ইন ফাংশন (Built-in Function) | ইউজার ডিফাইন্ড ফাংশন (User Defined Function) |
|---|---|
যে ফাংশনগুলো পাইথন ল্যাঙ্গুয়েজের সাথে ডিফল্টভাবে তৈরি করা থাকে। | প্রোগ্রামার তার নিজের প্রয়োজনে যে ফাংশনগুলো তৈরি করে তাকে ইউজার ডিফাইন্ড ফাংশন বলে। |
সরাসরি নাম ধরে কল করা যায় বা ইমপোর্ট করে ব্যবহার করতে হয়। | ব্যবহারের পূর্বে অবশ্যই 'def' কিওয়ার্ড দিয়ে ডিফাইন করে নিতে হয়। |
এগুলোর ভেতরের কোড বা লজিক পরিবর্তন করা যায় না। | প্রয়োজন অনুযায়ী এগুলোর ভেতরের লজিক যেকোনো সময় পরিবর্তন করা যায়। |
উদাহরণঃ print(), type(), len(), input() ইত্যাদি। | উদাহরণঃ def my_function():, def calculate_sum(): ইত্যাদি। |
১। Function-কী? এর শ্রেণিবিভাগ আলোচনা কর।
উত্তরঃ ফাংশন হলো প্রোগ্রামের একটি নির্দিষ্ট এবং স্বাধীন ব্লক যা কোনো একটি নির্দিষ্ট কাজ সম্পন্ন করার জন্য লেখা হয়। প্রোগ্রামের কোনো অংশে একটি কাজ বারবার করার প্রয়োজন হলে কোডগুলো বারবার না লিখে একটি ফাংশন তৈরি করে রাখা হয় এবং প্রয়োজনমতো কল করে ব্যবহার করা হয়। প্রতিটি ফাংশনের নামের শেষে এক জোড়া প্রথম বন্ধনী "()" থাকে। এই বন্ধনী বা ব্রাকেটের মধ্যে ভেরিয়েবল ব্যবহার করা হলে তাকে প্যারামিটার বা আরগুমেন্ট বলা হয়। একটি ফাংশনের মধ্যে প্যারামিটার বা আরগুমেন্ট থাকতেও পারে নাও পারে। আবার একটি ফাংশনে একাধিক প্যারামিটার ও থাকতে পারে।
পাইথনে ফাংশনকে মূলত দুইটি প্রধান ভাগে ভাগ করা যায়:
১. লাইরেরি ফাংশন বা বিল্ট-ইন ফাংশন (Built-in Function): যে ফাংশনগুলো পাইথন ল্যাঙ্গুয়েজের সাথে ডিফল্টভাবে তৈরি করা থাকে, তাদেরকে বিল্ট-ইন ফাংশন বলে। এই ধরনের ফাংশনের নির্দিষ্ট কাজ থাকে। প্রোগ্রামাররা সরাসরি এই ফাংশনগুলো ব্যবহার করতে পারেন। যেমন: print(), len(), type(), max(), min() ইত্যাদি।
২. ইউজার-ডিফাইন্ড ফাংশন (User-Defined Function): প্রোগ্রামার বা ইউজার তার নিজের কোডিংয়ের প্রয়োজনে যে ফাংশনগুলো নিজে তৈরি করে, সেগুলোকে ইউজার-ডিফাইন্ড ফাংশন বলে। পাইথনে 'def' কিওয়ার্ড ব্যবহার করে এই ফাংশন তৈরি করতে হয়। এটি একটি নির্দিষ্ট প্রজেক্ট বা কাজের লজিক অনুযায়ী কাস্টমাইজ করা যায়।
২। উদাহরণসহ ফাংশন ডেফিনেশন এবং কলিং প্রক্রিয়া ব্যাখ্যা কর।
উত্তরঃ পাইথনে একটি ফাংশন তৈরি করাকে ফাংশন ডেফিনেশন (Function Definition) বলা হয়। ফাংশন তৈরি করার জন্য প্রথমে 'def' কিওয়ার্ড লিখতে হয়, এরপর ফাংশনের একটি নাম দিতে হয় এবং শেষে প্যারেনথেসিস () ও কোলন (:) দিতে হয়। ফাংশনের ভেতরের কাজগুলো ইনডেন্টেশন মেনে লিখতে হয়।
ফাংশন তৈরি করার পর সেটি নিজে থেকে কাজ করে না। এটিকে কাজ করানোর জন্য ফাংশনের নাম ধরে ডাকতে হয়, যাকে ফাংশন কলিং (Function Calling) বলা হয়।
উদাহরণস্বরূপ একটি ফাংশন ডেফিনেশন ও কলিং নিচে দেওয়া হলো:
def add_numbers(a, b):
result = a + b
return result
total = add_numbers(15, 20)
print(total)
উপরের প্রোগ্রামে `def add_numbers(a, b):` হলো ফাংশন ডেফিনেশন এবং `add_numbers(15, 20)` হলো ফাংশন কলিং।
৩। লাইব্রেরি ফাংশন এবং ইউজার ডিফাইন্ড ফাংশনের পার্থক্য লিখ।
উত্তরঃ লাইব্রেরি ফাংশন এবং ইউজার ডিফাইন্ড ফাংশনের পার্থক্য-
লাইব্রেরি ফাংশন (Library Function) | ইউজার ডিফাইন্ড ফাংশন (User Defined Function) |
|---|---|
যে ফাংশনগুলো পাইথন ল্যাঙ্গুয়েজের সাথে ডিফল্টভাবে তৈরি করা থাকে, তাদেরকে বিল্ট-ইন ফাংশন বলে। | প্রোগ্রামার বা ইউজার তার নিজের কোডিংয়ের প্রয়োজনে যে ফাংশনগুলো নিজে তৈরি করে, সেগুলোকে ইউজার-ডিফাইন্ড ফাংশন বলে। |
এই সকল ফাংশন পাইথন ডেভেলপারগন তৈরী করে থাকেন। | প্রোগ্রামারগন তাদের কাজের সুবিধার্থে এই সকল ফাংশন তৈরি করে থাকেন। |
প্রোগ্রামারদের সুবিধার জন্য এই সকল ফাংশন পূর্ব থেকে দেওয়া থাকে। | ইউজার নিজের প্রজেক্ট অনুযায়ী নিজের লজিক ইউজ করে এই সকল ফাংশন তৈরি করেন। |
লাইব্রেরি ফাংশনের ভেতরের কোড বা লজিক প্রোগ্রামার পরিবর্তন করতে পারে না। | ইউজার ডিফাইন্ড ফাংশনের লজিক ব্যবহারকারী যেকোনো সময় পরিবর্তন করতে পারে। |
লাইব্রেরি ফাংশন সরাসরি বা মডিউল ইমপোর্ট করে ব্যবহার করতে হয়। | ইউজার ডিফাইন্ড ফাংশন 'def' কিওয়ার্ড দিয়ে প্রথমে ডিফাইন করতে হয় এবং পরে কল করতে হয়। |
অধ্যায়-২
অতি সংক্ষিপ্ত
১। open() function-এর সিন্ট্যাক্স লিখ।
উত্তরঃ open() function-এর সিন্ট্যাক্স:
file_object = open("file_name", "mode")
২। open() function-এর কাজ কি?
উত্তরঃ open() ফাংশনের কাজ হলো পাইথনে কোনো ফাইলকে রিড (Read), রাইট (Write) বা অ্যাপেন্ড (Append) করার জন্য ফাইলটি ওপেন করা বা ফাইলটি খোলা।
৩। পাইথন প্রোগ্রামে কি কি উপায়ে মান ইনপুট নেওয়া হয়?
উত্তরঃ পাইথনে মূলত input() ফাংশনের মাধ্যমে কিবোর্ড থেকে ইউজারের কাছ থেকে মান ইনপুট নেওয়া হয়।
৪। ৪ টি ফাইল অপারেশনের নাম লিখ।
উত্তরঃ ৪টি ফাইল অপারেশন হলো:
৫। File Operation বলতে কি বুঝ?
উত্তরঃ কোনো ফাইলে ডাটা সংরক্ষণ করা, সংরক্ষিত ডাটা পড়া, ফাইল আপডেট করা এবং ফাইল বন্ধ করার প্রক্রিয়াকেই ফাইল অপারেশন বলা হয়।
সংক্ষিপ্ত
১। File Operation-এর সুবিধা লিখ।
উত্তরঃ
২। ফাইল অপারেশন ব্যখ্যা কর।
উত্তরঃফাইল অপারেশন হলো কম্পিউটারের স্টোরেজে থাকা ফাইলের সাথে প্রোগ্রামের যোগাযোগ স্থাপন করা। পাইথনে ফাইল অপারেশনের তিনটি প্রধান ধাপ রয়েছে। প্রথম ধাপে open() ফাংশন ব্যবহার করে ফাইলটি নির্দিষ্ট মোডে (যেমন 'r', 'w', 'a') খুলতে হয়। দ্বিতীয় ধাপে ফাইলের ডাটা পড়া (read) বা ফাইলে নতুন ডাটা লেখা (write) হয়। তৃতীয় ধাপে কাজ শেষে close() ফাংশন ব্যবহার করে ফাইলটি মেমোরি থেকে বন্ধ করে দিতে হয়।
৩। ফাইলে ডাটা রিড ও রাইট করার প্রোগ্রাম লিখ।
উত্তরঃ ফাইলে ডাটা রিড ও রাইট করার প্রোগ্রাম:
file = open("data.txt", "w")
file.write("Hello Python")
file.close()
file = open("data.txt", "r")
content = file.read()
রচনামূলক
১। একটি File-এ Data Store করার প্রোগ্রাম তৈরি কর।
উত্তরঃ
ফাইলে ডাটা স্টোর করার জন্য পাইথনে ফাইলটিকে Write ('w') অথবা Append ('a') মোডে খুলতে হয়। Write মোড ব্যবহার করলে ফাইলের পূর্বের ডাটা মুছে নতুন ডাটা যুক্ত হয়। আর Append মোড ব্যবহার করলে পূর্বের ডাটার সাথে নতুন ডাটা যুক্ত হয়। নিচে ব্যবহারকারীর কাছ থেকে ইনপুট নিয়ে একটি ফাইলে ডাটা স্টোর করার একটি সহজ প্রোগ্রাম দেওয়া হলো:
file = open("student_info.txt", "a")
name = input("Enter Student Name: ")
roll = input("Enter Roll Number: ")
file.write(name + "\n")
file.write(roll + "\n"
এই প্রোগ্রামে প্রথমে 'student_info.txt' নামের একটি ফাইলকে 'a' (append) মোডে ওপেন করা হয়েছে। এরপর ইউজারের কাছ থেকে নাম এবং রোল ইনপুট নেওয়া হয়েছে। file.write() ফাংশনের মাধ্যমে সেই ইনপুট করা ডাটা ফাইলে লেখা হয়েছে। শেষে ফাইলটিকে close() ফাংশন দিয়ে মেমোরি থেকে রিলিজ করে দেওয়া হয়েছে। এটি ফাইল অপারেশনের একটি আদর্শ উদাহরণ।
অধ্যায়-৩
অতি সংক্ষিপ্ত
১। অ্যাপ্লিকেশন সফটওয়্যার বলতে কি বুঝ?
উত্তরঃ যে সফটওয়্যারগুলো ব্যবহারকারীর নির্দিষ্ট কোনো কাজ বা চাহিদা পূরণের জন্য তৈরি করা হয়, তাকে অ্যাপ্লিকেশন সফটওয়্যার বলে। (যেমন: MS Word, Google Chrome)।
২। পাইথনে ব্যাবহৃত বিভিন্ন মডিউলের নাম লিখ।
উত্তরঃ পাইথনে ব্যবহৃত কয়েকটি মডিউল হলো: math, random, os, datetime, sys ইত্যাদি।
৩। Package বলতে কি বুঝ?
উত্তরঃ প্যাকেজ হলো এমন একটি ডিরেক্টরি বা ফোল্ডার যার ভেতরে একাধিক পাইথন মডিউল এবং একটি বিশেষ __init__.py ফাইল থাকে।
৪। Pandas কী?
উত্তরঃ Pandas হলো পাইথনের একটি শক্তিশালী ওপেন সোর্স লাইব্রেরি, যা মূলত ডাটা অ্যানালাইসিস এবং ডাটা ম্যানিপুলেশনের জন্য ব্যবহৃত হয়।
৫। মডিউল কি?
উত্তরঃ মডিউল হলো একটি পাইথন (.py) ফাইল, যার ভেতরে বিভিন্ন ফাংশন, ক্লাস এবং ভেরিয়েবল লেখা থাকে এবং যা অন্য প্রোগ্রামে ইমপোর্ট করে ব্যবহার করা যায়।
সংক্ষিপ্ত
১। মডিউল ও প্যাকেজের কাজ লিখ।
উত্তরঃ
মডিউলের কাজ: একটি বড় প্রোগ্রামকে ছোট ছোট ফাইলে বিভক্ত করে কোডকে সুসংগঠিত করা। একবার লেখা কোড অন্য প্রোগ্রামে বারবার ব্যবহার করার সুবিধা দেওয়া।
প্যাকেজের কাজ: সম্পর্কিত অনেকগুলো মডিউলকে একটি ফোল্ডারের অধীনে সংঘবদ্ধ রাখা। এটি প্রোজেক্টের ডিরেক্টরি স্ট্রাকচার মেইনটেইন করে এবং নেমস্পেস কনফ্লিক্ট এড়াতে সাহায্য করে।
২। মডিউল তৈরির সিন্ট্যাক্স / প্রোগ্রাম লিখ।
উত্তরঃ মডিউল তৈরি করার জন্য আলাদা কোনো সিন্ট্যাক্স নেই। যেকোনো পাইথন কোড লিখে .py এক্সটেনশনে সেভ করলেই সেটি একটি মডিউল হয়ে যায়।
উদাহরণ: my_module.py নামের ফাইলে কোড:
def greet(name):
print("Hello", name)
অন্য ফাইলে ব্যবহার:
import my_module
my_module.greet("Rahim")
৩। matplotlib এর কাজ লেখ।
উত্তরঃ Matplotlib হলো পাইথনের একটি ডাটা ভিজ্যুয়ালাইজেশন লাইব্রেরি। এর কাজ গুলো হলো-
৪। Module & Package এর পার্থক্য লিখ।
উত্তরঃ Module & Package এর পার্থক্য
মডিউল (Module) | প্যাকেজ (Package) |
|---|---|
মডিউল হলো একটি সিঙ্গেল পাইথন ফাইল (.py)। | প্যাকেজ হলো একটি ডিরেক্টরি বা ফোল্ডার, যার ভেতরে একাধিক মডিউল থাকে। |
মডিউলের ক্ষেত্রে __init__.py ফাইলের কোনো প্রয়োজন নেই। | প্যাকেজ হিসেবে কাজ করার জন্য ফোল্ডারের ভেতর আবশ্যিকভাবে __init__.py ফাইল থাকতে হয়। |
এর ভেতরে ক্লাস, ফাংশন বা ভেরিয়েবল ডিফাইন করা থাকে। | এর ভেতরে অসংখ্য সাব-প্যাকেজ এবং মডিউল সংযুক্ত থাকে। |
ছোট বা মাঝারি কাজের জন্য একটি নির্দিষ্ট লজিক ধারণ করতে এটি ব্যবহৃত হয়। | বড় প্রোজেক্ট পরিচালনার জন্য একাধিক মডিউলকে সংঘবদ্ধ করে রাখতে এটি ব্যবহৃত হয়। |
৫। মডিউল ও প্যাকেজের গুরুত্ব লিখ।
উত্তরঃ বড় প্রোজেক্ট ডেভেলপমেন্টের ক্ষেত্রে মডিউল এবং প্যাকেজের গুরুত্ব অপরিসীম। এগুলো ব্যবহার করলে পুরো প্রোজেক্টের কোড একটি ফাইলে না লিখে লজিক্যালি আলাদা ফাইলে ভাগ করে রাখা যায়। এতে টিমওয়ার্ক সহজ হয়। প্রোগ্রামের কোনো অংশে ভুল হলে নির্দিষ্ট মডিউল চেক করে দ্রুত তা ঠিক করা যায়। সর্বোপরি, কোড রিইউজেবিলিটি বাড়ে বলে সময় ও শ্রম উভয়েরই সাশ্রয় হয়।
রচনামূলক
১। মডিউল তৈরি করে ফিবোনাক্কি সিরিজের প্রোগ্রাম লিখ।
উত্তরঃ ফিবোনাক্কি সিরিজের জন্য আমরা প্রথমে একটি মডিউল ফাইল তৈরি করব এবং পরে মূল ফাইলে সেটি ইমপোর্ট করে ব্যবহার করব।
প্রথমে fibo_module.py নামে একটি ফাইল তৈরি করে নিচের কোডটি লিখতে হবে:
def fibonacci_series(n):
a = 0
b = 1
for _ in range(n):
print(a, end=" ")
next_val = a + b
a = b
b = next_val
এরপর একই ফোল্ডারে main.py নামে আরেকটি ফাইল তৈরি করে নিচের কোডটি লিখতে হবে:
import fibo_module
fibo_module.fibonacci_series(10)
এখানে, fibo_module.py হলো আমাদের ইউজার ডিফাইন্ড মডিউল। এই মডিউলের ভেতরে `fibonacci_series()` নামের একটি ফাংশন তৈরি করা হয়েছে যা ইনপুট হিসেবে একটি সংখ্যা নেয় এবং লুপ চালিয়ে সেই সংখ্যা পর্যন্ত ফিবোনাক্কি সিরিজ প্রিন্ট করে। `main.py` ফাইলে `import` কিওয়ার্ড ব্যবহার করে মডিউলটি যুক্ত করা হয়েছে এবং ফাংশনটি কল করা হয়েছে। এটি মডিউল ব্যবহারের একটি চমৎকার পদ্ধতি।
অধ্যায়-৪
অতি সংক্ষিপ্ত
১। ক্লাস কি? (বা Class বলতে কি বুঝায়?)
উত্তরঃ ক্লাস হলো অবজেক্ট তৈরি করার একটি টেমপ্লেট বা ব্লু-প্রিন্ট, যার ভেতরে অবজেক্টের বিভিন্ন প্রোপার্টি (ভেরিয়েবল) এবং মেথড (ফাংশন) ডিফাইন করা থাকে।
২। Python কোন লেভেলের Programming Language?
উত্তরঃ Python একটি হাই-লেভেল (High-level) প্রোগ্রামিং ল্যাঙ্গুয়েজ।
৩। পাইথন ল্যাংগুয়েজ কিভাবে ক্লাস তৈরি হয়? (বা Class তৈরির syntax লিখ।)
উত্তরঃ class তৈরির সিন্ট্যাক্স:
class ClassName:
#classBody
৪। ডেস্ট্রাক্টর মেথড কী?
উত্তরঃ অবজেক্টের কাজ শেষ হয়ে গেলে অবজেক্টটিকে মেমোরি থেকে মুছে ফেলার জন্য যে স্পেশাল মেথড কল হয়, তাকে ডেস্ট্রাক্টর মেথড (__del__) বল
৫। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং বলতে কি বুঝায়?
উত্তরঃ অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (Object-Oriented Programming বা OOP) হলো এমন একটি প্রোগ্রামিং পদ্ধতি, যেখানে প্রোগ্রামকে অবজেক্ট (Object) ও ক্লাস (Class) এর মাধ্যমে তৈরি ও পরিচালনা করা হয়।
সংক্ষিপ্ত
১। Abstraction কী? উদাহরণ দাও।
উত্তরঃ Abstraction হলো OOP-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যেখানে কোনো বস্তুর প্রয়োজনীয় তথ্য বা বৈশিষ্ট্য ব্যবহারকারীর সামনে দেখানো হয় এবং অপ্রয়োজনীয় অভ্যন্তরীণ কাজগুলো গোপন রাখা হয়।
সহজ উদাহরণ:
আমরা যখন একটি গাড়ি চালাই, তখন শুধু স্টিয়ারিং, ব্রেক ও অ্যাক্সিলারেটর ব্যবহার করি। গাড়ির ইঞ্জিনের ভিতরে কীভাবে কাজ হচ্ছে, তা আমাদের জানতে হয় না। এটিই Abstraction-এর উদাহরণ।
Python উদাহরণ:
from abc import ABC, abstractmethod
class Car(ABC):
@abstractmethod
def start(self):
pass
class Toyota(Car):
def start(self):
print(
এখানে Car ক্লাসে start() কীভাবে কাজ করবে তা বিস্তারিত বলা হয়নি। শুধু কী কাজ করতে হবে তা নির্ধারণ করা হয়েছে। Toyota ক্লাসে start() মেথডটি কীভাবে কাজ করবে তা নির্ধারণ করা হয়েছে। অর্থাৎ, গাড়ি কীভাবে ভিতরে স্টার্ট হচ্ছে তা গোপন রেখে শুধু গাড়ি স্টার্ট করার কাজটি ব্যবহারকারীর সামনে দেখানো হয়েছে। এটিই Abstraction।
২। if...else এর syntax গুরুত্ব লেখ।
উত্তরঃ প্রোগ্রামিংয়ে কন্ডিশন বা শর্তের উপর ভিত্তি করে সিদ্ধান্ত নেওয়ার জন্য if...else ব্যবহৃত হয়। এর গুরুত্ব হলো এটি প্রোগ্রামকে লজিক্যাল সিদ্ধান্ত নিতে সাহায্য করে।
সিন্ট্যাক্স:
if condition:
#statement1
else:
#statement2
৩। Private ও protected variable-এর মাঝে পার্থক্য লেখ।
উত্তরঃ Private ও protected variable-এর মাঝে পার্থক্য-
প্রাইভেট ভেরিয়েবল (Private Variable) | প্রোটেক্টেড ভেরিয়েবল (Protected Variable) |
|---|---|
ভেরিয়েবলের নাম ডাবল আন্ডারস্কোর (__) দিয়ে শুরু হয়। (যেমন: __name) | ভেরিয়েবলের নাম সিঙ্গেল আন্ডারস্কোর (_) দিয়ে শুরু হয়। (যেমন: _name) |
এটি নির্দিষ্ট ক্লাসের বাইরে থেকে কোনোভাবেই এক্সেস করা যায় না। | এটি ক্লাসের বাইরে এক্সেস করা উচিত নয়, তবে প্রয়োজনে এক্সেস করা সম্ভব। |
চাইল্ড ক্লাস বা সাবক্লাস প্রাইভেট ভেরিয়েবল এক্সেস করতে পারে না। | চাইল্ড ক্লাস বা সাবক্লাস প্রোটেক্টেড ভেরিয়েবল সহজেই এক্সেস করতে পারে। |
এটি কঠোরভাবে ডেটা হাইডিং বা এনক্যাপসুলেশন নিশ্চিত করে। | এটি তুলনামূলক শিথিল ডেটা হাইডিং প্রদান করে। |
৪। ইনহেরিটেন্স সম্পর্কে লেখ।
উত্তরঃ ইনহেরিটেন্স (Inheritance) হলো OOP-এর একটি শক্তিশালী বৈশিষ্ট্য।
এর মাধ্যমে একটি নতুন ক্লাস (Child Class) বিদ্যমান অন্য কোনো ক্লাস (Parent Class) থেকে বৈশিষ্ট্য (Attributes) এবং আচরণ (Methods) উত্তরাধিকার সূত্রে লাভ করতে পারে। এটি কোড রিইউজেবিলিটি (Code Reusability) বৃদ্ধি করে এবং প্রোগ্রামিংয়ের জটিলতা কমায়।
ইনহেরিটেন্সের মূল বৈশিষ্ট্যসমূহ:
উদাহরণ:
যদি একটি প্যারেন্ট ক্লাস P হয় এবং চাইল্ড ক্লাস C হয়, তবে C ক্লাসটি P ক্লাসের সকল পাবলিক এবং প্রোটেক্টেড মেম্বার ব্যবহার করতে পারবে।
সিন্ট্যাক্স (Python):
class Parent:
def display(self):
print("Parent Class")
class Child(Parent):
def show(self):
print("Child Class")
obj = Child(
ইনহেরিটেন্সের প্রকারভেদগুলোর মধ্যে সিঙ্গেল, মাল্টিপল, মাল্টিলেভেল এবং হায়ারার্কিক্যাল ইনহেরিটেন্স উল্লেখযোগ্য।
রচনামূলক
১। ক্লাস ব্যবহার করে পাইথন প্রোগ্রাম তৈরি কর। / উদাহরণ সহ ক্লাস এবং অবজেক্ট বর্ণনা কর।
উত্তরঃ
ক্লাস: ক্লাস হলো সমজাতীয় অবজেক্টের একটি যৌক্তিক গঠন বা ব্লু-প্রিন্ট। ক্লাসের বাস্তব কোনো অস্তিত্ব নেই, এটি কেবল মেমোরিতে একটি লজিক্যাল কাঠামো তৈরি করে।
অবজেক্ট: অবজেক্ট হলো ক্লাসের বাস্তব রূপ বা ইনস্ট্যান্স। একটি ক্লাসের অধীনে অসংখ্য অবজেক্ট তৈরি করা যায়। প্রতিটি অবজেক্ট মেমোরিতে জায়গা দখল করে।
নিচে ক্লাস এবং অবজেক্ট ব্যবহার করে একটি পাইথন প্রোগ্রাম দেওয়া হলো:
class Student:
def __init__(self, name, roll):
self.name = name
self.roll = roll
def display_info(self):
print("Name:", self.name)
ব্যাখ্যা: উপরের প্রোগ্রামে Student নামের একটি ক্লাস তৈরি করা হয়েছে। __init__ হলো কনস্ট্রাক্টর যা অবজেক্ট তৈরির সময় কল হয়। display_info হলো একটি মেথড। student1 এবং student2 হলো Student ক্লাসের দুটি আলাদা অবজেক্ট। যখনই আমরা অবজেক্ট তৈরি করে মেথড কল করছি, তখন সেই অবজেক্টের ডাটা প্রিন্ট হচ্ছে। এভাবেই পাইথনে ক্লাস এবং অবজেক্ট কাজ করে।
অধ্যায়-৫
অতি সংক্ষিপ্ত
১। ইনহেরিট্যান্স বলতে কি বোঝায়?
উত্তরঃ একটি পুরানো ক্লাসের বৈশিষ্ট্য বা মেথডগুলো নতুন একটি ক্লাসে উত্তরাধিকার সূত্রে লাভ করার প্রক্রিয়াকে ইনহেরিট্যান্স বলে।
পলিমরফিজম বলতে কি বুঝ?
উত্তরঃ পলিমরফিজম মানে হলো 'বহুরূপতা'। একই নামের মেথড বা ফাংশন যখন ভিন্ন ভিন্ন ক্লাসে ভিন্ন ভিন্ন কাজ সম্পাদন করে, তখন তাকে পলিমরফিজম বলে।
OOP ল্যাংগুয়েজ বলতে কি বোঝায়?
উত্তরঃ যেসব প্রোগ্রামিং ভাষা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের বৈশিষ্ট্যগুলো (যেমন: ক্লাস, অবজেক্ট, ইনহেরিট্যান্স) সাপোর্ট করে, তাদের OOP ল্যাংগুয়েজ বলে (যেমন: Python, Java, C++)।
অবজেক্ট কি?
উত্তরঃ অবজেক্ট হলো ক্লাসের একটি ইনস্ট্যান্স বা বাস্তব রূপ, যার নির্দিষ্ট স্টেট (অ্যাট্রিবিউট) এবং বিহেভিয়র (মেথড) থাকে।
ক্লাস কি?
উত্তরঃ ক্লাস হলো অবজেক্ট তৈরি করার একটি নকশা বা টেমপ্লেট।
সংক্ষিপ্ত (৪-৮ লাইন)
"OOP-এর 4-piller" এর গুরুত্ব লিখ।
উত্তরঃ OOP-এর চারটি পিলার হলো Encapsulation, Abstraction, Inheritance, এবং Polymorphism। এগুলোর গুরুত্ব অপরিসীম:
ডেটা সিকিউরিটি নিশ্চিত করে (Encapsulation)।
জটিলতা কমিয়ে কোড সহজবোধ্য করে (Abstraction)।
কোডের পুনরাবৃত্তি কমায় এবং সময় বাঁচায় (Inheritance)।
একই ইন্টারফেসে বিভিন্ন রূপ ব্যবহারের সুযোগ দেয় (Polymorphism)।
অ্যাবস্ট্রাকশন কী? সংক্ষেপে লিখ।
উত্তরঃ অ্যাবস্ট্রাকশন হলো অপ্রয়োজনীয় বা ব্যাকগ্রাউন্ডের জটিল তথ্য গোপন করে শুধুমাত্র ইউজারের জন্য প্রয়োজনীয় ফিচারগুলো সামনে তুলে ধরার প্রক্রিয়া। পাইথনে abc মডিউল ব্যবহার করে অ্যাবস্ট্রাক্ট ক্লাস তৈরি করা হয়, যার মাধ্যমে অ্যাবস্ট্রাকশন অর্জন করা সম্ভব।
অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং-এর চার পিলার / বৈশিষ্ট্য সম্পর্কে লিখ।
উত্তরঃ
১. Inheritance: এক ক্লাসের প্রোপার্টি অন্য ক্লাসে ব্যবহার করা।
২. Polymorphism: একই নামের মেথডের ভিন্ন ভিন্ন কাজ বা রূপ।
৩. Encapsulation: ডেটা এবং মেথডকে একটি সিঙ্গেল ইউনিটে (ক্লাস) আবদ্ধ করে রাখা।
৪. Abstraction: ব্যবহারকারীর কাছ থেকে অপ্রয়োজনীয় লজিক হাইড করে রাখা।
এনক্যাপসুলেশন কী? উদাহরণসহ লিখ।
উত্তরঃ এনক্যাপসুলেশন হলো ডেটা (ভেরিয়েবল) এবং সেই ডেটা নিয়ে কাজ করা মেথডগুলোকে একটি ক্যাপসুলের মতো একক ইউনিটে (ক্লাসে) মুড়িয়ে রাখার পদ্ধতি। এটি মূলত ডেটাকে বাইরের অননুমোদিত এক্সেস থেকে রক্ষা করে। পাইথনে প্রাইভেট ভেরিয়েবল (__) ব্যবহার করে এনক্যাপসুলেশন করা হয়।
রচনামূলক (১০-২০ লাইন)
প্রোগ্রামসহ পলিমরফিজম পদ্ধতি বর্ণনা কর।
উত্তরঃ পলিমরফিজম (Polymorphism) শব্দটি দুটি গ্রিক শব্দ "Poly" (অনেক) এবং "Morph" (রূপ) থেকে এসেছে। প্রোগ্রামিংয়ের ভাষায়, যখন একই ফাংশন বা মেথড নাম ব্যবহার করে ভিন্ন ভিন্ন অবজেক্টের জন্য ভিন্ন ভিন্ন কাজ করা যায়, তখন তাকে পলিমরফিজম বলে। পাইথনে মেথড ওভাররাইডিংয়ের মাধ্যমে পলিমরফিজম বাস্তবায়ন করা হয়।
নিচে পলিমরফিজম এর একটি উদাহরণ দেওয়া হলো:
class Bird:
def sound(self):
print("Birds make sound")
class Duck(Bird):
def sound(self):
print("Duck quacks")
class Crow(Bird):
def sound(self):
print("Crow caws")
def make_sound(bird_obj):
bird_obj.sound()
b = Bird()
d = Duck()
c = Crow()
make_sound(b)
make_sound(d)
make_sound(c)
উপরের প্রোগ্রামে `sound()` নামের মেথডটি তিনটি ক্লাসেই আছে, কিন্তু প্রতিটি ক্লাসে এটি আলাদা আউটপুট দিচ্ছে। এটাই পলিমরফিজমের বহুরূপতা।
ইনহেরিট্যান্স কী? বিস্তারিত বর্ণনা কর। (Super Class ও Subclass ব্যবহার করে)
ইনহেরিট্যান্স হলো এমন একটি প্রক্রিয়া যার মাধ্যমে একটি নতুন ক্লাস একটি বিদ্যমান ক্লাসের সমস্ত বৈশিষ্ট্য (ভেরিয়েবল এবং মেথড) অর্জন করে। যে ক্লাস থেকে বৈশিষ্ট্য নেওয়া হয় তাকে বলা হয় প্যারেন্ট ক্লাস বা সুপার ক্লাস (Super Class)। আর যে নতুন ক্লাসটি বৈশিষ্ট্য গ্রহণ করে তাকে বলা হয় চাইল্ড ক্লাস বা সাবক্লাস (Subclass)। এর প্রধান সুবিধা হলো কোডের পুনর্ব্যবহারযোগ্যতা বা Code Reusability।
class Animal:
def eat(self):
print("This animal is eating")
class Dog(Animal):
def bark(self):
print("The dog is barking")
d = Dog()
d.eat()
d.bark()
এখানে `Animal` হলো সুপার ক্লাস এবং `Dog` হলো সাবক্লাস। Dog ক্লাসে `eat()` মেথডটি না থাকা সত্ত্বেও, ইনহেরিট্যান্সের কারণে Dog এর অবজেক্ট `eat()` মেথডটিকে কল করতে পেরেছে।
প্রোগ্রামসহ এনক্যাপসুলেশন পদ্ধতি বর্ণনা কর।
এনক্যাপসুলেশন হলো অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য যা ক্লাসের ভেতরের সংবেদনশীল ডেটাকে সুরক্ষিত রাখে। এটি ডেটা হাইডিং নিশ্চিত করে। পাইথনে কোনো ভেরিয়েবলের আগে দুটি আন্ডারস্কোর (__) ব্যবহার করে তাকে প্রাইভেট ভেরিয়েবলে পরিণত করা যায়, যা ক্লাসের বাইরে থেকে সরাসরি পরিবর্তন করা যায় না। একে পরিবর্তন করার জন্য ক্লাসের ভেতরে গেটার (getter) এবং সেটার (setter) মেথড ব্যবহার করতে হয়।
class BankAccount:
def __init__(self, balance):
self.__balance = balance
def deposit(self, amount):
self.__balance += amount
def get_balance(self):
return self.__balance
account = BankAccount(1000)
account.deposit(500)
print(account.get_balance())
এখানে `__balance` একটি প্রাইভেট ভেরিয়েবল। এটি ক্লাসের বাইরে থেকে `account.__balance` লিখে সরাসরি এক্সেস করা যাবে বিনা, এক্সেস করতে হলে `get_balance()` মেথডটি ব্যবহার করতে হবে।
অধ্যায়-৬
অতি সংক্ষিপ্ত (১-২ লাইন)
yeild স্টেটমেন্ট কি? কেন ব্যবহার করা হয়?
yield একটি কিওয়ার্ড যা রিটার্নের মতো কাজ করে, তবে এটি ফাংশনকে শেষ না করে তার স্টেট বা অবস্থা ধরে রাখে। জেনারেটর ফাংশন তৈরিতে এটি ব্যবহৃত হয়।
Meta character কী?
রেগুলার এক্সপ্রেশনে (RegEx) যে ক্যারেক্টারগুলোর বিশেষ অর্থ বা কাজ থাকে (যেমন: . * + ? ^ $), তাদেরকে মেটা ক্যারেক্টার বলে।
Iterator বলতে কি বুঝায়?
ইটারেটর হলো এমন একটি অবজেক্ট, যার উপাদানগুলোর ওপর একে একে লুপ চালানো যায় (যেমন: লিস্ট, টুপল)। এটি __iter__() এবং __next__() মেথড ব্যবহার করে।
ডেকোরেটর বলতে কি বুঝায়?
ডেকোরেটর হলো এমন একটি ফাংশন যা অন্য একটি ফাংশনকে আর্গুমেন্ট হিসেবে নেয় এবং মূল ফাংশনের কোড পরিবর্তন না করে তার কার্যক্ষমতা বৃদ্ধি করে।
জেনারেটর কি?
জেনারেটর হলো এক বিশেষ ধরনের ইটারেটর, যা একসাথে সব মান মেমোরিতে সেভ না করে yield কিওয়ার্ডের মাধ্যমে একে একে মান তৈরি করে।
জেনারেটর ঘোষণার সিন্ট্যাক্স লিখ।
সাধারণ ফাংশনের মতোই `def` দিয়ে শুরু হয়, কিন্তু মান ফেরত দেওয়ার জন্য `return` এর বদলে `yield` কিওয়ার্ড ব্যবহার করা হয়।
সংক্ষিপ্ত (৪-৮ লাইন)
জেনারেটরের প্রয়োজনীয়তা কী?
সাধারণ ফাংশন যখন কোনো লিস্ট বা সিকোয়েন্স রিটার্ন করে, তখন পুরো ডাটা একসাথে মেমোরিতে লোড হয়। কিন্তু অনেক বড় ডাটা নিয়ে কাজ করার সময় এটি মেমোরি ফুল করে দিতে পারে। জেনারেটরের প্রয়োজনীয়তা এখানেই। জেনারেটর পুরো ডাটা মেমোরিতে না রেখে যখন যে ডাটা প্রয়োজন শুধু সেটি জেনারেট করে (yield করে), ফলে প্রচুর মেমোরি সাশ্রয় হয় এবং প্রোগ্রাম দ্রুত কাজ করে।
ইটারেটর-এর প্রসিডিউর কার্যনীতি সংক্ষেপে লিখ।
ইটারেটরের কার্যনীতি মূলত দুটি স্পেশাল মেথডের উপর নির্ভরশীল: `__iter__()` এবং `__next__()`। যখন কোনো ইটারেবল অবজেক্টে (যেমন লিস্ট) লুপ চালানো হয়, তখন প্রথমে `iter()` ফাংশন কল হয়ে একটি ইটারেটর অবজেক্ট তৈরি হয়। এরপর প্রতি ধাপে `next()` ফাংশন কল হয়ে পরবর্তী উপাদানটি প্রদান করে। যখন আর কোনো উপাদান বাকি থাকে না, তখন এটি `StopIteration` এক্সেপশন রেইজ করে থেমে যায়।
ডেকোরেটর ব্যবহার করে প্রোগ্রাম লিখ।
def my_decorator(func):
def wrapper():
print("Before function execution")
func()
print("After function execution")
return wrapper
@my_decorator
def say_hello():
print("Hello, World!")
say_hello()
রচনামূলক (১০-২০ লাইন)
জেনারেটর ব্যবহার করে 1 হতে 100 পর্যন্ত সংখ্যার যোগফল নির্ণয়।
জেনারেটর ফাংশন ব্যবহার করে মেমোরি সাশ্রয়ী উপায়ে ১ থেকে ১০০ পর্যন্ত সংখ্যাগুলোর যোগফল বের করার প্রোগ্রাম নিচে দেওয়া হলো:
def number_generator(n):
num = 1
while num <= n:
yield num
num += 1
total_sum = 0
for i in number_generator(100):
total_sum += i
print(total_sum)
এখানে `number_generator` হলো একটি জেনারেটর ফাংশন, যা `yield` কিওয়ার্ড ব্যবহার করে একে একে ১ থেকে ১০০ পর্যন্ত সংখ্যা জেনারেট করছে। এরপর একটি for লুপ চালিয়ে জেনারেটর থেকে পাওয়া মানগুলো `total_sum` ভেরিয়েবলে যোগ করা হয়েছে। জেনারেটর ব্যবহারের কারণে ১০০টি সংখ্যা একসাথে মেমোরিতে স্টোর হয়নি, বরং একটি একটি করে এসেছে এবং যোগ হয়েছে।
Iterator, Generator, এবং Decorator সম্পর্কে বিস্তারিত আলোচনা কর।
Iterator (ইটারেটর): ইটারেটর হলো একটি অবজেক্ট যা ইটারেটর প্রটোকল মেনে চলে, অর্থাৎ এতে `__iter__()` এবং `__next__()` মেথড থাকে। লিস্ট, টুপল, ডিকশনারি এগুলো সবই ইটারেবল অবজেক্ট। ইটারেটরের সাহায্যে একটি সিকোয়েন্সের মানগুলো একে একে ট্রাভার্স করা যায়। যখন সিকোয়েন্স শেষ হয়ে যায়, তখন এটি StopIteration এক্সেপশন তৈরি করে।
Generator (জেনারেটর): জেনারেটর হলো ইটারেটর তৈরি করার একটি সহজ উপায়। জেনারেটর ফাংশন দেখতে সাধারণ ফাংশনের মতোই, তবে এটি `return` এর পরিবর্তে `yield` স্টেটমেন্ট ব্যবহার করে। যখন জেনারেটর কল করা হয়, তখন এটি সরাসরি এক্সিকিউট না হয়ে একটি জেনারেটর অবজেক্ট রিটার্ন করে। এটি বিশাল পরিমাণ ডাটা প্রসেসিংয়ের ক্ষেত্রে মেমোরি ম্যানেজমেন্টের জন্য অত্যন্ত কার্যকর।
Decorator (ডেকোরেটর): ডেকোরেটর হলো একটি অ্যাডভান্সড টপিক, যা ফাংশনকে মডিফাই করতে ব্যবহৃত হয়। এটি মূলত একটি ফাংশন যা অন্য একটি ফাংশনকে প্যারামিটার হিসেবে নেয় এবং ওই ফাংশনের সোর্স কোড পরিবর্তন না করেই তার আগে বা পরে অতিরিক্ত কিছু কাজ বা লজিক যুক্ত করে। পাইথনে ডেকোরেটর কল করার জন্য ফাংশনের নামের উপরে `@decorator_name` ব্যবহার করা হয়। এটি লগিং, অথেনটিকেশন ইত্যাদি কাজে ব্যবহৃত হয়।
অধ্যায়-৭
অতি সংক্ষিপ্ত (১-২ লাইন)
try ও except exception এর উদাহরণ লিখ।
try: print(10 / 0)
except ZeroDivisionError: print("Cannot divide by zero")
এরর কতপ্রকার ও কী কী?
প্রোগ্রামিংয়ে এরর মূলত তিন প্রকার: Syntax Error (সিনট্যাক্স এরর), Logical Error (লজিক্যাল এরর) এবং Runtime Error (রানটাইম এরর বা এক্সেপশন)।
Bug কী?
সফটওয়্যার বা প্রোগ্রামের সোর্স কোডে থাকা কোনো ভুল বা ত্রুটিকে বাগ (Bug) বলা হয়, যার কারণে প্রোগ্রাম অপ্রত্যাশিত ফলাফল দেয় বা ক্র্যাশ করে।
বিল্ট-ইন এক্সসেপশন কী?
পাইথনে আগে থেকে তৈরি করে রাখা এক্সেপশন ক্লাসগুলোকে বিল্ট-ইন এক্সেপশন বলে (যেমন: IndexError, KeyError, TypeError ইত্যাদি)।
সংক্ষিপ্ত (৪-৮ লাইন)
পাইথন-এর রেইসিং এক্সসেপশন সংক্ষেপে লেখ।
মাঝেমধ্যে প্রোগ্রামার তার নিজের প্রয়োজনে প্রোগ্রামে ইচ্ছাকৃতভাবে এক্সেপশন তৈরি করতে চান। পাইথনে `raise` কিওয়ার্ড ব্যবহার করে ম্যানুয়ালি এক্সেপশন থ্রো করা যায়। একেই Raising Exception বলা হয়। এটি মূলত ইউজার ইনপুট ভ্যালিডেশনের জন্য ব্যবহৃত হয় (যেমন: ইউজারের বয়স ০ এর নিচে হলে ValueError রেইজ করা)।
পাইথন এক্সসেপশন্স বলতে কি বুঝায়? / error handling কী?
প্রোগ্রাম চলার সময় বা রানটাইমে যদি অপ্রত্যাশিত কোনো ত্রুটি (যেমন: শূন্য দিয়ে ভাগ করা, ফাইলের অস্তিত্ব না থাকা) ঘটে, তখন প্রোগ্রাম হঠাৎ করে বন্ধ হয়ে যায়, একে এক্সেপশন বলে। এই এক্সেপশনগুলোকে try এবং except ব্লক ব্যবহার করে সুচারুরূপে নিয়ন্ত্রণ করার পদ্ধতিকেই এরর হ্যান্ডলিং (Error Handling) বা এক্সেপশন হ্যান্ডলিং বলা হয়।
Try ও Except ব্যবহার করে একটি পাইথন প্রোগ্রাম লেখ।
try:
num = int(input("Enter a number: "))
result = 100 / num
print(result)
except ZeroDivisionError:
print("Error: You cannot divide by zero.")
except ValueError:
print("Error: Invalid input. Enter a number.")
রচনামূলক (১০-২০ লাইন)
Raising exception ব্যবহারপূর্বক Python-এ একটি প্রোগ্রাম লেখ। / পাইথন এক্সসেপশন এর রেইস বর্ণনা কর।
পাইথনে `raise` কিওয়ার্ডের মাধ্যমে প্রোগ্রামার নিজের শর্ত অনুযায়ী কাস্টম এক্সেপশন তৈরি করতে বা রেইস করতে পারে। যখন প্রোগ্রামের কোনো নির্দিষ্ট লজিক বা কন্ডিশন ভায়োলেট হয়, তখন ইউজারকে সঠিক মেসেজ দেওয়ার জন্য `raise` ব্যবহার করা অত্যন্ত কার্যকরী। নিচে এর একটি প্রোগ্রাম দেওয়া হলো:
def check_age(age):
if age < 0:
raise ValueError("Age cannot be a negative number")
elif age < 18:
print("You are a minor")
else:
print("You are an adult")
try:
user_age = -5
check_age(user_age)
except ValueError as e:
print("An exception occurred:", e)
উপরের প্রোগ্রামে `check_age` ফাংশনে একটি কন্ডিশন দেওয়া হয়েছে যে, বয়স ০ এর ছোট হলে একটি `ValueError` রেইজ হবে। try ব্লকের ভেতরে আমরা বয়স -5 দিয়ে ফাংশনটি কল করেছি। ফলে কন্ডিশন সত্য হয়ে `raise` কিওয়ার্ডটি কাজ করেছে এবং প্রোগ্রাম ক্র্যাশ না করে except ব্লকে গিয়ে এরর মেসেজ প্রিন্ট করেছে।
অধ্যায়-৮
অতি সংক্ষিপ্ত (১-২ লাইন)
পাইথন লগিং কি?
লগিং হলো প্রোগ্রামের এক্সিকিউশন চলাকালীন সময়ে প্রোগ্রামের বিভিন্ন অবস্থা, ইনফরমেশন বা এরর মেসেজ কোনো ফাইল বা কনসোলে রেকর্ড করে রাখার পদ্ধতি।
লগিং-এর পরিস্থিতিগুলো কি কি?
লগিংয়ের পরিস্থিতিগুলো হলো: ডিবাগিং করা, সাধারণ তথ্য রেকর্ড করা, ওয়ার্নিং বা সতর্কতা দেওয়া এবং ক্রিটিক্যাল এরর ট্র্যাক করা।
লগিং-এর লেভেলগুলোর নাম লিখ।
পাইথনে লগিংয়ের ৫টি লেভেল রয়েছে: DEBUG, INFO, WARNING, ERROR, এবং CRITICAL।
সংক্ষিপ্ত (৪-৮ লাইন)
লগিং এর বিভিন্ন লেভেলগুলো উল্লেখ কর।
লগিং লেভেলগুলো মূলত মেসেজের গুরুত্ব বোঝায়। এগুলো ক্রমানুসারে হলো:
১. DEBUG (10): সাধারণ ডিবাগিংয়ের তথ্য।
২. INFO (20): প্রোগ্রাম ঠিকমতো চলছে এমন তথ্য।
৩. WARNING (30): ভবিষ্যতে সমস্যা হতে পারে এমন সতর্কতা।
৪. ERROR (40): কোনো একটি নির্দিষ্ট কাজ সম্পন্ন না হওয়ার ত্রুটি।
৫. CRITICAL (50): অত্যন্ত মারাত্মক ত্রুটি, যার কারণে প্রোগ্রাম বন্ধ হয়ে যেতে পারে।
পাইথন লগিং বলতে কি বুঝায় সংক্ষেপে লেখ।
পাইথনে `logging` নামের একটি বিল্ট-ইন মডিউল আছে, যার সাহায্যে ডেভেলপাররা প্রোগ্রামের বিভিন্ন ইভেন্ট বা ত্রুটির রেকর্ড রাখতে পারেন। একটি বড় সফটওয়্যার তৈরি করার পর যখন সেটি ইউজাররা ব্যবহার করে, তখন সফটওয়্যারে কোনো ক্র্যাশ হলে ইউজার বুঝতে পারে না। কিন্তু লগিং করা থাকলে ডেভেলপার লগ ফাইল দেখে বুঝতে পারে কখন, কোথায় এবং কেন ক্র্যাশ হয়েছিল, যা ডিবাগিংকে অনেক সহজ করে দেয়।
রচনামূলক (১০-২০ লাইন)
লগিং এর আউটপুট ফরমেটিং এবং কনফিগারেশন বর্ণনা কর।
পাইথনের `logging` মডিউল ব্যবহার করে খুব সহজেই লগের আউটপুট কনফিগার এবং ফরমেট করা যায়। `logging.basicConfig()` ফাংশন ব্যবহার করে লগ ফাইল তৈরি, লগ লেভেল সেট করা এবং লগের মেসেজ কী ফরম্যাটে দেখাবে তা নির্ধারণ করা যায়।
লগ কনফিগারেশন এবং ফরমেটিংয়ের একটি উদাহরণ:
import logging
logging.basicConfig(
filename="app_log.txt",
level=logging.INFO,
format="%(asctime)s - %(levelname)s - %(message)s"
)
logging.info("This is an info message")
logging.warning("Memory is getting low")
logging.error("Failed to connect to database")
ব্যাখ্যা: `basicConfig`-এর ভেতরে `filename` দিয়ে নির্ধারণ করা হয়েছে যে লগ মেসেজগুলো কনসোলের বদলে "app_log.txt" নামের ফাইলে সেভ হবে। `level=logging.INFO` দেওয়ার অর্থ হলো INFO এবং তার উপরের লেভেলের (WARNING, ERROR) মেসেজগুলো রেকর্ড হবে। `format` অংশে `%(asctime)s` দিয়ে তারিখ ও সময়, `%(levelname)s` দিয়ে লগের ধরন এবং `%(message)s` দিয়ে মূল মেসেজটি প্রিন্ট করার কাঠামো তৈরি করা হয়েছে। এটি একটি স্ট্যান্ডার্ড আউটপুট ফরমেটিং।
অধ্যায়-৯
অতি সংক্ষিপ্ত (১-২ লাইন)
ইউনিট টেস্টিং এর প্রয়োজনীয়তা কী?
প্রোগ্রামের প্রতিটি ছোট ছোট অংশ বা ইউনিট (যেমন: একটি ফাংশন) সঠিকভাবে কাজ করছে কিনা তা নিশ্চিত করার জন্যই ইউনিট টেস্টিং প্রয়োজন।
ইউনিট টেস্টিং কি?
ইউনিট টেস্টিং হলো সফটওয়্যার টেস্টিংয়ের এমন একটি পদ্ধতি, যেখানে ডেভেলপার প্রোগ্রামের একটি নির্দিষ্ট বা ক্ষুদ্রতম অংশের (Unit) জন্য টেস্ট কোড লিখে তা পরীক্ষা করেন।
পাইথন মডিউল গুলোর নাম লেখ। (টেস্টিং সম্পর্কিত)
পাইথনে টেস্টিংয়ের জন্য ব্যবহৃত জনপ্রিয় মডিউলগুলো হলো: unittest, pytest, এবং nose।
সংক্ষিপ্ত (৪-৮ লাইন)
পাইথনে Unit Testing এর গুরুত্ব সংক্ষেপে লেখ।
প্রাথমিক পর্যায়েই কোডের বাগ বা ত্রুটি খুঁজে বের করতে সাহায্য করে, ফলে পরে বড় সমস্যা হয় না।
কোড রিফ্যাক্টরিং বা পরিবর্তন করার সময় নতুন কোনো বাগ তৈরি হলো কিনা তা দ্রুত চেক করা যায়।
এটি সফটওয়্যারের গুণমান এবং নির্ভরযোগ্যতা বৃদ্ধি করে।
টেস্ট কোডগুলো এক ধরণের ডকুমেন্টেশন হিসেবেও কাজ করে।
রচনামূলক (১০-২০ লাইন)
Unit Testing এর Structure বা গুরুত্ব বর্ণনা কর।
পাইথনে ইউনিট টেস্টিং করার জন্য মূলত বিল্ট-ইন `unittest` মডিউল ব্যবহার করা হয়। ইউনিট টেস্টিংয়ের স্ট্রাকচারটি মূলত অবজেক্ট ওরিয়েন্টেড কনসেপ্টের ওপর ভিত্তি করে তৈরি। টেস্টিং স্ট্রাকচারের প্রধান ধাপগুলো নিচে দেওয়া হলো:
১. প্রথমে `unittest` মডিউল ইমপোর্ট করতে হয়।
২. এরপর `unittest.TestCase` কে ইনহেরিট করে একটি টেস্টিং ক্লাস তৈরি করতে হয়।
৩. এই ক্লাসের ভেতরে বিভিন্ন টেস্ট মেথড লেখা হয়। প্রতিটি টেস্ট মেথডের নাম অবশ্যই `test_` দিয়ে শুরু হতে হবে, নতুবা মডিউল সেগুলোকে টেস্ট হিসেবে কাউন্ট করবে পুনঃরায়।
৪. টেস্ট করার জন্য `assertEqual`, `assertTrue`, `assertFalse` ইত্যাদি অ্যাসারশন মেথড ব্যবহার করা হয়।
৫. সবশেষে `unittest.main()` কল করে টেস্ট রান করা হয়।
import unittest
def add(a, b):
return a + b
class TestMathOperations(unittest.TestCase):
def test_add(self):
self.assertEqual(add(10, 5), 15)
if __name__ == '__main__':
unittest.main()
ইউনিট টেস্টিংয়ের গুরুত্ব হলো এটি প্রোজেক্ট রিলিজ হওয়ার আগেই ডেভলপমেন্ট পর্যায়ে লজিক্যাল ভুলগুলো ধরিয়ে দেয়, যা পরবর্তীতে বিপুল অর্থ ও সময় বাঁচায়।
অধ্যায়-১০
অতি সংক্ষিপ্ত (১-২ লাইন)
পাইথন রেগুলার এক্সপ্রেশন কি?
রেগুলার এক্সপ্রেশন (RegEx) হলো এমন একটি প্যাটার্ন ম্যাচিং টেকনিক, যা দিয়ে কোনো টেক্সট বা স্ট্রিংয়ের ভেতর থেকে নির্দিষ্ট কোনো শব্দ বা ক্যারেক্টার খুঁজে বের করা যায়।
মেটাক্যারেক্টার কি?
যে ক্যারেক্টারগুলো রেগুলার এক্সপ্রেশনে সাধারণ টেক্সট হিসেবে কাজ না করে বিশেষ কোনো প্যাটার্ন (যেমন: ^ স্ট্রিংয়ের শুরু বোঝায়) নির্দেশ করে, তাদের মেটাক্যারেক্টার বলে।
সংক্ষিপ্ত (৪-৮ লাইন)
পাইথন রেগুলার এক্সপ্রেশন কী? সংক্ষেপে লেখ।
রেগুলার এক্সপ্রেশন (RegEx) হলো ক্যারেক্টারের একটি সিকোয়েন্স, যা একটি সার্চ প্যাটার্ন তৈরি করে। পাইথনে রেগুলার এক্সপ্রেশন ব্যবহার করার জন্য re নামের একটি বিল্ট-ইন মডিউল রয়েছে। ইমেইল ভ্যালিডেশন, ফোন নম্বর চেক করা, বা বিশাল কোনো টেক্সট ফাইল থেকে নির্দিষ্ট ফরম্যাটের ডেটা (যেমন শুধু সংখ্যা) দ্রুত ফিল্টার করার কাজে এটি ব্যাপকভাবে ব্যবহৃত হয়।
পাইথন রেগুলার এক্সপ্রেশন এর বিল্ট ইন মেথড তালিকা তৈরি কর।
re মডিউলে অনেকগুলো বিল্ট-ইন মেথড আছে। এর মধ্যে প্রধান মেথডগুলো হলো:
re.match()
re.search()
re.findall()
re.finditer()
re.sub()
re.split()
ReEx Module methods-এ option flag লেখ।
RegEx মেথডে কিছু অপশনাল ফ্ল্যাগ ব্যবহার করা যায় যা প্যাটার্ন ম্যাচিংয়ের আচরণ পরিবর্তন করে। যেমন:
re.IGNORECASE (বা re.I): এটি কেইস সেন্সিটিভিটি (বড় হাতের/ছোট হাতের অক্ষর) ইগনোর করে।
re.MULTILINE (বা re.M): এটি মাল্টিলাইন স্ট্রিংয়ের প্রতিটি লাইনে প্যাটার্ন চেক করতে দেয়।
রচনামূলক (১০-২০ লাইন)
উদাহরণসহ পাইথন রেগুলার এক্সপ্রেশন এর বিল্ট-ইন মেথডগুলো বর্ণনা কর।
পাইথনের re মডিউলের কয়েকটি গুরুত্বপূর্ণ বিল্ট-ইন মেথডের বর্ণনা নিচে দেওয়া হলো:
১. re.search(): এটি পুরো স্ট্রিংয়ের মধ্যে প্যাটার্নটি প্রথম যেখানে মিলবে তার একটি ম্যাচ অবজেক্ট রিটার্ন করে। না মিললে None রিটার্ন করে।
২. re.findall(): স্ট্রিংয়ের ভেতরে প্যাটার্নের সাথে মিলে যাওয়া সবগুলোর একটি লিস্ট তৈরি করে রিটার্ন করে।
৩. re.sub(): এটি স্ট্রিংয়ের মধ্যে মিলে যাওয়া নির্দিষ্ট প্যাটার্ন বা শব্দকে রিপ্লেস বা প্রতিস্থাপন করে নতুন শব্দ বসাতে ব্যবহৃত হয়।
৪. re.split(): প্যাটার্নের ওপর ভিত্তি করে স্ট্রিংটিকে ভেঙে একটি লিস্টে পরিণত করে।
import re
text = "Python is fast. Python is easy."
search_res = re.search(r"fast", text)
print(search_res.group())
all_res = re.findall(r"Python", text)
print(all_res)
new_text = re.sub(r"Python", "Java", text)
print(new_text)
RegEx ব্যবহার করে নিম্নোক্ত string হতে number গুলোকে extract করার জন্য প্রোগ্রাম লেখ।
String = "hello 23, hi 77, lovely 18 and sweet 16"
import re
string = "hello 23, hi 77, lovely 18 and sweet 16"
numbers = re.findall(r'\d+', string)
print(numbers)
ব্যাখ্যা: এখানে re.findall() মেথডটি ব্যবহার করা হয়েছে যা পুরো স্ট্রিং থেকে সব ম্যাচ খুঁজে বের করে। \d মেটাক্যারেক্টারটি যেকোনো সংখ্যা (০-৯) বোঝায় এবং + এর মানে হলো এক বা একাধিক সংখ্যা একসাথে থাকা। ফলে প্রোগ্রামটি স্ট্রিং থেকে ২৩, ৭৭, ১৮ এবং ১৬ এক্সট্রাক্ট করে একটি লিস্ট হিসেবে প্রিন্ট করবে।
অধ্যায়-১১
অতি সংক্ষিপ্ত (১-২ লাইন)
অ্যাপ্লিকেশন সফটওয়্যার বলতে কি বুঝ?
অ্যাপ্লিকেশন সফটওয়্যার হলো সেই ধরনের সফটওয়্যার যা সরাসরি ব্যবহারকারীর কোনো নির্দিষ্ট কাজ (যেমন: টাইপ করা, গান শোনা, হিসাব রাখা) করার জন্য তৈরি করা হয়।
সংক্ষিপ্ত (৪-৮ লাইন)
Application Software এর প্রকারভেদ গুলো লেখ।
অ্যাপ্লিকেশন সফটওয়্যার মূলত দুই ভাগে ভাগ করা যায়:
জেনারেল পারপাস সফটওয়্যার: যা সবার সাধারণ ব্যবহারের জন্য তৈরি (যেমন: MS Word, Google Chrome)।
কাস্টমাইজড সফটওয়্যার: যা কোনো নির্দিষ্ট প্রতিষ্ঠান বা ব্যক্তির চাহিদামতো বিশেষভাবে তৈরি (যেমন: কোনো ব্যাংকের নিজস্ব সফটওয়্যার, ইনভেন্টরি ম্যানেজমেন্ট সিস্টেম)।
Application Software এর বৈশিষ্ট বা features গুলো লেখ।
এটি ব্যবহারকারী বান্ধব (User Friendly) হয়ে থাকে।
সিস্টেম সফটওয়্যার ছাড়া (যেমন: ওএস) এটি চলতে পারে না।
নির্দিষ্ট কোনো কাজ সমাধানে এটি ব্যবহৃত হয়।
এগুলোর সাইজ সাধারণত বড় হয় এবং কম্পিউটারের অনেক স্টোরেজ দখল করে।
রচনামূলক (১০-২০ লাইন)
Application Software এর কার্যাবলি ও বৈশিষ্ট্য বর্ণনা কর।
অ্যাপ্লিকেশন সফটওয়্যার হলো ইউজার-এন্ড প্রোগ্রাম। এর কার্যাবলি ও বৈশিষ্ট্যগুলো নিচে বিস্তারিত আলোচনা করা হলো:
বৈশিষ্ট্য:
১. ইউজার ইন্টারফেস: অ্যাপ্লিকেশন সফটওয়্যারগুলোতে একটি গ্রাফিক্যাল ইউজার ইন্টারফেস (GUI) থাকে, যার ফলে সাধারণ মানুষ কোডিং জ্ঞান ছাড়াই সহজে এটি ব্যবহার করতে পারে।
২. নির্ভরশীলতা: এটি হার্ডওয়্যারের সাথে সরাসরি যোগাযোগ করতে পারে চকাজে। এটি কাজ করার জন্য অপারেটিং সিস্টেমের উপর নির্ভর করে।
৩. সুনির্দিষ্ট লক্ষ্য: প্রতিটি অ্যাপ্লিকেশন সফটওয়্যার একটি নির্দিষ্ট কাজের জন্য তৈরি হয়। ভিডিও প্লেয়ার দিয়ে শুধু ভিডিও দেখা যায়, ওয়ার্ড প্রসেসর দিয়ে শুধু লেখালেখি করা যায়।
কার্যাবলি:
১. অফিসের কাজ: ডকুমেন্ট তৈরি, স্প্রেডশিটে হিসাবনিকাশ এবং প্রেজেন্টেশন স্লাইড তৈরি করার মতো প্রাত্যহিক কাজ সম্পন্ন করে।
২. বিনোদন ও মাল্টিমিডিয়া: গেম খেলা, অডিও বা ভিডিও চালানো, ছবি এডিট করা ইত্যাদি কাজে ব্যবহৃত হয়।
৩. যোগাযোগ: ইমেইল আদান-প্রদান, ওয়েব ব্রাউজিং, মেসেজিং এবং ভিডিও কনফারেন্সিং এর কাজগুলো অ্যাপ্লিকেশন সফটওয়্যারের মাধ্যমেই হয়ে থাকে।
সংক্ষেপে, ব্যবহারকারীর দৈনন্দিন কাজগুলোকে সহজ ও ডিজিটাল করার প্রধান হাতিয়ারই হলো অ্যাপ্লিকেশন সফটওয়্যার।
উদাহরণঃ input(), eval(), math.sqrt() ইত্যাদি হলো লাইব্রেরি বা বিল্ট-ইন ফাংশন। | উদাহরণঃ def sumation(a,b): |