সজিপ্র : সহজ ভাষায় পাইথন ৩

‘সহজ ভাষায় পাইথন ৩’ বইটি নিয়ে প্রায়শই কিছু মধুর প্রশ্নের সম্মুখীন হই। দিন দিন (আমার প্রতি) মানুষের ভালবাসা যেভাবে বাড়ছে, প্রশ্নও সমানুপাতিক হারেই বাড়ছে। আসলে যে কারোর মনেই এরকম প্রশ্ন আসা বেশ স্বাভাবিক। কিন্তু একই প্রশ্নের উত্তর বারবার দিতে কেমন জানি লাগে আমার। নিজেকে হোয়াইল লুপের অধিবাসী মনে হয়। তাই ভাবলাম, এসব মধুর প্রশ্নের সুমধুর উত্তরগুলো সজিপ্র (সচরাচর জিজ্ঞাসিত প্রশ্ন) সেকশনে লিখে রাখা যাক। (১) প্রশ্ন: সি নাকি পাইথন? কোনটি দিয়ে শুরু করব?

পুরো পোস্ট পড়ুন

ইতিমধ্যে আমরা সিঙ্গলি লিংকড লিস্ট ও সার্কুলার লিংকড লিস্ট সম্পর্কে অল্প-বিস্তর ধারণা লাভ করার চেষ্টা করেছি। তারই ধারাবাহিকতায় এখন ডাবলি লিংকড লিস্ট সম্পর্কে জানব। সিঙ্গলি লিংকড লিস্টের মত ডাবলি লিংকড লিস্টও কতগুলো নোডের চেইন বা সমাহার। কিন্তু পার্থক্য হল নোডের ফিল্ড সংখ্যায়। সিঙ্গলি লিংকড লিস্টে প্রতিটি নোডে দুটি ফিল্ড থাকে। কিন্তু ডাবলি লিংকড লিস্টে প্রতিটি নোডে তিনটি ফিল্ড থাকে। প্রথম ফিল্ডে থাকে প্রিভিয়াস (previous) পয়েন্টার বা পূর্ববর্তী নোডের লিংক (রেফারেন্স), মাঝের ফিল্ডে থাকে ডাটা আইটেম আর শেষের ফিল্ডে থাকে নেক্সট পয়েন্টার বা পরবর্তী নোডের লিংক (রেফারেন্স)। যেহেতু প্রতিটি নোডে দুটি করে পয়েন্টার থাকে, তাই এই নোড চেইনেরও দুটি প্রান্ত থাকে। দুই প্রান্তেই নোড চেইনের পরিসমাপ্তিকে মূলত নাল (Null) রেফারেন্স দ্বারা চিহ্নিত করা হয়। অনেক সময় None দিয়েও পরিসমাপ্তি বুঝানো হয়। পরিসমাপ্তি দ্বারা বুঝানো হচ্ছে যে, এই নোডের পরে আর কোন নোড নেই।

পুরো পোস্ট পড়ুন

সিঙ্গলি লিংকড লিস্ট সম্পর্কে পরিষ্কার ধারণা থাকলে সার্কুলার লিংকড লিস্ট বুঝতে পারাটা একেবারে পানির মত সহজ। তবে ভুলে গেলেও কোন সমস্যা নেই। আমরা এমনিতেই ফ্লাশব্যাকে যাব। সিঙ্গলি লিংকড লিস্ট হল কতগুলো নোডের চেইন বা সমাহার। প্রতিটি নোডে দুটি ফিল্ড থাকে। প্রথম ফিল্ডে থাকে ডাটা আইটেম আর শেষের ফিল্ডে থাকে পয়েন্টার বা পরবর্তী নোডের লিংক বা রেফারেন্স। নোড চেইনের পরিসমাপ্তিকে মূলত নাল (Null) রেফারেন্স দ্বারা চিহ্নিত করা হয়। অনেক সময় None দিয়ে পরিসমাপ্তি বুঝানো হয়। পরিসমাপ্তি দ্বারা বুঝানো হচ্ছে যে এই নোডের পরে আর কোন নোড নেই।

পুরো পোস্ট পড়ুন

ইতিমধ্যে আমরা স্ট্যাক (Stack) ও কিউ (Queue) সম্পর্কে জেনেছি। এগুলো হল লিনিয়ার ডাটা স্ট্রাকচার ও একমুখো সাপ। একমুখো সাপ বললাম কারণ, স্টাক ও কিউতে আইটেম একটিমাত্র প্রান্তে ঢুকতে পারে ও একটিমাত্র প্রান্ত থেকে বের হতে পারে। আরেকটু পরিষ্কার করে বললে, স্ট্যাকের ক্ষেত্রে যে প্রান্তে আইটেম ঢুকবে সেই প্রান্ত দিয়েই বের হবে আর কিউয়ের ক্ষেত্রে ঢুকবে এক প্রান্ত দিয়ে কিন্তু বের হবে অন্য প্রান্ত দিয়ে। লক্ষণীয় বিষয় হল, দুই ক্ষেত্রেই ঢোকার বা বের হবার রাস্তা কেবলমাত্র একটি। কিন্তু ডেক (Deque) হল একটি দুমুখো সাপ। এর দুই মুখেই আইটেম ঢুকতে পারে অথবা দুই মুখ থেকেই আইটেম বের হতে পারে।

