Category Archives: Python

C এর সাথে Python প্রোগ্রামিং এক্সটেনশন (Python Extension Programming with C)

C এর সাথে Python প্রোগ্রামিং এক্সটেনশন

C, C++ অথবা Java প্রোগ্রামিং এর যেকোন কোড Python script এর সাথে ইন্টেগ্রেট/ রূপান্তর করা যায়, যাকে Python এক্সটেনশন বলে। Python এক্সটেনশন ফাইলগুলো স্বাভাবিক C লাইব্রেরীর মত, Unix অপারেটিং সিস্টেম এ .so ফরম্যাট ও Windows মেশিনে.dll ফরম্যাটের হয়।

 

এক্সটেনশন লেখার পূর্বশর্ত

Python এক্সটেনশন লিখতে হলে Python হেডার ফাইল এর দরকার পড়ে Unix মেশিনে এসব ক্ষেত্রে python2.5-dev নামক একটি প্যাকেজ ইনস্টল করার দরকার হয়। Windows মেশিনে অবশ্য এই হেডার ফাইল গুলো বাইনারি Python ইনস্টলার প্যাকেজের সাথেই থাকে।

প্রথম দিকে Python extension মোডিউল তৈরি করতে হলে কোডটিতে চার ধরনের ফাইল সাজাতে হবে। যেমন,

  • হেডার ফাইলh.
  • C ফাংশন functions (যেগুলো মোডিউল এর ইন্টারফেস হিসেবে ব্যবহৃত হবে)।
  • ফাংশনের একটি টেবিল (Python developer দের জন্য দরকার)
  • একটি ইনিশিয়ালাইজেশন ফাংশন

 

হেডার ফাইল Python.h

Python API এ ঢোকার জন্য Python.h হেডার ফাইলটিকে C সোর্স ফাইল এর অন্তর্গত করে Python ইন্টারপ্রেটার এর সাথে এক্সটেনশন মোডিউল ইন্টেগ্রেট করতে হবে। C ফাংশনগুলো নিচের তিন রকমের হতে পারে।


static PyObject *MyFunction( PyObject *self, PyObject *args );

static PyObject *MyFunctionWithKeywords(PyObject *self,
                                 PyObject *args,
                                 PyObject *kw);

static PyObject *MyFunctionWithNoArgs( PyObject *self );

 

প্রতিটি স্টেটমেন্টই ফলাফল হিসেবে একটি Python object দিবে। Python এ C এর মত কোন ভয়েড ফাংশন নেই। ভয়েড এর ক্ষেত্রে, Python এর Nonevalue’র সমতুল্য C value পাওয়া যাবে। Python headers গুলো এই কাজ করার জন্য Py_RETURN_NONE নামের ম্যাক্রো ফাইল ঠিক করে।

এ ধরনের Python এক্সটেনশনে ব্যবহৃত C ফাংশন গুলোকে স্ট্যাটিক (স্থিতিশীল) ফাংশন বলে, কারন এক্সটেনশন মোডিউলের বাইরে এদের কোন ব্যবহার নেই। Python মোডিউল ও Python ফাংশন গুলোর নাম একত্রিত করে C ফাংশনের নামগুলো ঠিক করা হয়। নিচের উদাহরণটিক লক্ষ্য করি,


static PyObject *module_func(PyObject *self, PyObject *args) {
/* Do your stuff here. */
Py_RETURN_NONE;
}


 

এই Python ফাংশনটির নাম func,  এবং এটি module নামক মোডিউল এর ভেতর অবস্থিত।

 

Method Mapping Table (মেথড ম্যাপিং টেবিল)

মেথড টেবিল হচ্ছে নিচের PyMethodDef স্ট্রাকচারের একটি সাধারণ বিন্যাস (array)।

struct PyMethodDef {   char *ml_name;   PyCFunction ml_meth;   int ml_flags;   char *ml_doc;};

নিচে এই স্ট্রাকচারের সদস্য গুলোর বর্ননা দেয়া হলঃ

  • ml_name:Python ইন্টারপ্রেটার প্রোগ্রামে ব্যবহৃত হবার সময় যেই নাম ব্যবহার করে।
  • ml_meth:ফাংশনের লোকেশন।
  • ml_flags:এটা ইন্টারপ্রেটারকে ধারণা দেয় যে, ml_meth কোন সংকেতটি ব্যবহার করছে (METH_VARARGS, METH_KEYWORDS কিংবা METH_NOARGS)
  • ml_doc: ফাংশনের docstring, প্রোগ্রামার কোন কিছু না লেখলে এটা বাদ যাবে।

উপযুক্ত মেম্বারগুলোর জন্য, এই টেবিলটি একটি শূন্য মানের সেন্টিনেল (sentinel) এর সাহায্যে বাতিল করতে হবে। উদাহরন হিসেবে, উপরের ফাংশনের জন্য, নিচের মেথড ম্যাপিং টেবিলটি সম্ভবঃ


static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

 

ইনিশিয়ালাইজেশন ফাংশনঃ

এক্সটেনশন মোডিউলের সর্বশেষ অংশ হচ্ছে ইনিশিয়ালাইজেশন ফাংশন। মোডিউল লোড হবার পড়ে Python ইন্টারপ্রেটার এই ফাংশনটি ব্যবহার করে। এই ফাংশনের নামকরন initModule আকারের হয় (Module হচ্ছে মোডিউলটির নাম)।।

আপনি যেই লাইব্রেরী তৈরি করবেন সেটা থেকেই ইনিশিয়ালাইজেশন ফাংশন এক্সপোর্ট করা হবে। Python হেডার ফাইল গুলো PyMODINIT_FUNC ফাংশনের সাহায্যে কম্পাইলেশনের সময় বিভিন্ন পরিস্থিতি অনুযায়ী এই এক্সপোর্টটি করে থাকে। সেক্ষেত্রে আপনাকে এটি ফাংশন সংজ্ঞায়িত করার সময় ব্যবহার করতে হবে। C ইনিশিয়াল ফাংশন সাধারণত নিচের কাঠামো অনুযায়ী হয়ঃ


PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}

 

এখানে, Py_InitModule3 ফাংশনের ৩টি মেম্বার হচ্ছে−

  • func: যে ফাংশনটি এক্সপোর্ট করা হবে।
  • module_methods:ম্যাপিং টেবিলের নাম।
  • docstring: এক্সটেনশনে ব্যবহৃত কমেন্ট।

যেমন,


#include <Python.h>

static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Do your stuff here. */
   Py_RETURN_NONE;
}

static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { NULL, NULL, 0, NULL }
};

PyMODINIT_FUNC initModule() {
   Py_InitModule3(func, module_methods, "docstring...");
}

 

নিচের উদাহরণটি উপরের কনসেপ্ট গুলোর আরেকটি প্রয়োগঃ


#include <Python.h>

static PyObject* helloworld(PyObject* self)
{
    return Py_BuildValue("s", "Hello, Python extensions!!");
}

static char helloworld_docs[] =
    "helloworld( ): Any message you want to put here!!\n";

static PyMethodDef helloworld_funcs[] = {
    {"helloworld", (PyCFunction)helloworld, 
     METH_NOARGS, helloworld_docs},
    {NULL}
};

void inithelloworld(void)
{
    Py_InitModule3("helloworld", helloworld_funcs,
                   "Extension module example!");
}

 

এখানে Py_BuildValue ফাংশনটি Python এর মান (value) তৈরি করে। উপরের কোডটি hello.c ফাইল এ সেভ করুন. এখন আমরা দেখবো কিভাবে Python script এর এই মোডিউলটিকে ইনস্টল ও কম্পাইল করা যায়।

 

এক্সটেনশন তৈরি ও ইন্সটল করাঃ

distutils প্যাকেজ এর সাহায্যে সহজেই Python এর অরিজিনাল মোডিউল ও এক্সটেনশন সঠিকভাবে বন্টন করা যায়। মোডিউল গুলো সোর্স আকারে ভাগ করা থাকে, এবং setup.py  এর সাহায্যে তৈরি ও ইন্সটল করা হয়। উপরের মোডিউলটির জন্য নিম্নোক্ত setup.py স্ক্রিপ্টটি তৈরি করতে হবে।


from distutils.core import setup, Extension
setup(name='helloworld', version='1.0',  \
      ext_modules=[Extension('helloworld', ['hello.c'])])

 

এখন নিচের কমান্ডটি প্রয়োগ করলে তা সঠিক কম্পাইলার, লিঙ্কার কমান্ড এবং ফ্ল্যাগ এর সাহায্যে প্রয়োজনীয় কম্পাইলেশন, সংযোজন করবে, ও সঠিক ডিরেক্টরিতে ফলাফলস্বরূপ ডাইনামিক লাইব্রেরী কপি করবে ।


$ python setup.py install

 

Unix সিস্টেমে আপনাকে রুট হিসেবে এই কমান্ডটি রান করাতে হবে যাতে করে সাইট-প্যাকেজ ডিরেক্টরি তে লেখার পারমিশন থাকে। Windows এর জন্য অবশ্য এটি কোন সমস্যা না।

 

Importing Extensions

একবার এক্সটেনশন ইন্সটল করা হলে, আপনি সেই এক্সটেনশন Python স্ক্রিপ্টে এভাবে ইম্পোর্ট করতে পারবেন।


#!/usr/bin/python
import helloworld

print helloworld.helloworld()

 

এই মডেলটি নিচের ফলাফল দিবে।


Hello, Python extensions!!

 

 

Passing Function Parameters

যেহেতু আপনি এমন ফাংশন চান যেটা আর্গুমেন্ট গ্রহণ করতে পারে, তাই নিচের যেকোনো C function ব্যবহার করতে পারেন। উদাহরণস্বরূপ, নিচের ফাংশনটি এমনভাবে সংজ্ঞায়িত করা যেতে পারে,


static PyObject *module_func(PyObject *self, PyObject *args) {
   /* Parse args and do something interesting here. */
   Py_RETURN_NONE;
}

 

নতুন ফাংশনের জায়গা সম্বলিত মেথড টেবিলটি এমন হবেঃ


static PyMethodDef module_methods[] = {
   { "func", (PyCFunction)module_func, METH_NOARGS, NULL },
   { "func", module_func, METH_VARARGS, NULL },
   { NULL, NULL, 0, NULL }
};

 

C ফাংশনের PyObject থেকে আর্গুমেন্ট এক্সট্রাক্ট করার জন্য API PyArg_ParseTuple ফাংশনটি ব্যবহার করতে পারেন। PyArg_ParseTuple এর প্রথম আর্গুমেন্টটি হচ্ছে args আর্গুমেন্ট। এই অবজেক্টটিকে আপনি parsing করবেন। দ্বিতীয় আর্গুমেন্টটি হবে এমন একটি ফরম্যাট স্ট্রিং যেটা আপনি যেভাবে আর্গুমেন্ট গুলো চান সেভাবে বর্ননা করবে। প্রতিটি আর্গুমেন্ট ফরম্যাট স্ট্রিং এর এক বা একাধিক ক্যারেক্টার দ্বারা প্রকাশিত।


