বেসিক অ্যাপ্লিকেশন ডেভেলপমেন্ট ইউজিং পাইথন
অধ্যায়-১
অতি সংক্ষিপ্ত
১। ফাংশন বলতে কি বুঝায়?
উত্তরঃ ফাংশন হলো প্রোগ্রামের একটি নির্দিষ্ট ব্লক বা কোডের অংশ, যা একটি নির্দিষ্ট কাজ সম্পাদন করার জন্য তৈরি করা হয় এবং প্রয়োজনে বারবার ব্যবহার করা যায়।
২। লোকাল ও গ্লোবাল ভেরিয়েবেল বলতে কি বুঝায়?
উত্তরঃ লোকাল ভেরিয়েবলঃ যে সকল ভেরিয়েবল ফাংশনের ভেতরে ডিক্লেয়ার করা হয় সেই সকল ভেরিয়েবলকে লোকাল ভেরিয়েবল বলা হয়।
গ্লোবাল ভেরিয়েবলঃ যে সকল ভেরিয়েবল ফাংশনের বাইরে বা মূল প্রোগ্রামে ডিক্লেয়ার করা হয় তাকে গ্লোবাল ভেরিয়েবল বলে।
৩। 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' কিওয়ার্ড দিয়ে প্রথমে ডিফাইন করতে হয় এবং পরে কল করতে হয়। |
উদাহরণঃ input(), eval(), math.sqrt() ইত্যাদি হলো লাইব্রেরি বা বিল্ট-ইন ফাংশন। | উদাহরণঃ def sumation(a,b): |
অধ্যায়-২
অতি সংক্ষিপ্ত
১। 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()
print(content)
file.close()
রচনামূলক
১। একটি 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")
file.close()
print("Data stored successfully.")
এই প্রোগ্রামে প্রথমে '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) এর মাধ্যমে তৈরি ও পরিচালনা করা হয়।
সংক্ষিপ্ত
১। 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()
obj.display()
ইনহেরিটেন্সের প্রকারভেদগুলোর মধ্যে সিঙ্গেল, মাল্টিপল, মাল্টিলেভেল এবং হায়ারার্কিক্যাল ইনহেরিটেন্স উল্লেখযোগ্য।
রচনামূলক
১। ক্লাস ব্যবহার করে পাইথন প্রোগ্রাম তৈরি কর। / উদাহরণ সহ ক্লাস এবং অবজেক্ট বর্ণনা কর।
উত্তরঃ
ক্লাস: ক্লাস হলো অবজেক্টের একটি যৌক্তিক গঠন বা ব্লু-প্রিন্ট। ক্লাসের বাস্তব কোনো অস্তিত্ব নেই, এটি কেবল মেমোরিতে একটি লজিক্যাল কাঠামো তৈরি করে।
অবজেক্ট: অবজেক্ট হলো ক্লাসের বাস্তব রূপ বা ইনস্ট্যান্স। একটি ক্লাসের অধীনে অসংখ্য অবজেক্ট তৈরি করা যায়। প্রতিটি অবজেক্ট মেমোরিতে জায়গা দখল করে।
নিচে ক্লাস এবং অবজেক্ট ব্যবহার করে একটি পাইথন প্রোগ্রাম দেওয়া হলো:
class Student:
def __init__(self, name, roll):
self.name = name
self.roll = roll
def display_info(self):
print("Name:", self.name)
print("Roll:", self.roll)
student1 = Student("Rahim", 101)
student2 = Student("Karim", 102)
student1.display_info()
student2.display_info()
ব্যাখ্যা: উপরের প্রোগ্রামে Student নামের একটি ক্লাস তৈরি করা হয়েছে। __init__ হলো কনস্ট্রাক্টর যা অবজেক্ট তৈরির সময় কল হয়। display_info হলো একটি মেথড। student1 এবং student2 হলো Student ক্লাসের দুটি আলাদা অবজেক্ট। যখনই আমরা অবজেক্ট তৈরি করে মেথড কল করছি, তখন সেই অবজেক্টের ডাটা প্রিন্ট হচ্ছে। এভাবেই পাইথনে ক্লাস এবং অবজেক্ট কাজ করে।
অধ্যায়-৫
অতি সংক্ষিপ্ত
১। ইনহেরিট্যান্স বলতে কি বোঝায়?
উত্তরঃ একটি ক্লাসের বৈশিষ্ট্য (Attribute) ও মেথড অন্য একটি ক্লাস কর্তৃক গ্রহণ ও ব্যবহার করার প্রক্রিয়াকে ইনহেরিটেন্স (Inheritance) বলে।
২। পলিমরফিজম বলতে কি বুঝ?
উত্তরঃ পলিমরফিজম মানে হলো 'বহুরূপতা'। একই নামের মেথড বা ফাংশন যখন ভিন্ন ভিন্ন ক্লাসে ভিন্ন ভিন্ন কাজ সম্পাদন করে, তখন তাকে পলিমরফিজম বলে।
৩। OOP ল্যাংগুয়েজ বলতে কি বোঝায়?
উত্তরঃ যেসব প্রোগ্রামিং ভাষা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের বৈশিষ্ট্যগুলো (যেমন: ক্লাস, অবজেক্ট, ইনহেরিট্যান্স) সাপোর্ট করে, তাদের OOP (Object Oriented Programming) ল্যাংগুয়েজ বলে (যেমন: Python, Java, C++)।
৪। অবজেক্ট কি?
উত্তরঃ অবজেক্ট হলো ক্লাসের একটি ইনস্ট্যান্স বা বাস্তব রূপ, যার নির্দিষ্ট প্রোপার্টি এবং মেথড থাকে।
৫। ক্লাস কি?
উত্তরঃ ক্লাস হলো অবজেক্ট তৈরি করার একটি টেমপ্লেট বা ব্লু-প্রিন্ট, যার ভেতরে অবজেক্টের বিভিন্ন প্রোপার্টি (ভেরিয়েবল) এবং মেথড (ফাংশন) ডিফাইন করা থাকে।
সংক্ষিপ্ত
১। "OOP-এর 4-piller" এর গুরুত্ব লিখ।
উত্তরঃ OOP-এর চারটি পিলার হলো Encapsulation, Abstraction, Inheritance, এবং Polymorphism। এগুলোর গুরুত্ব অপরিসীম:
২। অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং-এর চার পিলার / বৈশিষ্ট্য সম্পর্কে লিখ।
উত্তরঃ OOP-এর প্রধান চারটি পিলার হলো— Encapsulation, Inheritance, Abstraction এবং Polymorphism।
রচনামূলক
১। প্রোগ্রামসহ পলিমরফিজম পদ্ধতি বর্ণনা কর।
উত্তরঃ পলিমরফিজম (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()` নামের মেথডটি তিনটি ক্লাসেই আছে, কিন্তু প্রতিটি ক্লাসে এটি আলাদা আউটপুট দিচ্ছে। এটাই পলিমরফিজমের বহুরূপতা।
২। ইনহেরিট্যান্স কী? বিস্তারিত বর্ণনা কর।
উত্তরঃ একটি ক্লাসের বৈশিষ্ট্য ও মেথড অন্য একটি ক্লাসে গ্রহণ ও ব্যবহার করার প্রক্রিয়াকে Inheritance বলে। যে ক্লাস থেকে বৈশিষ্ট্য নেওয়া হয় তাকে বলা হয় প্যারেন্ট ক্লাস বা সুপার ক্লাস (Super Class)। আর যে নতুন ক্লাসটি বৈশিষ্ট্য গ্রহণ করে তাকে বলা হয় চাইল্ড ক্লাস বা সাবক্লাস (Subclass)। এর প্রধান সুবিধা হলো কোডের পুনর্ব্যবহারযোগ্যতা বা Code Reusability।
class Parent:
pass
class Child(Parent):
pass
Parent = Parent ClassChild = Child Class(Parent) = Parent Class থেকে Inherit করার নির্দেশclass Animal:
def eat(self):
print("Animal is Eating")
class Dog(Animal):
pass
d = Dog()
d.eat()
Output:
Animal is Eating
এখানে Dog Class, Animal Class থেকে Inherit করেছে। তাই Dog Class-এর Object d দিয়ে eat() Method ব্যবহার করা যাচ্ছে।
১. Single Inheritance: একটি Child Class একটি Parent Class থেকে বৈশিষ্ট্য গ্রহণ করলে তাকে Single Inheritance বলে।
class Father:
pass
class Son(Father):
pass
এখানে Son শুধুমাত্র Father Class থেকে Inherit করেছে।
২. Multiple Inheritance: একটি Child Class একাধিক Parent Class থেকে বৈশিষ্ট্য গ্রহণ করলে তাকে Multiple Inheritance বলে।
class Father:
pass
class Mother:
pass
class Child(Father, Mother):
pass
এখানে Child Class, Father এবং Mother—দুটি Parent Class থেকে Inherit করেছে।
৩. Multilevel Inheritance: একটি Class অন্য একটি Class থেকে এবং সেই Class আবার অন্য একটি Class থেকে বৈশিষ্ট্য গ্রহণ করলে তাকে Multilevel Inheritance বলে।
class GrandFather:
pass
class Father(GrandFather):
pass
class Son(Father):
pass
এখানে Son → Father থেকে এবং Father → GrandFather থেকে Inherit করেছে।
৪. Hierarchical Inheritance: একটি Parent Class থেকে একাধিক Child Class তৈরি হলে তাকে Hierarchical Inheritance বলে।
class Parent:
pass
class Child1(Parent):
pass
class Child2(Parent):
pass
এখানে Child1 এবং Child2 উভয়েই Parent Class থেকে Inherit করেছে।
৩। প্রোগ্রামসহ এনক্যাপসুলেশন পদ্ধতি বর্ণনা কর।
উত্তরঃ Encapsulation হলো Data (Variable) এবং Method-কে একটি Class-এর মধ্যে আবদ্ধ রাখা এবং প্রয়োজন অনুসারে Data-এর Access নিয়ন্ত্রণ করার প্রক্রিয়া। এটি OOP-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা Data Security নিশ্চিত করতে সাহায্য করে। Encapsulation-এ Variable এবং Method-কে Class-এর ভিতরে রাখা হয়। Access Modifier ব্যবহার করে নির্ধারণ করা হয় কোন Data বাইরে থেকে Access করা যাবে এবং কোন Data সরাসরি Access করা যাবে না। পাইথনে তিন ধরনের Access Modifier আছে। এগুলো হলো- Public, Private & Protected.
১। Data Security বৃদ্ধি করে।
২। Data-কে অনাকাঙ্ক্ষিত পরিবর্তন থেকে রক্ষা করে।
৩। Program-এর Maintainability বৃদ্ধি করে।
৪। Controlled Access নিশ্চিত করে।
class Student:
def __init__(self):
self.name = "Rahim"
ব্যাখ্যা: এখানে Student হলো Class-এর নাম, __init__() হলো Constructor এবং self.name হলো Instance Variable।
class Student:
def __init__(self):
self.name = "Rahim"
s = Student()
print(s.name)
Output:
Rahimব্যাখ্যা: এখানে name Variable-টি Student Class-এর মধ্যে তৈরি করা হয়েছে এবং Object-এর মাধ্যমে বাইরে থেকে Access করা হয়েছে।
Python-এ Class-এর Variable ও Method-কে বাইরে থেকে Access করা যাবে কি না, তা নির্ধারণ করার পদ্ধতিকে Access Modifier বলে। Python-এ Variable ও Method-এর Access Level নির্ধারণের জন্য তিন ধরনের Access Modifier ব্যবহার করা হয়। যথা:
সংজ্ঞা: Public Member-কে Class-এর ভিতরে ও বাইরে উভয় স্থান থেকেই Access করা যায়।
Syntax: name
প্রোগ্রাম:
class Student:
def __init__(self):
self.name = "Rahim"
s = Student()
print(s.name)
Output:
Rahimব্যাখ্যা: name একটি Public Variable। তাই Class-এর বাইরে থেকেও এটি Access করা যায়।
সংজ্ঞা: Protected Member সাধারণত Class এবং Child Class-এর মধ্যে ব্যবহারের জন্য নির্ধারিত থাকে।
Syntax: _name
প্রোগ্রাম:
class Person:
def __init__(self):
self._name = "Rahim"
class Student(Person):
def show(self):
print(self._name)
s = Student()
s.show()
Output:
Rahimব্যাখ্যা: _name একটি Protected Member। এটি Child Class থেকে Access করা হয়েছে। Python-এ এটি একটি Convention বা প্রচলিত নিয়ম।
সংজ্ঞা: Private Member সাধারণত Class-এর অভ্যন্তরে ব্যবহারের জন্য নির্ধারণ করা হয়। এটি Class-এর বাইরে থেকে সরাসরি একই নামে Access করা যায় না।
Syntax: __name
প্রোগ্রাম:
class Student:
def __init__(self):
self.__name = "Rahim"
def show(self):
print(self.__name)
s = Student()
s.show()
Output:
Rahimব্যাখ্যা: __name একটি Private Variable। এখানে show() Method-এর মাধ্যমে Class-এর ভিতর থেকে Variable-টি Access করা হয়েছে।
Class-এর বাইরে থেকে Access করার চেষ্টা:
class Student:
def __init__(self):
self.__name = "Rahim"
s = Student()
print(s.__name)
Output:
AttributeErrorব্যাখ্যা: Private Variable-কে সরাসরি Class-এর বাইরে থেকে Access করার চেষ্টা করলে AttributeError দেখা যায়।
৪। Abstraction কী? উদাহরণ দাও। বা, অ্যাবস্ট্রাকশন কী? সংক্ষেপে লিখ।
উত্তরঃ Abstraction হলো OOP-এর একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যেখানে কোনো বস্তুর প্রয়োজনীয় তথ্য বা বৈশিষ্ট্য ব্যবহারকারীর সামনে দেখানো হয় এবং অপ্রয়োজনীয় অভ্যন্তরীণ কাজগুলো গোপন রাখা হয়।
from abc import ABC, abstractmethod
class ClassName(ABC):
@abstractmethod
def method_name(self):
pass
সিনট্যাক্সের ব্যাখ্যা:
১। ABC হলো Abstract Base Class তৈরির জন্য ব্যবহৃত Class।
২। abstractmethod দ্বারা Abstract Method নির্ধারণ করা হয়।
৩। pass একটি ফাঁকা Statement, যা Method-এর Body পরে নির্ধারণ করা হবে বোঝায়।
উদাহরণ:
আমরা যখন একটি গাড়ি চালাই, তখন শুধু স্টিয়ারিং, ব্রেক ও অ্যাক্সিলারেটর ব্যবহার করি। গাড়ির ইঞ্জিনের ভিতরে কীভাবে কাজ হচ্ছে, তা আমাদের জানতে হয় না। এটিই Abstraction-এর উদাহরণ।
from abc import ABC, abstractmethod
class Car(ABC):
@abstractmethod
def start(self):
pass
class Toyota(Car):
def start(self):
print("Car started")
car = Toyota()
car.start()
এখানে Car ক্লাসে start() কীভাবে কাজ করবে তা বিস্তারিত বলা হয়নি। শুধু কী কাজ করতে হবে তা নির্ধারণ করা হয়েছে। Toyota ক্লাসে start() মেথডটি কীভাবে কাজ করবে তা নির্ধারণ করা হয়েছে। অর্থাৎ, গাড়ি কীভাবে ভিতরে স্টার্ট হচ্ছে তা গোপন রেখে শুধু গাড়ি স্টার্ট করার কাজটি ব্যবহারকারীর সামনে দেখানো হয়েছে। এটিই Abstraction।
অধ্যায়-৬
অতি সংক্ষিপ্ত
১। yeild স্টেটমেন্ট কি? কেন ব্যবহার করা হয়?
উত্তরঃ yield একটি কিওয়ার্ড যা রিটার্নের মতো কাজ করে, তবে এটি ফাংশনকে শেষ না করে তার স্টেট বা অবস্থা ধরে রাখে। জেনারেটর ফাংশন তৈরিতে এটি ব্যবহৃত হয়।
২। Meta character কী?
উত্তরঃ রেগুলার এক্সপ্রেশনে (RegEx) যে ক্যারেক্টারগুলোর বিশেষ অর্থ বা কাজ থাকে (যেমন: . * + ? ^ $), তাদেরকে মেটা ক্যারেক্টার বলে।
৩। Iterator বলতে কি বুঝায়?
উত্তরঃ Python-এ Iterator হলো এমন একটি অবজেক্ট, যার সাহায্যে কোনো Collection-এর উপাদানগুলো একটির পর একটি Access করা যায়।
৪। ডেকোরেটর বলতে কি বুঝায়?
উত্তরঃ ডেকোরেটর হলো এমন একটি ফাংশন যা অন্য একটি ফাংশনকে আর্গুমেন্ট হিসেবে নেয় এবং মূল ফাংশনের কোড পরিবর্তন না করে তার কার্যক্ষমতা বৃদ্ধি করে।
৫। জেনারেটর কি?
উত্তরঃ Python-এ Generator হলো এক ধরনের Function, যা yield Keyword ব্যবহার করে একবারে একটি করে Value প্রদান করে।
৬। জেনারেটর ঘোষণার সিন্ট্যাক্স লিখ।
উত্তরঃ সাধারণ ফাংশনের মতোই `def` দিয়ে শুরু হয়, কিন্তু মান ফেরত দেওয়ার জন্য `return` এর বদলে `yield` কিওয়ার্ড ব্যবহার করা হয়।
def generator_name():
yield value
সংক্ষিপ্ত
১। জেনারেটরের প্রয়োজনীয়তা কী?
উত্তরঃ Python-এ Generator হলো এক ধরনের Function, যা yield Keyword ব্যবহার করে একবারে একটি করে Value প্রদান করে।
জেনারেটরের প্রয়োজনীয়তা নিচে দেওয়া হলো:
২। ইটারেটর-এর প্রসিডিউর কার্যনীতি সংক্ষেপে লিখ।
উত্তরঃ Python-এ Iterator হলো এমন একটি অবজেক্ট, যার সাহায্যে কোনো Collection-এর উপাদানগুলো একটির পর একটি Access করা যায়।
ইটারেটরের কার্যনীতি নিচে দেওয়া হলো:
১। প্রথমে iter() ফাংশনের সাহায্যে কোনো Iterable থেকে Iterator তৈরি করা হয়।
২। next() ফাংশনের সাহায্যে Iterator থেকে একবারে একটি করে উপাদান নেওয়া হয়।
৩। প্রতিবার next() কল করলে পরবর্তী উপাদান পাওয়া যায়।
৪। সব উপাদান শেষ হয়ে গেলে StopIteration Exception তৈরি হয়।
উদাহরণ:
numbers = [10, 20, 30]
it = iter(numbers)
print(next(it))
print(next(it))
print(next(it))
Output:
10
20
30
৩। ডেকোরেটর ব্যবহার করে প্রোগ্রাম লিখ।
উত্তরঃ Decorator ব্যবহার করে Python প্রোগ্রাম:
def decorator(func):
def show():
print("Hello")
func()
return show
def display():
print("Python")
display = decorator(display)
display()
Output:
Hello
Python
ব্যাখ্যা:
১। decorator() একটি Decorator Function।
২। display = decorator(display) লাইনের মাধ্যমে display() ফাংশনকে Decorate করা হয়েছে।
৩। display() কল করলে প্রথমে Hello এবং পরে Python প্রিন্ট হয়।
রচনামূলক
১। জেনারেটর ব্যবহার করে 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: Python-এ Iterator হলো এমন একটি Object, যার সাহায্যে কোনো Collection-এর উপাদানগুলো একটির পর একটি Access করা যায়।
কার্যপ্রণালি:
১। iter() ফাংশনের সাহায্যে Iterator তৈরি করা হয়।
২। next() ফাংশনের সাহায্যে একটির পর একটি উপাদান পাওয়া যায়।
৩। সব উপাদান শেষ হয়ে গেলে StopIteration Exception তৈরি হয়।
সিনট্যাক্স:
iterator = iter(collection)
next(iterator)
উদাহরণ:
numbers = [10, 20, 30]
it = iter(numbers)
print(next(it))
print(next(it))
print(next(it))
Output:
10
20
30
ব্যাখ্যা: এখানে iter() দিয়ে List থেকে Iterator তৈরি করা হয়েছে। next() দিয়ে একটির পর একটি উপাদান প্রিন্ট করা হয়েছে।
Iterator-এর প্রয়োজনীয়তা:
১। Collection-এর উপাদান একটির পর একটি Access করা যায়।
২। বড় Data ধাপে ধাপে প্রক্রিয়াকরণ করা যায়।
৩। for Loop-এর মাধ্যমে সহজে Data Access করা যায়।
২। Generator: Python-এ Generator হলো এক ধরনের Function, যা yield Keyword ব্যবহার করে একবারে একটি করে Value প্রদান করে।
কার্যপ্রণালি:
১। def Keyword ব্যবহার করে Generator Function তৈরি করা হয়।
২। yield Keyword-এর সাহায্যে Value প্রদান করা হয়।
৩। প্রতিবার Value প্রদান করার পর Function-এর অবস্থা সংরক্ষিত থাকে।
৪। পরবর্তী সময়ে আবার চালু হলে পরবর্তী Value প্রদান করে।
সিনট্যাক্স:
def generator_name():
yield value
উদাহরণ:
def numbers():
yield 10
yield 20
yield 30
for n in numbers():
print(n)
Output:
10
20
30
ব্যাখ্যা: এখানে yield Keyword-এর সাহায্যে একবারে একটি করে Value প্রদান করা হয়েছে। for Loop প্রতিটি Value প্রিন্ট করেছে।
Generator-এর প্রয়োজনীয়তা:
১। মেমোরি সাশ্রয় করে।
২। একবারে একটি করে Value প্রদান করে।
৩। বড় Data প্রক্রিয়াকরণে সাহায্য করে।
৪। প্রয়োজন অনুযায়ী Value তৈরি করে।
৩। Decorator: Python-এ Decorator হলো এমন একটি Function, যার সাহায্যে মূল Function-এর কোড পরিবর্তন না করে তার কার্যকারিতায় নতুন বৈশিষ্ট্য যোগ করা যায়।
কার্যপ্রণালি:
১। প্রথমে একটি Function তৈরি করা হয়।
২। Decorator Function মূল Function-কে Argument হিসেবে গ্রহণ করে।
৩। মূল Function-এর আগে বা পরে অতিরিক্ত কাজ করা হয়।
৪। Decorator ব্যবহার করে মূল Function-কে নতুনভাবে Call করা হয়।
সিনট্যাক্স:
def decorator(func):
def show():
func()
return show
উদাহরণ:
def decorator(func):
def show():
print("Hello")
func()
return show
def display():
print("Python")
display = decorator(display)
display()
Output:
Hello
Python
ব্যাখ্যা: এখানে decorator() Function-টি display() Function-কে Argument হিসেবে গ্রহণ করেছে। display = decorator(display) লাইনের মাধ্যমে Function-টিকে Decorate করা হয়েছে। ফলে display() Call করলে প্রথমে Hello এবং পরে Python প্রিন্ট হয়।
Decorator-এর প্রয়োজনীয়তা:
১। মূল কোড পরিবর্তন না করে নতুন বৈশিষ্ট্য যোগ করা যায়।
২। একই কাজ একাধিক Function-এ ব্যবহার করা যায়।
৩। কোড পুনরায় ব্যবহার করা সহজ হয়।
৪। Function-এর আগে বা পরে অতিরিক্ত কাজ সম্পাদন করা যায়।
অধ্যায়-৭
অতি সংক্ষিপ্ত
১। try ও except exception এর উদাহরণ লিখ।
উত্তরঃ 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 এর গুরুত্বঃ
রচনামূলক
১। 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 মডিউলে অনেকগুলো বিল্ট-ইন মেথড আছে। এর মধ্যে প্রধান মেথডগুলো হলো:
৩। ReEx Module methods-এ option flag লেখ।
উত্তরঃ RegEx মেথডে কিছু অপশনাল ফ্ল্যাগ ব্যবহার করা যায় যা প্যাটার্ন ম্যাচিংয়ের আচরণ পরিবর্তন করে। যেমন:
রচনামূলক
১। উদাহরণসহ পাইথন রেগুলার এক্সপ্রেশন এর বিল্ট-ইন মেথডগুলো বর্ণনা কর।
উত্তরঃ পাইথনের 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 এর প্রকারভেদ গুলো লেখ।
উত্তরঃ অ্যাপ্লিকেশন সফটওয়্যার মূলত দুই ভাগে ভাগ করা যায়:
২। Application Software এর বৈশিষ্ট বা features গুলো লেখ।
উত্তরঃ
রচনামূলক
১। Application Software এর কার্যাবলি ও বৈশিষ্ট্য বর্ণনা কর।
উত্তরঃ অ্যাপ্লিকেশন সফটওয়্যার হলো ইউজার-এন্ড প্রোগ্রাম। এর কার্যাবলি ও বৈশিষ্ট্যগুলো নিচে বিস্তারিত আলোচনা করা হলো:
বৈশিষ্ট্য:
১. ইউজার ইন্টারফেস: অ্যাপ্লিকেশন সফটওয়্যারগুলোতে একটি গ্রাফিক্যাল ইউজার ইন্টারফেস (GUI) থাকে, যার ফলে সাধারণ মানুষ কোডিং জ্ঞান ছাড়াই সহজে এটি ব্যবহার করতে পারে।
২. নির্ভরশীলতা: এটি হার্ডওয়্যারের সাথে সরাসরি যোগাযোগ করতে পারে চকাজে। এটি কাজ করার জন্য অপারেটিং সিস্টেমের উপর নির্ভর করে।
৩. সুনির্দিষ্ট লক্ষ্য: প্রতিটি অ্যাপ্লিকেশন সফটওয়্যার একটি নির্দিষ্ট কাজের জন্য তৈরি হয়। ভিডিও প্লেয়ার দিয়ে শুধু ভিডিও দেখা যায়, ওয়ার্ড প্রসেসর দিয়ে শুধু লেখালেখি করা যায়।
কার্যাবলি:
১. অফিসের কাজ: ডকুমেন্ট তৈরি, স্প্রেডশিটে হিসাবনিকাশ এবং প্রেজেন্টেশন স্লাইড তৈরি করার মতো প্রাত্যহিক কাজ সম্পন্ন করে।
২. বিনোদন ও মাল্টিমিডিয়া: গেম খেলা, অডিও বা ভিডিও চালানো, ছবি এডিট করা ইত্যাদি কাজে ব্যবহৃত হয়।
৩. যোগাযোগ: ইমেইল আদান-প্রদান, ওয়েব ব্রাউজিং, মেসেজিং এবং ভিডিও কনফারেন্সিং এর কাজগুলো অ্যাপ্লিকেশন সফটওয়্যারের মাধ্যমেই হয়ে থাকে।
সংক্ষেপে, ব্যবহারকারীর দৈনন্দিন কাজগুলোকে সহজ ও ডিজিটাল করার প্রধান হাতিয়ারই হলো অ্যাপ্লিকেশন সফটওয়্যার।
গুরুত্বপূর্ণ প্রোগ্রামসমূহঃ
ফাংশন ব্যবহার করে প্রোগ্রাম
১। ফাংশনের সাহায্যে দ্বিঘাত সমীকরণের প্রোগ্রাম
def quadratic(a, b, c):
D = b**2 - 4ac
if D > 0:
x1 = (-b + D**0.5) / (2*a)
x2 = (-b - D**0.5) / (2*a)
print("Two different roots:", x1, "and", x2)
elif D == 0:
x = -b / (2*a)
print("Two equal roots:", x)
else:
print("No real roots")
a = float(input("Enter a: "))
b = float(input("Enter b: "))
c = float(input("Enter c: "))
quadratic(a, b, c)
২। ত্রিভুজের ক্ষেত্রফল নির্ণয়ের প্রোগ্রাম
def triangle_area(b, h):
area = 0.5 * b * h
print("Area of triangle:", area)
b = float(input("Enter base: "))
h = float(input("Enter height: "))
triangle_area(b, h)
৩। শর্ত সাপেক্ষে ত্রিভুজের ক্ষেত্রফল নির্ণয়ের প্রোগ্রাম
def triangle_area(b, h):
if b > 0 and h > 0:
area = 0.5 * b * h
print("Area of triangle:", area)
else:
print("Invalid input")
b = float(input("Enter base: "))
h = float(input("Enter height: "))
triangle_area(b, h)
৪। ফ্যাক্টরিয়াল নির্ণয়ের প্রোগ্রাম
def factorial(n):
fact = 1
for i in range(1, n + 1):
fact = fact * i
print("Factorial:", fact)
n = int(input("Enter a number: "))
if n >= 0:
factorial(n)
else:
print("Invalid input")
৫।
def quadratic(a, b, c):
D = b**2 - 4ac
if D > 0:
x1 = (-b + D**0.5) / (2*a)
x2 = (-b - D**0.5) / (2*a)
print("Two different roots:", x1, "and", x2)
elif D == 0:
x = -b / (2*a)
print("Two equal roots:", x)
else:
print("No real roots")
a = float(input("Enter a: "))
b = float(input("Enter b: "))
c = float(input("Enter c: "))
quadratic(a, b, c)
২।