পুরো পোস্ট পড়ুন

স্ট্যাকের (Stack) মতই আরেকটি লিনিয়ার (Linear) ডাটা স্ট্রাকচার হল কিউ (Queue)। লিনিয়ার ডাটা স্ট্রাকচার বলতে বুঝায় যেখানে আইটেমগুলো ধারাবাহিকভাবে রয়েছে, যেমন: স্ট্যাক, কিউ, লিংকড (Linked) লিস্ট। বাংলায় কিউকে আমরা সারি বলতে পারি। তবে বুঝানোর সুবিধার্থে আমরা কিউ বলেই আপাতত চালিয়ে নেব। কিউ হল কতগুলো আইটেমের এমন এক ধারাবাহিক সংগ্রহশালা (কালেকশন - collection) যেখানে নতুন আইটেমের সংযোজন (এনকিউ – enqueue) সংগ্রহশালার এক প্রান্তে আর পুরনো আইটেমের অপসারণ (ডিকিউ - dequeue) ঠিক তার বিপরীত প্রান্তে হয়। বোঝার সুবিধার্থে, যে প্রান্তে নতুন আইটেমের সংযোজন হয় সে প্রান্তকে আমরা পিছনের অংশ বা রিয়ার (rear) অথবা টেইল (tail - লেজ) বলতে পারি। আর যে প্রান্তে পুরনো আইটেমের অপসারণ হয় সে প্রান্তকে আমরা সামনের অংশ বা ফ্রন্ট (front) অথবা হেড (head - মাথা) বলতে পারি। বেশ গোলমেলে ব্যাপার-স্যাপার, তাই না?

পুরো পোস্ট পড়ুন

ডাটা স্ট্রাকচার নিয়ে কথা বলতে গেলে স্ট্যাক নিয়ে কথা একেবারে না বললেই নয়। শব্দটা আমি প্রথম শুনেছিলাম আমার এক বন্ধুর কাছ থেকে। ঘটনাটা বেশ মজার। কোন এক বোরিং ক্লাসে বসে ছিলাম। ভাবলাম সামনের বন্ধুটাকে কলম দিয়ে খুঁচিয়ে কিছুটা বিনোদন পাওয়া যেতে পারে। তো যেই ভাবা সেই কাজ। সাধের ম্যাটাডোর অরবিট কলমটাকে সামনের দিকে বাগিয়ে বন্ধুর পশ্চাৎদেশে জোরসে একটা গুঁতো মারলাম। কিন্তু সে আমার গুঁতোতে তেমন একটা রেসপন্স করল না। আমি ভাবলাম রেসপন্স না করার দুটো কারণ হতে পারে। এক, ও ক্লাসের সবচেয়ে মনোযোগী ছাত্র আর দুই, ওর শরীরে গন্ডারের জিন রয়েছে। পরীক্ষা-নিরীক্ষা চালিয়ে আরো নিশ্চিত হবার জন্য আগের চেয়ে খানিক জোরসে আবার একটা গুঁতো মারলাম। এবার ব্যাটা গন্ডারের বংশধর ভয়ানক রেসপন্স করল। পিছন ফিরে চোখ রাঙিয়ে আমাকে হুমকি দিল –

পুরো পোস্ট পড়ুন

গত ০৬ মার্চ, ২০১৭ তে প্রোগ্রামিং প্রবলেম (Programming Problem in Bengali) গ্রুপে Ami Alavola ভাইয়ের একটা জনগুরুত্বপূর্ণ পোস্ট দেখতে পাই। সেখানে তিনি জাতির উদ্দেশ্যে একটা কঠিন প্রশ্ন করে বসেন - “বিগিনারদের কি পাইথন দিয়ে প্রোগ্রামিং শেখানো উচিত?” প্রশ্নটা দেখে চিন্তা করতে লাগলাম কি উত্তর দেয়া যায়! ব্যাপক ভাবনা-চিন্তা শেষে কমেন্টে উত্তর দিতে শুরুও করেছিলাম। তারপর ভাবলাম, এরচেয়ে বরং একটা সুদীর্ঘ ব্লগপোস্ট লিখে ফেলা যাক। আমি অবশ্যই আমার নিজের কথা বলব। তবে তার আগে আবু আশরাফ মাসনুন ভাই ও অনিরুদ্ধ অধিকারী‘র কোটেশন তুলে ধরব।

পুরো পোস্ট পড়ুন

Author's picture

মাকসুদুর রহমান মাটিন

ডেভঅপস ইঞ্জিনিয়ার | এসআরই

গ্রামীণ টেলিকম ট্রাস্ট

বাংলাদেশ