static PyObject *module_func(PyObject *self, PyObject *args) {
   int i;
   double d;
   char *s;

   if (!PyArg_ParseTuple(args, "ids", &i, &d, &s)) {
      return NULL;
   }
   
   /* Do something interesting here. */
   Py_RETURN_NONE;
}

 

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


module.func(1, s="three", d=2.0)
module.func(i=1, d=2.0, s="three")
module.func(s="three", d=2.0, i=1)


এখানে আপনি আপনার প্রয়োজন মত আরও বৈচিত্র আনতে পারেন।

PyArg_ParseTuple  ফাংশন

PyArg_ParseTuple ফাংশনের স্ট্যান্ডার্ড সিগ্নেচার হচ্ছেঃ


int PyArg_ParseTuple(PyObject* tuple,char* format,...)

 

এই ফাংশনটি ভুল হলে ০ মান আসবে, আর সঠিক হলে শূন্য ছাড়া অন্য কোন মান আসবে। এখানে tuple হচ্ছে PyObject*, যা C ফাংশনের দ্বিতীয় আর্গুমেন্ট, এবং format হচ্ছে একটি C স্ট্রিং, যা আবশ্যিক (mandatory) ও ঐচ্ছিক (optional) আর্গুমেন্ট গুলো বর্ননা করে।

নিচে PyArg_ParseTuple ফাংশনের ফরম্যাট কোড গুলো দেয়া হলঃ

Code C type Meaning
c char A Python string of length 1 becomes a C char.
d double A Python float becomes a C double.
f float A Python float becomes a C float.
i int A Python int becomes a C int.
l long A Python int becomes a C long.
L long long A Python int becomes a C long long
O PyObject* Gets non-NULL borrowed reference to Python argument.
s char* Python string without embedded nulls to C char*.
s# char*+int Any Python string to C address and length.
t# char*+int Read-only single-segment buffer to C address and length.
u Py_UNICODE* Python Unicode without embedded nulls to C.
u# Py_UNICODE*+int Any Python Unicode C address and length.
w# char*+int Read/write single-segment buffer to C address and length.
z char* Like s, also accepts None (sets C char* to NULL).
z# char*+int Like s#, also accepts None (sets C char* to NULL).
(...) as per ... A Python sequence is treated as one argument per item.
| The following arguments are optional.
: Format end, followed by function name for error messages.
; Format end, followed by entire error message text.

Returning Values

Py_BuildValue অনেকটা PyArg_ParseTuple এর মত ফরম্যাট স্ট্রিং এ কাজ করে নতুন করে তৈরি মানের পরিবর্তে আসল মান দেয়। কিভাবে এড ফাংশন বাস্তবায়ন করতে হয় তার একটি উদাহরণ নিচে দেয়া হলঃ

static PyObject *foo_add(PyObject *self, PyObject *args) {   int a;   int b;    if (!PyArg_ParseTuple(args, "ii", &a, &b)) {     return NULL;   }   return Py_BuildValue("i", a + b);}

Python এ করলে নিচের মত হবেঃ

def add(a, b):   return (a + b)

আপনি Python এর লিস্ট এর সাহায্যে ফাংশনটি থেকে দুই ধরনের ফলাফল দেখাতে পারেন, যেমনঃ


static PyObject *foo_add(PyObject *self, PyObject *args) {
   int a;
   int b;

   if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
      return NULL;
   }
   return Py_BuildValue("i", a + b);
}

 

এই কোডটি Python এ করা হলে এরকম হবেঃ


def add(a, b):
   return (a + b)

 

Py_BuildValue ফাংশন

Py_BuildValue ফাংশনের স্ট্যান্ডার্ড সিগ্নেচার হচ্ছে −


PyObject* Py_BuildValue(char* format,...)

 

এখানে format একটি C স্ট্রিং যা কোন Python অবজেক্ট তৈরি হবে সেটার বর্ননা করে। নিচের Py_BuildValue আর্গুমেন্ট গুলো প্রকৃতপক্ষে C এর মান, যা থেকে প্রোগ্রামটির রেসাল্ট তৈরি হয়। PyObject* এর ফলাফল একটি নতুন ইন্টারফেস তৈরি করে। নিচের টেবিলে প্রচলিত কিছু কোড স্ট্রিং দেয়া হল, যার মধ্যে মাঝে মাঝে এক বা একাধিক কোড স্ট্রিং ফরম্যাট এ সংযুক্ত হয়।

Code C type Meaning
c char A C char becomes a Python string of length 1.
d double A C double becomes a Python float.
f float A C float becomes a Python float.
i int A C int becomes a Python int.
l long A C long becomes a Python int.
N PyObject* Passes a Python object and steals a reference.
O PyObject* Passes a Python object and INCREFs it as normal.
O& convert+void* Arbitrary conversion
s char* C 0-terminated char* to Python string, or NULL to None.
s# char*+int C char* and length to Python string, or NULL to None.
u Py_UNICODE* C-wide, null-terminated string to Python Unicode, or NULL to None.
u# Py_UNICODE*+int C-wide string and length to Python Unicode, or NULL to None.
w# char*+int Read/write single-segment buffer to C address and length.
z char* Like s, also accepts None (sets C char* to NULL).
z# char*+int Like s#, also accepts None (sets C char* to NULL).
(...) as per ... Builds Python tuple from C values.
[...] as per ... Builds Python list from C values.
{...} as per ... Builds Python dictionary from C values, alternating keys and values.

{...} কোডটি C এর জোড় সংখ্যক মানের জন্য ডিকশনারি তৈরি করে, যেমন Py_BuildValue("{issi}",23,"zig","zag",42) কোডটি Python এর মত এই ডিকশনারিটি তৈরি করেঃ {23:'zig','zag':42}.

পাইথন গ্রাফিক্যাল ইউজার ইন্টারফেস প্রোগ্রামিং (Tkinter) (Python GUI Programming (Tkinter))

Python GUI Programming (Tkinter)

গ্রাফিকাল ইউসার ইন্টারফেস (GUIs) ডেভেলাপ করার জন্য Python বেশ কিছু অপশন দিয়ে থাকে। এদের মধ্যে সবচেয়ে গুরুত্বপূর্ন হল Tkinter (Python এর সাথে সরবরাহকৃত GUI toolkit এর ইন্টারফেস), wxPython (ওপেন-সোর্স Python ইনটারফেস, http://wxpython.org এ পাওয়া যাবে), এবং JPython (Java’র জন্য প্রচলিত Python পোর্ট, http://www.jython.org এ পাওয়া যাবে)। এছাড়াও আরও অনেক ইন্টারফেস আছে, যেগুলো ইন্টারনেটে পাওয়া যাবে।

 

Tkinter Programming

Tkinter হচ্ছে Python এর জন্য আদর্শ GUI লাইব্রেরী, এর সাথে Python কে সংযুক্ত করলে দ্রুত ও সহজেই GUI অ্যাপ্লিকেশন তৈরি করা যায়। Tkinter এর জন্য Tk GUI toolkit একটি শক্তিশালী object-oriented ইন্টারফেস দেয়।

Tkinter দিয়ে GUI application তৈরি করার স্টেপ গুলো হচ্ছেঃ

  • Tkinter মোডিউল ইম্পোর্ট করতে হবে।
  • মেইন উইন্ডো তে GUI অ্যাপ্লিকেশন ক্রিয়েট করতে হবে।
  • উপরের এক বা একাধিক widgets GUI অ্যাপ্লিকেশনে যোগ করতে হবে।
  • ইউসার এর ট্রিগার করা প্রতিটি ইভেন্ট অনুযায়ী কাজ করার জন্য মেইন ইভেন্ট লুপে এন্টার করুন ।

 

উদাহরণঃ


#!/usr/bin/python

import Tkinter
top = Tkinter.Tk()
# Code to add widgets will go here...
top.mainloop()

 

এর ফলে নিচের উইন্ডোটি তৈরি হবে।

Tkinter Widgets

Tkinter, GUI application এ ব্যবহৃত বিভিন্ন ধরনের কন্ট্রোল দিয়ে থাকে, যেমন বাটন, লেবেল, টেক্সট বক্স ইত্যাদি। এই কন্ট্রোল গুলোকে Widgets বলে। বর্তমানে Tkinter এ মোট ১৫ ধরনের widgets আছে। নিচে এদের বর্ননা দেয়া হল।

 

অপারেটর বর্ণনা
Button আপনার অ্যাপ্লিকেশন এ বাটন প্রদর্শনের জন্য ব্যবহৃত হয়।
Canvas আপনার অ্যাপ্লিকেশন এ বিভিন্ন আকৃতি অঙ্কনের জন্য ব্যবহৃত হয়। যেমন - লাইন, ovals, বহুভুজ এবং আয়তক্ষেত্র ইত্যাদি।
Checkbutton checkboxe হিসেবে অপশন প্রদর্শনের জন্য ব্যবহৃত হয়। ইউজার একইসাথে একাধিক অপশন নির্বাচন করতে পারে।
Entry ব্যবহারকারীর কাছ থেকে মান গ্রহণ করার ক্ষেত্রে সকল উইজেট এর জন্য এক লাইনের টেক্সট ফিল্ড প্রদর্শনর জন্য ব্যবহৃত হয়।
Frame একটি ধারক উইজেট হিসেবে অন্যান্য উইজেট সজ্জিত করার জন্য ব্যবহৃত হয়।
Label অন্যান্য উইজেট এর জন্য এক লাইনের ক্যাপশন দেয়ার জন্য ব্যবহৃত হয়। এটি ইমেজও ধারণ করতে পারে।
Listbox ব্যবহারকারীদের জন্য একটি তালিকা দেখানোর জন্য ব্যবহৃত হয়।
Menubutton আপনার অ্যাপ্লিকেশন এ মেনু প্রদর্শনের জন্য ব্যবহৃত হয়।
Menu The Menu widget is used to provide various commands to a user. These commands are contained inside Menubutton.
Message ব্যবহারকারীর কাছ থেকে মান গ্রহণ করার জন্য একাধিক লাইনের টেক্সট ফিল্ড প্রদর্শনে ব্যবহৃত হয়।
Radiobutton রেডিও বাটন হিসেবে অপশন প্রদর্শনের জন্য ব্যবহৃত হয়। ইউজার একটিমাত্র অপশন নির্বাচন করতে পারে।
Scale স্লাইডার উইজেট প্রদানের জন্য ব্যবহৃত হয়।
Scrollbar স্ক্রলবার উইজেট যেমন তালিকা বাক্স এ বিভিন্ন উইজেট এর স্ক্রলিং সামর্থ্য যোগ করার জন্য ব্যবহার করা হয়
Text টেক্সট উইজেটের একাধিক লাইনে লেখা দেখাতে ব্যবহার করা হয়
Toplevel একটি পৃথক উইন্ডো ধারক প্রদান করতে ব্যবহৃত হয়
Spinbox Spinbox widget অন্যান্য সাধারণ ফাঁকা উইজেট থেকে ভিন্নতর। এটি নির্দিষ্ট সংখ্যক মান হতে  একটি নির্বাচন করতে ব্যবহৃত হয়।
PanedWindow এটি একটি ধারক উইজেট যা অনুভূমিকভাবে বা উল্লম্বভাবে সাজিয়ে যেকোন সংখ্যক ফলক (panes) ধারণ করতে পারে।
LabelFrame labelframe একটি সহজ ধারক উইজেট। এর প্রাথমিক উদ্দেশ্য হল জটিল উইন্ডো বিন্যাস এর জন্য একটি spacer বা ধারক হিসেবে কাজ করা।
tkMessageBox এই মডিউলের সাহায্যে আপনি আপনার অ্যাপ্লিকেশনে মেসেজ বাক্সে প্রদর্শন করতে ব্যবহৃত হয়।

 

স্ট্যান্ডার্ড এট্রিবিউট

নিচে কিছু সাইজ, কালার, ফন্ট সহ কিছু স্ট্যান্ডার্ড এট্রিবিউট এর স্পেসিফিকেশন দেয়া হলঃ

 

Geometry Management

সব Tkinter widgets ই বিশেষ কিছু geometry management মেথড অনুসরণ করতে পারে, যেগুলো parent widget area এর সাহায্যে widgets সাজাতে পারে। Tkinter নিচের geometry manager মেথডগুলো তৈরি করে।

  • Pack()Method - widgets গুলোকে parent widget এ রাখার আগে ব্লক আকারে সাজিয়ে নেয়।
  • Grid()Method – widgets গুলোকে টেবিল আকারে সাজায়।
  • Place()Method – widgets গুলোকে parent widget এর একটি নির্দিষ্ট স্থানে রাখে।

 

পাইথন প্রোগ্রামিং : তালিকা (Python Lists in Bangla)

1.11 Python Lists

Python এর সবচেয়ে বেসিক ডাটা স্ট্রাকচার হচ্ছে sequence. এর প্রতিটি উপাদান এর সাথে একটি নাম্বার assign করা থাকে, যা এর অবস্থান/ ইন্ডেক্স নির্দেশ করে। সর্ব প্রথম ইন্ডেক্স হচ্ছে ০, তারপরেরটা ১, তারপরেরটা ২... ইত্যাদি !

Python এ ৬ ধরনের built-in sequence আছে, তাদের মধ্যে সবচেয়ে প্রচলিত হচ্ছে lists আর tuples। sequence টাইপের সাহায্যে indexing, slicing, adding, multiplying, ও checking করা যায়। এছাড়াও Python এর বিল্ট-ইন ফাংশনের সাহায্যে যেকোনো sequence এর দৈর্ঘ্য হিসেব করা যায় যার সাহায্যে দীর্ঘতম ও ক্ষুদ্রতম প্রোসেস বের করা যায়।

 

Python Lists

List হচ্ছে Python এর সবচেয়ে বৈচিত্রপূর্ণ ডাটা টাইপ, যেটি থার্ড ব্র্যাকেট [ ] এর ভেতর কমার সাহায্যে উপাদান সহ প্রকাশ করা হয়। List এর উপাদানগুলো একরকম ডাটা টাইপ হবার প্রয়োজন নেই। যেমন,


list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5 ];
list3 = ["a", "b", "c", "d"];

 

স্ট্রিং এর মত, লিস্টের মান ০ থেকে শুরু হয়, এবং একে sliced, concatenated করা যায়।

 

Accessing Values in Lists

List এর মান print করতে [ ] ও ইনডেক্স নাম্বার (০, ১ ইত্যাদি) ব্যবহার করা হয়। যেমন,


#!/usr/bin/python

list1 = ['physics', 'chemistry', 1997, 2000];
list2 = [1, 2, 3, 4, 5, 6, 7 ];

print "list1[0]: ", list1[0]
print "list2[1:5]: ", list2[1:5]

 

উপরের প্রোগ্রামটির রেসাল্ট হবে,


list1[0]:  physics
list2[1:5]:  [2, 3, 4, 5]


 

Updating Lists

একটি list এর এক বা একাধিক উপাদান এর মান নিচের মত আপডেট করা যায়ঃ


#!/usr/bin/python

list = ['physics', 'chemistry', 1997, 2000];

print "Value available at index 2 : "
print list[2]
list[2] = 2001;
print "New value available at index 2 : "
print list[2]

 

এখানে list[2] মান দ্বিতীয় স্টেটমেন্ট এ আপডেট করা হয়েছে। উপরের কোডটি রান করালে নিচের ফলাফল আসবে।


Value available at index 2 :
1997
New value available at index 2 :
2001


 

Delete List Elements

del statement এর সাহায্যে একটি নির্দিষ্ট উপাদান ডিলেট করা যায়, remove() মেথডের সাহায্যে কোন অজানা উপাদান ডিলেট করা যায়, যেমনঃ


#!/usr/bin/python

list1 = ['physics', 'chemistry', 1997, 2000];

print list1
del list1[2];
print "After deleting value at index 2 : "
print list1

 

উপরের প্রোগ্রামটির রেসাল্ট হবে,


['physics', 'chemistry', 1997, 2000]
After deleting value at index 2 :
['physics', 'chemistry', 2000]

 

Basic List Operations

Python Expression Results Description
len([1, 2, 3]) 3 Length
[1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] Concatenation
['Hi!'] * 4 ['Hi!', 'Hi!', 'Hi!', 'Hi!'] Repetition
3 in [1, 2, 3] True Membership
for x in [1, 2, 3]: print x, 1 2 3 Iteration

 

Indexing, Slicing, and Matrixes

মনে করি,


L = ['spam', 'Spam', 'SPAM!']

 

 

Python Expression Results Description
L[2] 'SPAM!' Offsets start at zero
L[-2] 'Spam' Negative: count from the right
L[1:] ['Spam', 'SPAM!'] Slicing fetches sections

 

Built-in List Functions & Methods:

Python এ নিচের List Functions গুলো ব্যবহৃত হয়ঃ

SN Function with Description
1 cmp(list1, list2)
Compares elements of both lists.
2 len(list)
Gives the total length of the list.
3 max(list)
Returns item from the list with max value.
4 min(list)
Returns item from the list with min value.
5 list(seq)
Converts a tuple into list.

 

Python নিচের list methods গুলো ব্যবহার করে।

SN Methods with Description
1 list.append(obj)
Appends object obj to list
2 list.count(obj)
Returns count of how many times obj occurs in list
3 list.extend(seq)
Appends the contents of seq to list
4 list.index(obj)
Returns the lowest index in list that obj appears
5 list.insert(index, obj)
Inserts object obj into list at offset index
6 list.pop(obj=list[-1])
Removes and returns last object or obj from list
7 list.remove(obj)
Removes object obj from list
8 list.reverse()
Reverses objects of list in place
9 list.sort([func])
Sorts objects of list, use compare func if given

 

পাইথন প্রোগ্রামিং : স্ট্রিং (Python Strings in Bangla)

1.10 Python Strings

Accessing Values in Strings

নিচের কোডটি লক্ষ্য করি,


#!/usr/bin/python

var1 = 'Hello World!'
var2 = "Python Programming"

print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]

 

উপরের কোডটি রান করালে নিচের ফলাফল প্রিন্ট হবে।


var1[0]:  H
var2[1:5]:  ytho

 

Updating Strings

অন্য একটি স্ট্রিং এর সাথে কোন ভেরিয়েবল এসাইন করে একটি স্ট্রিং কে আপডেট করা যায়। যেমনঃ


#!/usr/bin/python

var1 = 'Hello World!'

print "Updated String :- ", var1[:6] + 'Python'

 

উপরের কোডটি রান করালে নিচের ফলাফল আসবে।


Updated String :- Hello Python

 

Escape Characters

নিচের টেবিলে কিছু Escape Characters দেয়া হল, যেগুলো কখনো প্রোগ্রাম রেসাল্টের প্রিন্টে আসে না। এধরনের Escape Characters ব্যবহার করতে কিছু Backslash notation ব্যবহৃত হয়।

 

Backslash
notation
Hexadecimal
character
Description
\a 0x07 Bell or alert
\b 0x08 Backspace
\cx Control-x
\C-x Control-x
\e 0x1b Escape
\f 0x0c Formfeed
\M-\C-x Meta-Control-x
\n 0x0a Newline
\nnn Octal notation, where n is in the range 0.7
\r 0x0d Carriage return
\s 0x20 Space
\t 0x09 Tab
\v 0x0b Vertical tab
\x Character x
\xnn Hexadecimal notation, where n is in the range 0.9, a.f, or A.F

 

Triple Quotes

Python এ triple quote এর সাহায্যে একাধিক লাইনের স্টেটমেন্ট লেখা হয়। triple quote বোঝাতে তিনটি সিঙ্গেল (’’’) অথবা ডাবল কোটিং (”””) চিহ্ন ব্যবহৃত হয়।


#!/usr/bin/python

para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( \t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ \n ], or just a NEWLINE within
the variable assignment will also show up.
"""
print para_str

 

উপরের কোডটির রেসাল্ট হবে,


this is a long string that is made up of
several lines and non-printable characters such as
TAB (    ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
 ], or just a NEWLINE within
the variable assignment will also show up.

 

Raw strings ব্যবহার করলে backslash character গুলোর ব্যবহার হয় না। যেমন,


#!/usr/bin/python

print r'C:\\nowhere'

 

উপরের কোডটি চালালে নিচের রেসাল্ট আসবে।


C:\\nowhere


 

Unicode String

Normal strings গুলোকে Python 8-bit ASCII ফরম্যাটে স্টোর করে, কিন্তু Unicode strings গুলো 16-bit Unicode আকারে স্টোর হয়। এর ফলে একটু ভিন্ন ধরনের ক্যারেকটার ব্যবহার করা সম্ভব হয়।


#!/usr/bin/python

print u'Hello, world!'

 

উপরের কোডটি নিচের রেসাল্ট দিবে।


Hello, world!

 

Unicode strings এ prefix u ব্যবহৃত হয়, আর raw strings এ prefix r এর ব্যবহার হয়।

 

Built-in String Methods

Python নিচের বিল্ট−ইন মেথোডগুলোর সাহায্যে স্ট্রিং গুলোকে প্রভাবিত করতে পারে।

SN Methods with Description
1 capitalize()
Capitalizes first letter of string
2 center(width, fillchar)
Returns a space-padded string with the original string centered to a total of width columns.
3 count(str, beg= 0,end=len(string))
Counts how many times str occurs in string or in a substring of string if starting index beg and ending index end are given.
4 decode(encoding='UTF-8',errors='strict')
Decodes the string using the codec registered for encoding. encoding defaults to the default string encoding.
5 encode(encoding='UTF-8',errors='strict')
Returns encoded string version of string; on error, default is to raise a ValueError unless errors is given with 'ignore' or 'replace'.
6 endswith(suffix, beg=0, end=len(string))
Determines if string or a substring of string (if starting index beg and ending index end are given) ends with suffix; returns true if so and false otherwise.
7 expandtabs(tabsize=8)
Expands tabs in string to multiple spaces; defaults to 8 spaces per tab if tabsize not provided.
8 find(str, beg=0 end=len(string))
Determine if str occurs in string or in a substring of string if starting index beg and ending index end are given returns index if found and -1 otherwise.
9 index(str, beg=0, end=len(string))
Same as find(), but raises an exception if str not found.
10 isalnum()
Returns true if string has at least 1 character and all characters are alphanumeric and false otherwise.
11 isalpha()
Returns true if string has at least 1 character and all characters are alphabetic and false otherwise.
12 isdigit()
Returns true if string contains only digits and false otherwise.
13 islower()
Returns true if string has at least 1 cased character and all cased characters are in lowercase and false otherwise.
14 isnumeric()
Returns true if a unicode string contains only numeric characters and false otherwise.
15 isspace()
Returns true if string contains only whitespace characters and false otherwise.
16 istitle()
Returns true if string is properly "titlecased" and false otherwise.
17 isupper()
Returns true if string has at least one cased character and all cased characters are in uppercase and false otherwise.
18 join(seq)
Merges (concatenates) the string representations of elements in sequence seq into a string, with separator string.
19 len(string)
Returns the length of the string
20 ljust(width[, fillchar])
Returns a space-padded string with the original string left-justified to a total of width columns.
21 lower()
Converts all uppercase letters in string to lowercase.
22 lstrip()
Removes all leading whitespace in string.
23 maketrans()
Returns a translation table to be used in translate function.
24 max(str)
Returns the max alphabetical character from the string str.
25 min(str)
Returns the min alphabetical character from the string str.
26 replace(old, new [, max])
Replaces all occurrences of old in string with new or at most max occurrences if max given.
27 rfind(str, beg=0,end=len(string))
Same as find(), but search backwards in string.
28 rindex( str, beg=0, end=len(string))
Same as index(), but search backwards in string.
29 rjust(width,[, fillchar])
Returns a space-padded string with the original string right-justified to a total of width columns.
30 rstrip()
Removes all trailing whitespace of string.
31 split(str="", num=string.count(str))
Splits string according to delimiter str (space if not provided) and returns list of substrings; split into at most num substrings if given.
32 splitlines( num=string.count('\n'))
Splits string at all (or num) NEWLINEs and returns a list of each line with NEWLINEs removed.
33 startswith(str, beg=0,end=len(string))
Determines if string or a substring of string (if starting index beg and ending index end are given) starts with substring str; returns true if so and false otherwise.
34 strip([chars])
Performs both lstrip() and rstrip() on string
35 swapcase()
Inverts case for all letters in string.
36 title()
Returns "titlecased" version of string, that is, all words begin with uppercase and the rest are lowercase.
37 translate(table, deletechars="")
Translates string according to translation table str(256 chars), removing those in the del string.
38 upper()
Converts lowercase letters in string to uppercase.
39 zfill (width)
Returns original string leftpadded with zeros to a total of width characters; intended for numbers, zfill() retains any sign given (less one zero).
40 isdecimal()
Returns true if a unicode string contains only decimal characters and false otherwise.

 

পাইথন প্রোগ্রামিং : নাম্বার (Python Numbers in bangla)

1.9 Python Numbers

Number ডাটা টাইপের সাহায্যে সংখ্যা স্টোর করা যায়। যখনই একটি number ডাটা টাইপের মান পরিবর্তন করা হবে তখন একটি নতুন অবজেক্ট তৈরি হবে।


var1 = 1
var2 = 10

 

del statement এর সাহায্যে number অবজেক্টের রেফারেন্স ডিলেট করা যায়। যেমন,


del var1[,var2[,var3[....,varN]]]]

 

del statement এর সাহায্যে এক বা একাধিক স্টেটমেন্ট ডিলেট করা যায়। যেমন,


del var
del var_a, var_b

 

Python চার ধরনের number টাইপ সমর্থন করে। যেমনঃ

  • int = পূর্ণ সংখ্যা
  • long = আনলিমিটেড সাইজের পূর্ণসংখ্যা, এদেরকে integers এর মতই লেখা হয়, তবে শেষে একটি ছোট কিংবা বড় হাতের L থাকে। বড় হাতের L লেখার সুবিধা হচ্ছে সেটার সাথে ১ এর মিল থাকে না।
  • float = বাস্তব সংখ্যা। Float লিখার সময় অনেক ক্ষেত্রে E বা e ব্যবহৃত হয়, যা দিয়ে ১০ এর পাওয়ার বোঝায় (2.5e2 = 2.5 x 102= 250)।
  • complex = জটিল সংখ্যা, এরা a + bJ, যেখানে a এবং b হচ্ছে float এবং J এর মানে -১ এর বর্গমূল থাকে। Python প্রোগ্রামিং এ complex number এর তেমন একটা ব্যবহার নেই।

 

উদাহরনঃ

int long float complex
10 51924361L 0.0 3.14j
100 -0x19323L 15.20 45.j
-786 0122L -21.9 9.322e-36j
080 0xDEFABCECBDAECBFBAEL 32.3+e18 .876j
-0490 535633629843L -90. -.6545+0J
-0x260 -052318172735L -32.54e100 3e+26J
0x69 -4721885298529L 70.2-E12 4.53e-7j

 

Mathematical Functions

Python নিচের ফাংশনগুলোর সাহায্যে গাণিতিক হিসাব নিকাশ করে থাকে।

Function Returns ( description )
abs(x) The absolute value of x: the (positive) distance between x and zero.
ceil(x) The ceiling of x: the smallest integer not less than x
cmp(x, y) -1 if x < y, 0 if x == y, or 1 if x > y
exp(x) The exponential of x: ex
fabs(x) The absolute value of x.
floor(x) The floor of x: the largest integer not greater than x
log(x) The natural logarithm of x, for x> 0
log10(x) The base-10 logarithm of x for x> 0 .
max(x1, x2,...) The largest of its arguments: the value closest to positive infinity
min(x1, x2,...) The smallest of its arguments: the value closest to negative infinity
modf(x) The fractional and integer parts of x in a two-item tuple. Both parts have the same sign as x. The integer part is returned as a float.
pow(x, y) The value of x**y.
round(x [,n]) x rounded to n digits from the decimal point. Python rounds away from zero as a tie-breaker: round(0.5) is 1.0 and round(-0.5) is -1.0.
sqrt(x) The square root of x for x > 0

 

Random Number Functions

Random numbers গেমস, সিমুলেশন, টেস্টিং, সিকিউরিটি ইত্যাদি এপ্লিকেশনে ব্যবহৃত হয়। Python নিচের ফাংশনগুলো প্রতিনিয়ত ব্যবহার করে।

Function Description
choice(seq) A random item from a list, tuple, or string.
randrange ([start,] stop [,step]) A randomly selected element from range(start, stop, step)
random() A random float r, such that 0 is less than or equal to r and r is less than 1
seed([x]) Sets the integer starting value used in generating random numbers. Call this function before calling any other random module function. Returns None.
shuffle(lst) Randomizes the items of a list in place. Returns None.
uniform(x, y) A random float r, such that x is less than or equal to r and r is less than y

 

Trigonometric Functions

Python নিচের ফাংশনগুলোর সাহায্যে ত্রিকোণমিতৃক হিসেব-নিকাশ করে থাকে।

Function Description
acos(x) Return the arc cosine of x, in radians.
asin(x) Return the arc sine of x, in radians.
atan(x) Return the arc tangent of x, in radians.
atan2(y, x) Return atan(y / x), in radians.
cos(x) Return the cosine of x radians.
hypot(x, y) Return the Euclidean norm, sqrt(x*x + y*y).
sin(x) Return the sine of x radians.
tan(x) Return the tangent of x radians.
degrees(x) Converts angle x from radians to degrees.
radians(x) Converts angle x from degrees to radians.

Mathematical Constants

Python এ pi এবং e ধ্রুবক গুলোর ব্যবহার রয়েছে।

পাইথন প্রোগ্রামিং : লুপ (Python Loops)

1.8 Python Loops

অনেক সময় এমন অবস্থা তৈরি হয় যে একটি নির্দিষ্ট ব্লকের কোড অনেকবার চালানো লাগে, তখন লুপ এর প্রয়োজন হয়। নিচের ছবিটি লক্ষ্য করিঃ

Loop

Python প্রোগ্রামিং ল্যাঙ্গুয়েজে নিচের লুপ গুলো প্রচলিত

.

Loop Type Description
while loop Repeats a statement or group of statements while a given condition is TRUE. It tests the condition before executing the loop body.
for loop Executes a sequence of statements multiple times and abbreviates the code that manages the loop variable.
nested loops You can use one or more loop inside any another while, for or do..while loop.

 

Loop Control Statements

কোডিং এর সময় সাধারণ নিয়মের/ সিরিয়ালের পরিবর্তন বোঝাতে Loop control statements এর প্রয়োজন হয়। যখন একটি নির্দিষ্ট লুপের পরিসীমার বাইরের কোড রান হয় তখন ঐ পরিসীমার সকল অবজেক্ট ধ্বংস হয়ে যায়। Python নিচের কন্ট্রোল স্টেটমেন্ট গুলো সাপোর্ট করে।

 

Control Statement Description
break statement Terminates the loop statement and transfers execution to the statement immediately following the loop.
continue statement Causes the loop to skip the remainder of its body and immediately retest its condition prior to reiterating.
pass statement The pass statement in Python is used when a statement is required syntactically but you do not want any command or code to execute.

 

পাইথন প্রোগ্রামিং : সিদ্ধান্ত গ্রহণ (Python Decision Making)

1.7 Python Decision Making

Decision Making অর্থাৎ সিদ্ধান্ত নেয়াটা যেকোনো প্রোগ্রামিং ল্যাঙ্গুয়েজ এর একটি প্রচলিত অংশ, যেখানে প্রোগ্রামটি কিছু প্রদত্ত শর্তের উপর ভিত্তিতে কোন একটি প্রোসেস সত্য নাকি মিথ্যা সেটা যাচাই করে। প্রায় সব প্রোগ্রামিং ল্যাংগুয়েজেই Decision Making এর ব্যাপার আছে। নিচের চিত্রে Decision Making এর একটা ব্যাসিক ধারণা দেয়া হলঃ

Decision Making

কোন শর্ত যদি মিথ্যা হয়, তবে Python সেটার ফলাফল ধরে শূন্য (=০), আর যদি সত্য হয় তবে সেক্ষেত্রে ০ ছাড়া যেকোনো মান (সাধারণত = ১)। নিচে Python এ ব্যবহৃত Decision Making টাইপ গুলো বলা হলঃ

if statements

if statement এ অন্যান্য প্রোগ্রামিং ল্যাংগুয়েজের মতই একটি শর্ত থাকে যার সাহায্যে একাধিক ডাটার তুলনা করা হয়, এবং সিদ্ধান্ত নেয়া হয়। এই স্টেটমেন্টটি boolean expression অনুসরন করে (অর্থাৎ শর্তটি সত্য নাকি মিথ্যা সেটা যাচাই করে) শুধুমাত্র ২ ধরনের ফলাফল দিতে পারে।

Syntax


if expression:
   statement(s)

 

যদি If এর পরে ব্যবহৃত boolean expression টি TRUE হয়, তবে পরবর্তী statement(s) টি ঘটবে, আর যদি FALSE হয়, তবে if statement(s) টি শেষ হবে এবং এর পরের প্রথম code টি ঘটবে।

উদাহরণ


#!/usr/bin/python

var1 = 100
if var1:
   print "1 - Got a true expression value"
   print var1

var2 = 0
if var2:
   print "2 - Got a true expression value"
   print var2
print "Good bye!"

 

উপরের প্রোগ্রামটি রান করালে নিচের ফলাফল প্রিন্ট হবে।


1 - Got a true expression value
100
Good bye!

 

আবার, if statement এর পরে এক লাইনের শর্ত (স্টেটমেন্ট) থাকলে সেটি if statement এর পরেই একই লাইনে লেখা যেতে পারে। যেমন,


#!/usr/bin/python

var = 100

if ( var  == 100 ) : print "Value of expression is 100"

print "Good bye!"

 

উপরের প্রোগ্রামটি রান করালে নিচের ফলাফল প্রিন্ট হবে।


Value of expression is 100
Good bye!

 

if...else statements

এক্ষেত্রে if statement এর পরেই একটি else statement ও থাকে, যার ফলে যদি প্রথম if statement টি মিথ্যা হয় (মান=০) তবে পরবর্তী else statement এর কোডটি ঘটবে।

Syntax


if expression:
   statement(s)
else:
   statement(s)

 

উদাহরণ


#!/usr/bin/python

var1 = 100
if var1:
   print "1 - Got a true expression value"
   print var1
else:
   print "1 - Got a false expression value"
   print var1

var2 = 0
if var2:
   print "2 - Got a true expression value"
   print var2
else:
   print "2 - Got a false expression value"
   print var2

print "Good bye!"

 

উপরের প্রোগ্রামটি রান করালে নিচের ফলাফল প্রিন্ট হবে।


1 - Got a true expression value
100
2 - Got a false expression value
0
Good bye!

 

elif Statement

elif statement এর সাহায্যে একটি if statement এর পরে একসঙ্গে একাধিক এক্সপ্রেশন (elif statement) যাচাই করে দেখা যায় কোনটা সত্য, তারপর যেই স্টেটমেন্টটি সত্য (TRUE) সেটার কোড চালু হয়। else এর মত elif statement ও optional.

syntax


if expression1:
   statement(s)
elif expression2:
   statement(s)
elif expression3:
   statement(s)
else:
   statement(s)

 

Python এ switch কিংবা case statements নেই, তবে switch করার দরকার পরলে if..elif...statements দিয়ে কাজ চালানো যায়।

উদাহরণ


#!/usr/bin/python

var = 100
if var == 200:
   print "1 - Got a true expression value"
   print var
elif var == 150:
   print "2 - Got a true expression value"
   print var
elif var == 100:
   print "3 - Got a true expression value"
   print var
else:
   print "4 - Got a false expression value"
   print var

print "Good bye!"

 

উপরের প্রোগ্রামটি রান করালে নিচের ফলাফল প্রিন্ট হবে।


3 - Got a true expression value
100
Good bye!


nested if statements

একটি শর্ত পূরন হবার পরে আরেকটি ভিন্ন শর্ত পূরন হয়েছে কিনা সেটা দেখতে nested if  স্টেটমেন্ট ব্যবহার হয়। এই ধরনের Decision making অপেক্ষাকৃত জটিল, এবং এখানে একটি  if... elif... else এর অংশ হতে পারে।

Syntax:


if expression1:
   statement(s)
   if expression2:
      statement(s)
   elif expression3:
      statement(s)
   else
      statement(s)
elif expression4:
   statement(s)
else:
   statement(s)

 

উদাহরন:


#!/usr/bin/python

var = 100
if var < 200:
   print "Expression value is less than 200"
   if var == 150:
      print "Which is 150"
   elif var == 100:
      print "Which is 100"
   elif var == 50:
      print "Which is 50"
elif var < 50:
   print "Expression value is less than 50"
else:
   print "Could not find true expression"

print "Good bye!"

 

উপরের প্রোগ্রামটি রান করালে নিচের ফলাফল প্রিন্ট হবে।


Expression value is less than 200
Which is 100
Good bye!

 

পাইথন প্রোগ্রামিং : মৌলিক অপারেটরসমূহ (Python Basic Operators in Bangla)

1.6 Python Basic Operators

একটি সহজ সমীকরণ বিবেচনা করিঃ ৪ + ৫ = ৯; এখানে ৪ এবং ৫ সংখ্যাগুলোকে হচ্ছে ‘operands’ এবং ‘+’ হচ্ছে ‘operators’। Python এ নিম্নোক্ত operators গুলো ব্যবহৃত হয়।

  • Arithmetic Operators
  • Comparison (Relational) Operators
  • Assignment Operators
  • Logical Operators
  • Bitwise Operators
  • Membership Operators
  • Identity Operators

নিচে কিছু উদাহরণ দেয়া হয়েছে (এখানে, a = 10 এবং b = 20)।

Operator Description Example

Python Arithmetic Operators (যোগ, বিয়োগ, গুন, ভাগ ইত্যাদি)

+ যোগ Operator এর দুইপাশের মান গুলো যোগ করে। a + b = 30
- বিয়োগ Operator এর বাম পাশের মান থেকে ডান পাশের মান বিয়োগ করে। a – b = -10
* গুন Operator এর দুইপাশের মান গুলো গুন করে। a * b = 200
/ ভাগ Operator এর বাম পাশের মানকে ডান পাশের মান দিয়ে ভাগ করে। b / a = 2
% Modulus (ভাগশেষ) Operator এর বাম পাশের মানকে ডান পাশের মান দিয়ে ভাগ করে ভাগশেষ নির্নয় করে। b % a = 0
** Exponent (পাওয়ার) Operators এর পাওয়ার নির্নয় করে। a**b =1020
// Floor Division (পূর্ণ-সংখ্যার ভাগফল) Operator এর বাম পাশের মানকে ডান পাশের মান দিয়ে ভাগ করে ভাগফল বের করে এবং দশমিকের আগ পর্যন্ত (পূর্ণ-সংখ্যা) মান নির্নয় করে। 9//2 = 4 এবং 9.0//2.0 = 4.0

Python Comparison Operators (দুটি operand এর তুলনা ও সম্পর্ক স্থাপন)।

== সমান চিহ্ন। (a == b) সঠিক নয়।
!= অথবা <> অসমান চিহ্ন। (a != b) সঠিক।
>, <, >= এবং <= অসমতা’র চিহ্ন। (a > b) সঠিক নয়, আবার (a <= b) সঠিক।

Python Assignment Operators

= ডান দিকের operand এর মান বাম পাশের operand এ রেকর্ড করে। c = a + b অর্থ a + b এর মান c তে রেকর্ড করা
+= Add AND ডান দিকের operand এর মান বাম পাশের operand এর সাথে যোগ করে নতুন করে বাম দিকের operand এর মান হিসেবে রেকর্ড করে। c += a এর অর্থ c = c + a
-= Subtract AND ডান দিকের operand এর মান বাম পাশের operand থেকে বিয়োগ করে নতুন করে বাম দিকের operand এর মান হিসেবে রেকর্ড করে। c -= a এর অর্থ c = c - a
*= Multiply AND দুই পাশের operand গুন করে বাম দিকের operand এর নতুন মান হিসেবে রেকর্ড করে। c *= a এর অর্থ c = c * a
/= Divide AND বাম দিকের operand ডান পাশের operand দিয়ে ভাগ করে প্রাপ্ত ভাগফল বাম দিকের operand এর নতুন মান হিসেবে রেকর্ড করে। c /= a এর অর্থ c = c / a
%= Modulus AND দুই দিকের operands এর মডুলাস (ভাগশেষ) বাম পাশের operand এর মান হিসেবে রেকর্ড করে। c %= a এর অর্থ c = c % a
**= Exponent AND দুই দিকের operands এর পাওয়ার বাম পাশের operand এর মান হিসেবে রেকর্ড করে। c **= a এর অর্থ c = ca
//= Floor Division দুই দিকের operands এর Floor Division বাম পাশের operand এর মান হিসেবে রেকর্ড করে। c //= a এর অর্থ c = c // a

Python Bitwise Operators (বাইনারি হিসাব)

মনে a = 60; এবং b = 13 হয়, তবে বাইনারি ফরম্যাট এ a = 0011 1100 এবং b = 0000 1101
a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a  = 1100 0011

Python Membership Operators

in অথবা not in একটি ভেরিয়েবল একটি বিশেষ সিরিজ অথবা ধারার অংশ হিসেবে যথাক্রমে থাকা বা না থাকা নির্দেশ করে। x in y এর ফলাফল 1 হবে যদি x ভেরিয়েবলটি y ধারার অংশ হয়, তেমনই ভাবে x not in y এর মান 1 হবে যদি x ভেরিয়েবলটি y ধারার অংশ না হয়।

Python Identity Operators

is এই অপারেটর বুঝায় যে এর দুই পাশের ভেরিয়েবলগুলো একই বস্তু নির্দেশ করে। x is y এর ফলাফল 1 হবে যদি x ও y একই বস্তু বোঝায়।
is not এই অপারেটর বুঝায় যে এর দুই পাশের ভেরিয়েবলগুলো একই বস্তু নির্দেশ করে না। x is not y এর ফলাফল 1 হবে যদি x ও y একই বস্তু না বোঝায়।

Python Operators Precedence (অগ্রাধিকার)

নিচে Python এর অপারেটর এর সিরিয়াল/ অগ্রাধিকার (কোনটির কাজ আগে হবে) দেয়া হলঃ

  1. **
  2. ~ + -
  3. * / % //
  4. + -
  5. >> <<
  6. &
  7. ^ |
  8. <= < > >=
  9. <> == !=
  10. = %= /= //= -= += *= **=
  11. is is not
  12. in not in
  13. not or and

পাইথন প্রোগ্রামিং : ভেরিয়েবল টাইপ (Python Variable Types in bangla)

1.5 Python Variable Types

ভেরিয়েবল হচ্ছে মেমোরি তে নির্ধারিত জায়গা (স্পেস) যেখানে বিভিন্ন জিনিসের মান (value) স্টোর করে রাখা হয়। ভেরিয়েবল তৈরি করা মানেই কম্পিউটারের মেমোরিতে একটা নির্দৃষ্ট স্পেস সঞ্চয় করে রাখা। যেকোনো ভেরিয়েবল কি ধরনের ডাটা রেকর্ড/ স্টোর করবে সেটা নির্ভর করে ভেরিয়েবল উপর।

Python এ সমতা চিহ্নের (=) মাধ্যমে যেকোনো ধরনের মান (value) ভেরিয়েবল হিসেবে স্টোর করা যায়, এক্ষেত্রে আলাদা করে কোন ডিক্লারেশনের প্রয়োজন নেই। সমতা চিহ্নের বাম পাশে ব্যবহৃত শব্দটি ভেরিয়েবলের নাম এবং ডান পাশের সংখ্যাটি ভেরিয়েবলের মান নির্দেশ করে। যেমন,


#!/usr/bin/python

counter = 100          # An integer assignment
miles   = 1000.0       # A floating point
name    = "John"       # A string

print counter
print miles
print name

উপরের প্রোগ্রামটির ফলাফল হবে এমন,


1001000.0


 

Python এ একাধিক ভেরিয়েবলের জন্য একটি নির্দৃষ্ট মান স্টোর করা যায়। আবার একাধিক ভেরিয়েবলের জন্য যথাক্রমে একাধিক মানও একসাথে স্টোর করা যায়। যেমন,


a = b = c = 1


 

এবং


a, b, c = 1, 2, "john"


 

প্রথম প্রোগ্রামটিতে a, b এবং c এর মান 1 স্টোর করা হয়েছে, আর দ্বিতীয় প্রোগ্রামটিতে a, b এবং c এর মান যথাক্রমে 1, 2 এবং john স্টোর করা হয়েছে।

Python এ ৫ ধরনের স্ট্যান্ডার্ড ডাটা টাইপ আছে। যেমন,

  • Numbers
  • String
  • List
  • Tuple
  • Dictionary

Numbers

Numbers হচ্ছে যেকোনো প্রকারের সংখ্যা। Python ৪ ধরনের সংখ্যা (Numbers) সাপোর্ট করে। যেমন,

  • int (ছোট পূর্ণসংখ্যা)
  • long (বড় পূর্ণসংখ্যা, octal কিংবা hexadecimal আকারে প্রকাশ করা যায়)
  • float (বাস্তব সংখ্যার কাছাকাছি মান)
  • complex (জটিল সংখ্যা)

নিচের টেবিলে কিছু সংখ্যার উদাহরণ দেয়া হলঃ

int long float complex
10 51924361L 0.0 3.14j
080 0xDEFABCECBDAECBFBAEl 32.3+e18 .876j
-0490 535633629843L -90. -.6545+0J

 

Strings

Strings হচ্ছে কোটেশান মার্কের (“”) ভেতর ব্যবহৃত বর্ণ/ শব্দ সমূহ। বিভিন্ন রকমের slice operator ([ ] and [:]) এর সাহায্য নিয়ে নির্ধারিত string এর অংশবিশেষ অথবা বিভিন্ন পূনর্বিন্যাস আউটপুট হিসেবে দেখা যায়। যেমন,


#!/usr/bin/python

str = 'Hello World!'

print str          # Prints complete string
print str[0]       # Prints first character of the string
print str[2:5]     # Prints characters starting from 3rd to 5th
print str[2:]      # Prints string starting from 3rd character
print str * 2      # Prints string two times
print str + "TEST" # Prints concatenated string

 

উপরের প্রোগ্রামটির ফলাফল হবে,


Hello World!
H
llo
llo World!
Hello World!Hello World!
Hello World!TEST

 

Lists

List হল তৃতীয় ব্র্যাকেট ([ ]) এ আবদ্ধ, ও কমা (commas) দিয়ে আলাদা করা আইটেম। যেমন,


#!/usr/bin/python

list = [ 'abcd', 786 , 2.23, 'john', 70.2 ]
tinylist = [123, 'john']

print list          # Prints complete list
print list[0]       # Prints first element of the list
print list[1:3]     # Prints elements starting from 2nd till 3rd 
print list[2:]      # Prints elements starting from 3rd element
print tinylist * 2  # Prints list two times
print list + tinylist # Prints concatenated lists

 

উপরের প্রোগ্রামটির রেসাল্ট হবে,


['abcd', 786, 2.23, 'john', 70.200000000000003]
abcd
[786, 2.23]
[2.23, 'john', 70.200000000000003]
[123, 'john', 123, 'john']
['abcd', 786, 2.23, 'john', 70.200000000000003, 123, 'john']

 

Tuples

Tuple আর List মূলত একই রকম, শুধু পার্থক্য হচ্ছে যে Tuple এ প্রথম ব্র্যাকেট ( ) ব্যবহৃত হয়, কিন্তু List এ তৃতীয় ব্র্যাকেট [ ] ব্যবহার হয়। এছাড়াও Tuple এর মান পরে পরিবর্তন করা যায়না (read-only values), কিন্তু List এর মান আপডেট করা যায়। Tuple এর উদাহরনঃ


#!/usr/bin/python

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
tinytuple = (123, 'john')

print tuple           # Prints complete list
print tuple[0]        # Prints first element of the list
print tuple[1:3]      # Prints elements starting from 2nd till 3rd 
print tuple[2:]       # Prints elements starting from 3rd element
print tinytuple * 2   # Prints list two times
print tuple + tinytuple # Prints concatenated lists

 

উপরের প্রোগ্রামের ফলাফলঃ


('abcd', 786, 2.23, 'john', 70.200000000000003)
abcd
(786, 2.23)
(2.23, 'john', 70.200000000000003)
(123, 'john', 123, 'john')
('abcd', 786, 2.23, 'john', 70.200000000000003, 123, 'john')

 

নিচের Tuple কোডটি ভুল, কারন এখানে Tuple এর মান পরিবর্তন/ আপডেট করার চেষ্টা করা হয়েছে। কিন্তু List এর জন্য কোডটি ঠিক আছে।


#!/usr/bin/python

tuple = ( 'abcd', 786 , 2.23, 'john', 70.2  )
list = [ 'abcd', 786 , 2.23, 'john', 70.2  ]
tuple[2] = 1000    # Invalid syntax with tuple
list[2] = 1000     # Valid syntax with list

 

Dictionary

Dictionary দিয়ে Key-Value জোড়ায় জোড়ায় থাকে। যেকোনো ডাটা টাইপ Key হতে পারে, যদিও সাধারণত numbers বা strings ই Key হিসেবে রেকর্ডেড হয়। অন্যদিকে, যেকোনো সংখ্যা/ অবজেক্টই Value হিসেবে রেকর্ড হতে পারে। Dictionary দ্বিতীয় ব্র্যাকেট { } এর সাহায্যে প্রকাশ করা হয় এবং তৃতীয় ব্র্যাকেটের সাহাজে Doctionary তে Value এসাইন করা হয়। যেমন,


#!/usr/bin/python

dict = {}
dict['one'] = "This is one"
dict[2]     = "This is two"

tinydict = {'name': 'john','code':6734, 'dept': 'sales'}


print dict['one']       # Prints value for 'one' key
print dict[2]           # Prints value for 2 key
print tinydict          # Prints complete dictionary
print tinydict.keys()   # Prints all the keys
print tinydict.values() # Prints all the values

 

উপরের কোড এর রেসাল্ট হবে −


This is one
This is two
{'dept': 'sales', 'code': 6734, 'name': 'john'}
['dept', 'code', 'name']
['sales', 6734, 'john']


এখানে উল্লেখ্য যে, Dictionary তে ক্রম, সিরিয়াল বা অর্ডার ঠিক রাখার কোন ব্যপার নেই।

 

Data Type Conversion

Python এ একধরনের ডাটা টাইপ থেকে আরেকটিতে রূপান্তর করার জন্য কিছু বিল্ট-ইন ফাংশন আছে, যেগুলো আউটপুট হিসেবে পরিবর্তিত মান সহ নতুন অবজেক্ট তৈরি করে। নিচে কিছু ফাংশন ও তাদের অর্থ দেয়া হলঃ

ফাংশন বর্ননা
int(x [,base]) x কে একটি পূর্ণসংখ্যায় রূপান্তর করে, এবং base লিখাটি বেস কে নির্দেশ (specify) করে যদি x একটি স্ট্রিং হয়।
long(x [,base] ) x কে একটি দীর্ঘ পূর্ণসংখ্যায় রূপান্তর করে, এবং base লিখাটি বেস কে নির্দেশ (specify) করে যদি x একটি স্ট্রিং হয়।
float(x) x কে একটি floating-point সংখ্যায় রূপান্তর করে।
complex(real [,imag]) জটিল সংখ্যা তৈরি করে।
str(x) x কে একটি string representation এ রূপান্তর করে।
repr(x) x কে একটি expression string এ রূপান্তর করে।
eval(str) একটি string কে এভালুয়েট করে এবং একটি নতুন অবজেক্ট সৃষ্টি করে।
tuple(s) s কে একটি tuple এ রূপান্তর করে।
list(s) s কে list এ রূপান্তর করে।
set(s) s কে set এ রূপান্তর করে।
dict(d) একটি dictionary তৈরি করে। তবে, d কে অবশ্যই (key,value) ফরম্যাট এর tuples হতে হবে.
frozenset(s) s কে frozen set এ রূপান্তর করে।
chr(x) একটি integer কে একটি character এ রূপান্তর করে।
unichr(x) একটি integer কে একটি Unicode character এ রূপান্তর করে।
ord(x) একটি single character কে এর পূর্ণ-সাঙ্খ্যিক (integar) মানে প্রকাশ করে।
hex(x) একটি integer কে একটি hexadecimal string এ রূপান্তর করে।
oct(x) একটি integer কে একটি octal string এ রূপান্তর করে।

 

পাইথন প্রোগ্রামিং : বেসিক সিনট্যাক্স (Python Basic Syntax in bangla)

1.4 Python Basic Syntax

আপনার Python প্রম্পট এ নিচের প্রোগ্রামটি লিখুন এবং Enter চাপুন।


>>> print "Hello, Python!"


 

অনেক সময় নতুন ভার্সনে কাজ করলে ব্র্যাকেটের ভেতর প্রিন্ট স্টেটমেন্ট দিতে হয় যেমন, print ("Hello, Python!")। যাইহোক, 2.4.3 ভার্সনে রান উপরের স্ক্রিপ্টটি রান করলে নিচের ফলাফলটি আসবে।

Hello, Python!

 

Python Identifiers

Python এর ভেরিয়েবল, ফাংশন, ক্লাস, মোডিউল কিংবা অন্যান্য অবজেক্ট রেকর্ড করার জন্য যেসব নাম ব্যবহৃত হয় তাদের কে Python Identifiers বলে এসব নাম ‘A থেকে Z’ অথবা ‘a থেকে z’ অথবা underscore (_) দিয়ে শুরু হয় এবং এরপর যেকোনো অক্ষর, underscore কিংবা সংখ্যা (0-9) ব্যবহৃত হয়। Python এর Identifier হিসেবে @, $, % ব্যবহার করা যায় না। তাছাড়া, Python কেস সেন্সিটিভ, অর্থাৎ A এবং a এখানে আলাদা অর্থ বহন করে। যেমন, Python identifier এ Manpower এবং manpower এর দুটি আলাদা নাম। নিচে বিভিন্ন Python identifier এর নামকরণ পদ্ধতি বর্ণনা করা হল।

  • শুধুমাত্র Class name গুলো বড় হাতের অক্ষর দিয়ে শুরু হয়, অন্য সব নামকরণ শুরু হয় ছোট হাতের অক্ষর দিয়ে।
  • কোন identifier যদি শুধুমাত্র একটি underscore (_) দিয়ে শুরু হয় তবে তার অর্থ হচ্ছে এটি একটি ‘private identifier’.
  • যদি কোন identifier পর পর দুটি underscore (_) দিয়ে নামকরণ হয় তবে সেটি ‘strongly private identifier’.
  • যদি কোন identifier এর নাম পর পর দুটি underscore (_) দিয়ে শেষ হয়, তবে তাকে language-defined special name বলে।

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

and exec not
assert finally or
break for pass
class from print
continue global raise
def if return
del import try
elif in while
else is with
except lambda yield

লাইন ও মার্জিন

এছাড়াও, Python এর কোড কিংবা স্টেটমেন্ট এর একটি নির্দৃষ্ট ব্লক বোঝাতে লাইনের আগে সমান সংখ্যক/ পরিমাণ গ্যাপ (স্পেস) থাকে। অর্থাৎ স্ক্রিপ্টের দুটি continuous line যদি সমান পরিমাণ মার্জিনেই শুরু হয়, তার অর্থ হচ্ছে লাইন দুটো একই ব্লকের। কাজেই একই ব্লকের continuous line ভিন্ন ভিন্ন মার্জিনে শুরু হলে প্রোগ্রামিং এ error দেখা দিবে। উদাহরণস্বরূপ, নিচের কোডটি ঠিক আছে।


if True:
    print "True"
else:
  print "False"

 

কিন্তু, নিচের কোড টি ঠিক নয়। কারন এখানে একই ব্লকের পর পর দুটি স্টেটমেন্ট এর মার্জিন ভিন্ন। print “Answer” এবং print “False” এর মার্জিন দেখুন।


if True:
    print "Answer"
    print "True"
else:
    print "Answer"
  print "False"

 

নিচে আরেকটি জটিল স্টেটমেন্ট এর কোড দেখানো হল। এখানে বিভিন্ন ব্লক গুলো ধরতে পারার চেষ্টা করুন (আপাতত যুক্তি বোঝার দরকার নেই!)।


#!/usr/bin/python

import sys

try:
  # open file stream
  file = open(file_name, "w")
except IOError:
  print "There was an error writing to", file_name
  sys.exit()
print "Enter '", file_finish,
print "' When finished"
while file_text != file_finish:
  file_text = raw_input("Enter text: ")
  if file_text == file_finish:
    # close the file
    file.close
    break
  file.write(file_text)
  file.write("\n")
file.close()
file_name = raw_input("Enter filename: ")
if len(file_name) == 0:
  print "Next time please enter something"
  sys.exit()
try:
  file = open(file_name, "r")
except IOError:
  print "There was an error reading file"
  sys.exit()
file_text = file.read()
file.close()
print file_text

 

একাধিক লাইনের স্টেটমেন্ট

Python এর statement সাধারণত নতুন লাইন এ গিয়ে শেষ হয়। তবে কোন স্টেটমেন্টের শেষে continuation character (\) সেটা দিয়ে স্টেটমেন্টটি আরও চলবে (continued statement) সেটা বোঝানো হয়। যেমন,


total = item_one + \
        item_two + \
        item_three

 

কিন্তু, কোন স্টেটমেন্ট যদি [], {}, বা () ব্র্যাকেটের ভেতর থাকে তবে continuation character (\) দেয়ার দরকার নেই। যেমন,


days = ['Monday', 'Tuesday', 'Wednesday',
        'Thursday', 'Friday']

 

Python এ কোটেশান এর প্রয়োগ

Python এর string literal এ একটি ('), দুটি (") কিংবা তিনটি (''' বা """) কোটেশান চিহ্ন ব্যবহার করা যায়, তবে যেই কোটেশান দিয়ে বাক্য শুরু হয়েছে, সেটি দিয়েই শেষ করতে হবে। তিনটি কোট (''' বা """) দিয়ে দুটি দুই বা ততোধিক লাইনের string literal সম্পন্ন করা যায়। যেমন, নিচের সবকটি string সঠিক।


word = 'word'
sentence = "This is a sentence."
paragraph = """This is a paragraph. It is
made up of multiple lines and sentences."""

 

Python এ কমেন্ট

String literal এর বাইরে হ্যাশ চিহ্ন (#) টাইপ করে যদি কোন বাক্য লেখা হয়, তবে সেটি একটি ‘কমেন্ট’ হিসেবে গণ্য হবে। সহজ কথায়, # চিহ্নের পরে ব্যবহৃত একই লাইনের সকল অক্ষর একসাথে একটি কমেন্ট হিসেবে বিবেচিত হবে, এবং Python interpreter সব ধরনের কমেন্টকে ignore করবে। যেমন,


#!/usr/bin/python

# First comment
print "Hello, Python!" # second comment

 

এই স্ক্রিপ্টটি রান করলে নিচের রেসাল্টটি আসবে।


Hello, Python!


 

যেকোনো স্টেটমেন্ট, কিংবা এক্সপ্রেশন এর পরে কমেন্ট সংযোজন করা যায়।


name = "Madisetti" # This is again comment

 

দরকার পরলে একাধিক কমেন্টও যোগ করে নিতে পারেন।


# This is a comment.
# This is a comment, too.
# This is a comment, too.
# I said that already.

 

শূন্য লাইন (Blank Lines)

কোন লাইনে শুধুমাত্র স্পেস, অথবা কোন কমেন্ট থাকলে সেটাকে blank line বলে, এবং Python তাকে সম্পূর্ণরূপে ignore করে। Interactive interpreter session চলাকালীন blank line দিয়ে একাধিক বাক্যের স্টেটমেন্ট এর শেষ বোঝানো হয়।

এখন নিচের প্রোগ্রামটি লক্ষ্য করি।


#!/usr/bin/python

raw_input("\n\nPress the enter key to exit.")

 

প্রোগ্রামটি রান করলে, ফলাফল হিসেবে প্রিন্ট হবে, “Press the enter key to exit” এবং তারপর কী-বোর্ডে কোন কিছু টাইপ করা মাত্রই প্রোগ্রামটি শেষ হবে। এখানে "\n\n" ব্যবহার করার জন্য আসল বাক্যটি দেখানোর আগে দুটি blank line আসবে। এই স্ক্রিপ্টটির সাহাজ্যে সহজেই এমন একটি প্রোগ্রাম তৈরি করা যায়, যেখানে কোন ইউসার নিজে কোন বাটনে চাপ দেয়ার আগ পর্যন্ত প্রোগ্রাম স্ক্রিন খোলা থাকবে।

 

একই লাইনে একাধিক স্টেটমেন্ট

একই লাইনে (অবশ্যই একই ব্লকে) একাধিক স্টেটমেন্ট বোঝাতে সেমি-কোলন (;) চিহ্ন ব্যবহার করা হয়। যেমন,


import sys; x = 'foo'; sys.stdout.write(x + '\n')

 

Suites (একাধিক স্টেটমেন্ট গ্রুপ)

আলাদা আলাদা স্টেটমেন্ট এর একটি মাত্র ‘গ্রুপ’ যখন একসাথে একটি কোড ব্লক তৈরি করে তখন তাকে Suites বলে। জটিল/ যৌগিক/ বড় স্টেটমেন্ট এর ক্ষেত্রে, if, while, def অথবা class এর ক্ষেত্রে একটি হেডার লাইন এবং পরে একটি suite এর প্রয়োজন হয়। হেডার লাইনের আগে একটি কী-ওয়ার্ড থাকে এবং পরে কোলন চিহ্ন (:) থাকে, যার পরে এক বা একাধিক লাইনের suite ব্যবহার করা হয়। যেমন,


if expression : 
   suite
elif expression : 
   suite 
else : 
   suite

 

Command Line আর্গুমেন্টঃ

অনেক সময় একটা প্রোগ্রাম কিভাবে রান করানো উচিৎ, সেই তথ্যও অন্য একটি প্রোগ্রাম এ দেয়া হয়, যা কমান্ড লাইন আর্গুমেন্ট হিসেবে পরিচিত। Python এ –h- এর সাহায্যে এরকম প্রোগ্রাম কোড করা যায়। কমান্ড লাইন আর্গুমেন্টের কনসেপ্ট অপেক্ষাকৃত জটিল, যা এই টিউটোরিয়াল এর পরবর্তি অংশে আলোচনা করা হবে।

 

পাইথন প্রোগ্রামিং টিউটোরিয়াল : ইন্সটলেশন (Python – Environment Setup in bangla)

লিখেছেন: আবরার রেজওয়ান শুভ

 

1.3 Python - Environment Setup

Local Environment Setup

Local Environment Setup এর ক্ষেত্রে আপনার কম্পিউটার এর সার্চ ইঞ্জিনে টাইপ করুন ‘Python’ এবং দেখুন এটি আপনার কম্পিউটারে ইন্সটল করা আছে কিনা, এবং যদি থাকে তবে এর ভার্সনটি জেনে রাখুন। এছড়াও Python এর অফিশিয়াল ওয়েবসাইট (http://www.python.org/) থেকে এর সর্বশেষ আপডেট, সোর্স কোড, বাইনারিস, ডকুমেন্টস ইত্যাদি ডাওনলোড করা যাবে।

Python ইন্সটলেশন

http://www.python.org/download/ ওয়েবসাইটে বিভিন্ন অপারেটিং সিস্টেমের জন্য Python এর বিভিন্ন ভার্সন পাওয়া যাবে, সেখান থেকে আপনার অপারেটিং সিস্টেম অনুযায়ী উপযুক্ত ভার্সনটি ডাউনলোড করে ইন্সটল করুন। ডাউনলোড করা ফাইলটিতে ডাবল ক্লিক করলেই ইন্সটলেশন শুরু হয়ে যাবে, ডিফল্ট সেটিংস এই ইন্সটল করুন।

যদি আপনার অপারেটিং সিস্টেমের জন্য প্রযোজ্য বাইনারি কোড না পান, তবে আপনাকে আলাদা ভাবে এর জন্য সোর্স কোড কম্পাইল করতে হবে (C Compiler এর সাহায্যে)। অবশ্য এভাবে ম্যানুয়াল কম্পাইলেশনের একটি সুবিধা হচ্ছে আপনি আপনার সুবিধা মত বিভিন্ন ফিচার বাছাই করতে পারবেন।

PATH সেট আপ করা

Python প্রোগ্রাম ও এর এক্সেকিউটেবল ফাইল গুলো বিভিন্ন ডিরেক্টরি তে থাকতে পারে, তাই অপারেটিং সিস্টেমের একটি SEARCH PATH এর দরকার হয় যেখানে এমন সব ডিরেক্টরির নাম থাকবে যেখানে অপারেটিং সিস্টেম Python এর এক্সিকিউটেবল ফাইল গুলো সার্চ করবে। এই path টি একটি ভেরিয়েবল হিসেবে স্টোর করা হয়, এবং অপারেটিং সিস্টেম নিজে এই ভেরিয়েবল নিয়ন্ত্রন করে, এবং এতে command shell এর সব ইনফর্ম্যাশন থাকে। এই path ভেরিয়েবলের নাম PATH (Unix) অথবা Path (Windows). এখানে লক্ষণীয় যে Unix/ Linax কেস সেন্সিটিভ, কিন্তু windows তা নয়।

Unix/Linux অপারেটিং সিস্টেম এর ক্ষেত্রে

Python ডিরেক্টরিটি path ভেরিয়েবল এ এ সংযোজন করতে হলে নিচের কমান্ডগুলো টাইপ করতে হবেঃ

  • csh shell: setenv PATH "$PATH:/usr/local/bin/python" টাইপ করুন Enter চাপুন।
  • bash shell (Linux): export PATH="$PATH:/usr/local/bin/python" টাইপ করুন Enter চাপুন।
  • sh অথবা ksh shell: PATH="$PATH:/usr/local/bin/python" টাইপ করুন Enter চাপুন।

নোট: Unix/Linux অপারেটিং সিস্টেম এ Python এর ডিফল্ট ডিরেক্টরি হচ্ছে /usr/local/bin/python

Windows অপারেটিং সিস্টেম এর ক্ষেত্রে

  • command prompt path %path%;C:\Python টাইপ করুন Enter চাপুন।

নোট: Windows অপারেটিং সিস্টেম এ Python এর ডিফল্ট ডিরেক্টরি হচ্ছে C:\Python

Python এনভাইরনমেন্ট ভেরিয়েবলঃ

নিচে Python এর কিছু গুরুত্ত্বপূর্ণ এনভাইরনমেন্ট ভেরিয়েবল এর নাম ও সংক্ষিপ্ত বর্ণনা দেয়া হলঃ

ভেরিয়েবল বর্ণনা
PYTHONPATH এটি অনেকটাই PATH ভেরিয়েবলের মত। এই ভেরিয়েবলের কাজ হচ্ছে Python প্রোগ্রাম এ ইম্পোর্ট করা মোডিউল ফাইল গুলোর লোকেশন ঠিক করা এবং সেই অনুযায়ী Python interpreter কে দিক নির্দেশনা করা। PYTHONPATH ভেরিয়েবলটি Python সোর্স কোড ও এর লাইব্রেরির ডিরেক্টরি রেকর্ড করে। PYTHONPATH ভেরিয়েবলটি সাধারনত Python ইন্সটলেশনের সময় অটোম্যাটিক সেট হয়ে যাবে।
PYTHONSTARTUP এই ভেরিয়েবলটি Python সোর্স কোডের ইনিশিয়ালাইজেশন ফাইল এর লোকেশন রেকর্ড করে, এবং যখনি interpreter চালু করা হবে তখনই এই ভেরিয়েবলটিও রান হবে। Unix অপারেটিং সিস্টেমে ফাইলটির নাম .pythonrc.py, এবং এতে PYTHONPATH ভেরিয়েবল লোড ও মোডিফাই করার কমান্ড থাকে।
PYTHONCASEOK এই ভেরিয়েবলটি Windows এ ব্যবহৃত হয় এবং এর কাজ হচ্ছে Python কে ইন্সট্রাকশন দেয়া যাতে এটি যেকোনো ইম্পোর্ট স্টেটমেন্টের প্রথম কেস-ইনসেন্সিটিভ ম্যাচ খুজে বের করতে পারে। এই ভেরিয়েবল এ যেকোনো মান সেট করলেই ভেরিয়েবলটি একটিভেট হবে।
PYTHONHOME

এটি একটি alternative module search path, এটি সাধারণত PYTHONSTARTUP ও PYTHONPATH এর ডিরেক্টরিস এই সংযুক্ত থাকে, এবং এর কাজ হচ্ছে মোডিউল লাইব্রেরির স্থানান্তর সহজ করা।

Python রান করা

Python ৩ ভাবে রান করা যেতে পারে। যেমন,

  1. যেসব অপারেটিং সিস্টেমে কমান্ড-লাইন ইন্টারপ্রেটার থাকে অথবা শেল উইন্ডো থাকে সেসব ক্ষেত্রে সরাসরি Interactive Interpreter থেকে Python রান করা যায়। এসব ক্ষেত্রে, কমান্ড লাইনে python লেখে Enter চাপুন এবং সরাসরি Python এ কোডিং শুরু করুন।
  2. Python এপ্লিকেশনের সাথে ইন্টারপ্রেটার সংযুক্ত করে কমান্ড লাইনে স্ক্রিপ্ট রান করানো যায়।
  3. অপারেটিং সিস্টেমের Graphical User Interface (GUI) এপ্লিকেশন যদি Python সাপোর্ট করে তবে GUI environment থেকেও Python রান করানো যায়।

বিঃদ্রঃ এই টিউটোরিয়ালে যত উদাহরণ দেয়া হয়েছে সবগুলো Python 2.4.3 ভার্সনে রান করানো হয়েছে।

পাইথন প্রোগ্রামিং টিউটোরিয়াল : বেসিক (Python Tutorial in Bangla : Basic)

লিখেছেন: আবরার রেজওয়ান শুভ

1.1 Python - Tutorial

Python একটি general-purpose interpreted, সাধারণ, সহজবোধ্য, উদ্দেশ্য-কেন্দ্রিক এবং উচ্চমানের প্রোগ্রামিং ল্যাংগুয়েজ। ১৯৮৫-১৯৯০ সালের মধ্যে গুইদো ভ্যান রসাম (Guido van Rossum) এই প্রোগ্রামিং ল্যাংগুয়েজ সৃষ্টি করেন। এই টিউটোরিয়ালটি Python সম্পর্কে যথেষ্ট ধারণা দিবে।

কাদের জন্য

যারা একেবারে শুরু থেকে Python প্রোগ্রামিং শিখতে চান, মূলত তাদের জন্যই এই টিউটোরিয়ালটি তৈরি করা হয়েছে।

পূর্বশর্ত

কম্পিউটার প্রোগ্রামিং ল্যাংগুয়েজ এর ব্যাসিক কিছু শব্দের অর্থ জানা থাকলে ভাল হয়। অন্য কোন প্রোগ্রামিং ল্যাংগুয়েজ জানা থাকলে আরো ভাল।

1.2 Python Overview

Python ল্যাংগুয়েজটিকেই এমন ভাবে তৈরি করা হয়েছে যাতে সহজে বোঝা যায়। এটি অন্যান্য প্রোগ্রামিং ল্যাংগুয়েজ এর মত যতিচিহ্ন (কমা, ব্র্যাকেট ইত্যাদি)-নির্ভর নয়, বরং কিছু ইংরেজি কী-ওয়ার্ড প্রতিনিয়ত ব্যবহার করে ল্যাংগুয়েজটা তোইরি করা হয়েছে, এবং এখানে শব্দবিন্যাসও তুলনামূলক সহজ।

  • Python সরাসরি অনুবাদকৃত - অনেকটা PERL এবং PHP প্রোগ্রামিং এর মত, Python প্রোগ্রামও রান করাবার আগে আলাদা করে কম্পাইল করতে হয়না, সরাসরি রান দেয়ার সময়েই প্রোগ্রামটির প্রোসেস (অনুবাদ) হয়।
  • Python পারস্পরিক ক্রিয়াশীল- প্রোগ্রাম লেখার সময় Python prompt থেকে অনুবাদক (interpreter) এর সাথে সরাসরি মত বিনিময় করা যায়।
  • Python উদ্দেশ্য-কেন্দৃক- Python উদ্দেশ্য-কেন্দৃক পদ্ধতি অনুসরণ করে, যার মাধ্যমে একটি বিশেষ উদ্দেশ্যের ভেতর একাধিক কোড লিপিবদ্ধ করা হয়।
  • Python অনভিজ্ঞ দের ভাষা- নতুন প্রোগ্রামার দের জন্য Python দারুন একটি ভাষা, এবং পাশাপাশি এর নানাবিধ প্রয়োগ রয়েছে (সহজ টেক্সট প্রোসেসিং থেকে শুরু করে ওয়েব ব্রাউসার কিংবা গেমস ডেভেলাপমেন্টে)

ইতিহাস

আশির ও নব্বইয়ের দশকের মাঝামাঝি গুইদো ভ্যান রসাম (Guido van Rossum) নেদার্ল্যান্ড এর ন্যাশনাল রিসার্চ ইন্সটিটিউট ফর ম্যাথম্যাটিক্স এন্ড কম্পিউটার সাইন্স এ Python আবিষ্কার করেন।

ABC, Modula-3, C, C++, Algol-68, SmallTalk, Unix shell সহ অন্যান্য অনেকগুলো স্ক্রিপ্টিং ল্যাংগুয়েজ থেকে Python এর সূত্রপাত হয়েছে। Perl প্রোগ্রামিং ল্যাংগুয়েজ এর মত পাইথন এর সোর্স কোড ও GNU General Public License (GPL) এ পাওয়া যায়। Python এর সত্ত্বাধিকার Python software foundation রক্ষা করে। একটি কোর ডেভেলাপমেন্ট টীম পাইথনের অগ্রযাত্রা/ পরিচালনা নিয়ন্ত্রন করে, যেখানে Guido van Rossum, Python এর আবিষ্কারক গুরুত্বপূর্ণ ভূমিকা পালন করে।

বৈশিষ্ট্য

  • Python সহজবোধ্য। এখানে কী-ওয়ার্ড এর ব্যবহার তুলনামূলক কম। Python এর শব্দবিন্যাস এবং ভাষা-গঠনও অপেক্ষাকৃত সহজ, যে কারনে সবাই খুব সহজেই এই ভাষা আয়ত্ত করতে পারে।
  • Python সহজে পড়া যায়। এর কোডিং পদ্ধতি খুব সহজে বোঝা যায়।
  • Python এর সোর্স কোড সহজে মেইন্টেইন করা যায়।
  • Python এর লাইব্রেরী অনেক সমৃদ্ধ এবং স্বল্প সাইজের, যা UNIX, Windows, Macintosh ইত্যাদি অপারেটিং সিস্টেম সাপোর্ট করে।
  • Python এ interactive (পারস্পরিক) কোডিং এর সুবিধা রয়েছে, যার ফলে টুকিটাকি বিভিন্ন প্রকার কোড এর জন্য একই সাথে Testing ও Debugging করা যায়।
  • Python পোর্ট্যাবল, অর্থাৎ বিভিন্ন রকমের হার্ডওয়ার প্ল্যাটফর্মে এটি একই ভাবে কাজ করে।
  • Python প্রথমে কিছু low level module দিয়ে শুরু করা যায়, এবং পরে প্রয়োজন অনুযায়ী প্রোগ্রামার রা নানা রকম টুল সংযোজন করে সেই মোডিউল গুলো আরো সমৃদ্ধ করতে পারে।
  • প্রায় সব ধরনের বাণিজ্যিক ডাটাবেইজ এ Python এর ইন্টারফেস থাকে।
  • Python GUI applications সাপোর্ট করে, যার সাহাজ্যে বিভিন্ন system calls, libraries ও windows systems তৈরি অথবা স্থানান্তরিত করা যায়।
  • বড় সাইজের প্রোগ্রামের জন্য Shell স্ক্রিপ্টিং এর চেয়ে Python এর স্ক্রিপ্ট ভাল কাজ করে।

এগুলো ছাড়াও Python এর আরো কিছু ফিচার রয়েছে। যেমন, এটি Object-Oriented Programming (OOP) এর মত সুবিন্যস্ত; এটিকে স্ক্রিপ্টিং ল্যাংগুয়েজ এর মত ব্যবহারের পাশাপাশি অন্য বড় সাইজের এপ্লিকেশনের বাইট-কোড হিসেবে কম্পাইল করা যায়; এর দারা অত্যান্ত জটিল ও গতিশীল ডাটা তৈরি ও চেক করা যায়; Python গার্বেজ কালেক্ট করে, এবং একে সহজেই C, C++, COM, ActiveX, CORBA, ও Java’র সাথে ইণ্টেগ্রেট করা যায়।