পাইথন প্রোগ্রামিং এ ভেরিয়েবল এবং ডাটাটাইপ
Tags: python, bangla, programming, variables
Published: 2021-08-25 09:39:39

variable শব্দটার বাংলা অর্থ হচ্ছে চলক। তার মানে এই জিনিসটা পরিবর্তিত হতে পারবে। অন্যকথায়, ভেরিয়েবল হচ্ছে ধারক বা container বা placeholder. অর্থাৎ, ভেরিয়েবলের মধ্যে তুমি কোন একটা ডাটা রেখে দিতে পার, যা পরে তুমি তোমার প্রোগ্রামে ব্যাবহার করতে পারবে। 

তো, এই variable এর মধ্যে তুমি যেকোন ডাটাই রেখে দিতে পার। এইটা হতে পারে তোমার নাম(string), তোমার বয়স(number) অথবা কোন একটা একটা কথা সত্যি নাকি মিথ্যা(boolean). তো এই যে ডাটাগুলা তুমি কোন একটা container বা variable এর মধ্যে রাখতেছ, তো ঐ variable এর একটা নাম দিতে হবে না 🤨? তাহলেই তো তুমি ঐ নামের মাধ্যমে ডাটা টাকে অ্যাক্সেস করতে পারবা। 

 
> নোটঃ পাইথন প্রোগ্রামিং এ তোমাকে নির্দিষ্ট করে বলে দিতে হবে না যে, তুমি কি ধরনের ডাটা তোমার ভেরিয়েবলের মধ্যে রাখতেছ। তুমি just একটা variable এর নাম দিয়েই এর মধ্যে ডাটা টাকে রেখে দিতে পারবা।

### কিভাবে একটি ভেরিয়েবল Declare(তৈরি) করে মান নির্ধারন(assign) করে দিতে হয় 🤔
তো মনে কর, তুমি একটা প্রোগ্রাম লিখছ । যেখানে তোমাকে একজন user এর নাম মনে(contain) রাখতে হবে। তো তাহলে তোমাকে প্রথমেই একটা ভেরিয়েবলের নাম declare করতে হবে, তারপর `=` (সমান) এর মাধ্যমে তোমাকে একটা মান assign করে দিতে হবে। একটা জিনিস মনে রাখতে হবে, তুমি কিন্তু চাইলেই যেকোন কিছু নাম দিতে পারবে না। ভেরিয়েবলের নাম কিভাবে নির্ধারণ করতে হয়, তা নিচে বিস্তারিত ভাবে দেয়া আছে। 

আপাতত দেখ, নিচে আমি `user_name` নামে একটা ভেরিয়েবল তৈরী করছি। যার মধ্যে `zuck123` নামে একটা মান দিয়ে দিছি। একটা জিনিস খেয়াল করছ, আমি কী ধরণের মান assign করছি ? এইটা একটা স্ট্রিং(string) . তুমি চাইলে অন্য কিছুও ব্যাবহার করতে পারবে। যেটা আমরা `Data Type` সেকশনে দেখব। 
```python
user_name = 'zuck123'
```

এখন তুমি একটা জিনিস খেয়াল করো, উপরের যে ভেরিয়েবলটা তুমি create করছ, ঐ মানটা কী সব সময়ই একই থাকবে । না, থাকবে না । কারণ , তুমি তো আগেই জান যে variable মানে হচ্ছে চলক অর্থাৎ যার মান চলতে চলতেই পরিবর্তিত হতে পারবে । এর নিচের লাইনে এসে যদি তুমি বলে দাও `user_name` ভেরিয়েবলটিতে অন্য কোন মান রাখ, তাহলে কিন্তু কম্পিউটার ওইখানে অন্য একটা মানই রাখবে। নিচে দেখ 👇🏼
```python
user_name = 'zuck123'
user_name = 'Mark Zuckerburg'
```
দেখছ, প্রথম লাইনে আমরা বলে দিলাম `user_name` ভেরিয়েবলটিতে `zuck123` মানটা রাখ। কিন্তু ২ নম্বর লাইনে এসে আমরা আবার বলে দিলাম যে, `user_name` এর মধ্যে তুমি `Mark Zuckerburg` এই মান টা রেখে দাও । তো এই জিনিসটিকেই আসলে বলা হয় **Variable re-assign** করা। 


### ভেরিয়েবল নাম নির্ধারণ করার কিছু শর্ত 🧐:  
☑ ভেরিয়েবলটার নাম কেবলমাত্র `(a-z/A-Z)` অথবা `_` দিয়ে শুরু হতে পারবে।
```python
name = 'Mr Bean'                # Right
_secret = 'Ami'                 # Right
10name = 'Amar name a vul ace ' # Wrong 
```
☑ ভেরিয়েবল নামের শুরু হওয়া ব্যাতিত অন্য যেকোন জায়গায় `(a-b/A-B)` বা `numbers` বা `underscores` থাকতে পারে। 
```python
ten10 = 10                  # Right
10ten = 10                  # Wrong
amar_name = 'Mr Zuckerburg' # Right

```

☑ ভেরিয়েবল নামের মাঝখানে কোন ফাকা জায়গা(space) রাখা যাবে না। 
```python
amar_name = 'Mr Zuckerburg'           # Right
amar name = 'Amar name vul ache :)'  # Wrong
```


☑ পাইথনে ভেরিয়েবল নামগুলো `case-sensitive` হয়ে থাকে । অর্থাৎ ছোট হাতের অক্ষর দিয়ে কোন ভেরিয়েবলের নাম আর বড় হাতের অক্ষর দিয়ে ঐ সেইম name কিন্তু একই না :)
```python
AmarName = 'Mr Zuckerburg'          # এইটা আলাদা
amarName = 'Amio Mr Zuckerburg'  # এইটা আলাদা
```


☑ পাইথনে কিছু `reserved` বা নিজস্ব কিওয়ার্ড আছে। তুমি ঐ কিওয়ার্ডগুলোও ভেরিয়েবল নাম হিসেবে ব্যবহার করতে পারবে না। নিচে কিওয়ার্ডগুলো দিয়ে দেয়া হলঃ

|Keywords|Keywords|Keywords|Keywords|Keywords|Keywords|
| --------|:-----:| -----:|--------:|------:|------:|
| and	  |  def  |False  |import   |not    | True  |
| as	  | del   |finally| while   |in	    | or    |
| assert  | elif  |  try  | for	    |is	    | pass  |
| break	  | else  | with  | from    | lambda| print |
| class	  | except| yield | global  | raise | None  |
| continue| exec  | if	  | nonlocal| return|       |
 

### পাইথন প্রোগ্রামিং এ ডাটা টাইপ(Data Type):
পাইথন কিন্তু Dynamically typed একটা প্রোগ্রামিং ভাষা। অর্থাৎ,ভেরিয়েবল তৈরী করার সময় তোমাকে এর টাইপ বলে দিতে হবে না । মানে কী 🤨 ? 

এর মানে হচ্ছে, তুমি যখন একটা ভেরিয়েবল Decalare করতেছ, তখন তোমাকে বলে দিতে হবে না যে, তুমি কী ধরণের মান assign করতেছ, পাইথন নিজে নিজেই বুঝে যাবে যে তুমি কী `string` assign করতেছ নাকি `number` নাকি অন্য কিছু। 

কিন্তু প্রোগ্রামিং করার সময় তোমাকে অবশ্যই জানতে হবে যে তুমি কোন ধরণের ডাটার সাথে কাজ করতেছ । তাহলে, প্রোগ্রামিং করার সময় তোমার কোডগুলা অনেক efficient হবে পাশাপাশি তোমার লাইফটাও অনেক সহজ হয়ে যাবে 😊 

নিচে কিছু বেসিক (basic) ডাটাটাইপ সম্পর্কে আলোচনা করা হল, যেগুলা তোমাকে অবশ্যই অবশ্যই জানতে হবে। 
✅ [String or text based Data Type](#string)
✅ [Numeric Data type](#number)
✅ [Boolean or (True-False) Data Type](#bool)
✅ [List Data Type](#list)

#### [String Data Type](#string)
তোমার প্রোগ্রামে বিভিন্ন সময় বিভিন্ন রকমের শব্দ,বাক্য, প্যারাগ্রাফ নিয়ে কাজ করতে হতে পারে। তো এই ক্ষেত্রে তোমাকে এই string ডাটা টাইপ ব্যাবহার করতে হবে। তো পাইথনে তুমি দুইভাবে string টাইপের ভেরিয়েবল ব্যাবহার করতে পার। সিংগেল কোটেশন(Single Quote)[`''`] অথবা ডাবল কোটেশন(Double qutation)[`""`]. নিচের উদাহরণ দেখ👇🏼
```python
variabl1 = 'Ami thik aci'
variabl2 = "Amio thik aci:)"
```
উপরের দুইটা ভেরিয়েবলই ঠিক আছে। কিন্তু তুমি যখন একটা paragraph লিখতে যাবে, তখন কিন্তু তুমি উপরের নিয়মে লিখতে পারবে না। অর্থাৎ single quote বা double quote দিয়ে যখন তুমি কোন string বানাবা , তখন যদি তুমি নতুন লাইনে চলে আসতে চাও তাহলে তুমি একটা এরর(error) খাবা 😥। তাহলে কী করতে হবে 🤔? তাহলে, তুমি যদি পাইথনে এমন একটা স্ট্রিং বানাইতে চাও যা কিনা multiline এর হতে পারে বা একটা paragraph হতে পারে তখন তোমাকে নিচের মত করে string declare করতে হবে 👇🏼
```python
gorur_rocona = """Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua."""
```

#### [Numeric Data Type](#number)
তোমাকে বিভিন্ন সময় বিভিন্ন রকম নাম্বার নিয়ে কাজ করতে হতে পারে। বিভিন্ন রকম নাম্বার বলতে `float`(দশমিক) নাম্বার, `integer`(পূর্ণসংখ্যা)। তো পাইথনে আসলে তিন ধরণের নাম্বার আছে। 
* int (Integer বা পূর্ণসংখ্যা)
* float (Floating point number বা দশমিক সংখ্যা)
* Complex (Complex বা জটিল সংখ্যা)
নাম্বার পজিটিভ বা নেগেটিভ হতে পারবে। নিচে কয়েকটি উদাহরণ দেয়া হল 👇🏼
```python
age     = 18         # Integer Number
height  = 5.6        # Float Number
complex = -87.7e100  # Complex Number
```

#### [Boolean Data Type](#bool)
ধর কোন একটা ঘটনা ঘটছে । তো, তোমাকে আমি বললাম যে তুমি শুধু বল যে ঘটনাটা আসলে ঘটছে কী না । তো তুমি একটা variable এ এই মান টা কিভাবে রাখবে ? নিচে দেখে ফেল 👇🏼
```python
ghotona_ghotce = True  # এইখানে তুমি True অথবা False লিখতে পার 
```
তো এই হচ্ছে boolean. তুমি একটা ভেরিয়বলে `True` or `False` রাখতে পারতেছ। 


#### [List Data Type](#list)
এখন তুমি তো `string` বা `number` ডাটা টাইপ নিয়ে কিভাবে কাজ করতে হয় শিখে ফেলছ। তাই না ? আচ্ছা, এখন যদি আমি তোমাকে বলি তোমার বেশ কয়েকজনের বন্ধুর নামের একটা লিস্ট বানিয়ে ফেল । তখন তুমি কই করবে ? তো প্রথমেই চিন্তা কর যে, একেকটা নাম কিন্তু একেকটা `string` । এখন এরকম অনেকগুলো string নিয়েই আমাদের একটা লিস্ট বানিয়ে ফেলতে হবে। নিচে দেখ 👇🏼
```python
friends = ['Rakib', 'Sakib', 'Wakib'] 
```
তাহলে, অনেক গুলো item নিয়ে একটা লিস্ট হয়ে থাকে । তুমি উপরের লিস্টটাতে যেকোন রকমের value ই রাখতে পারবে। সেটা হতে পারে কোন নাম্বারের লিস্ট বা স্ট্রিং এর লিস্ট । যেমন তোমাকে যদি বলা হয় একটা নাম্বারের লিস্ট বানিয়ে ফেল। তুমি কিন্তু পারবে । কীভাবে ? `[1,2,3,4]`

তো আচ্ছা, এই যে লিস্টটা আছে । এর প্রত্যেকটি item কে বলা হয় একেকটা `element` বা উপাদান । তো, তোমাকে আমি যদি বলি `Sakib` নামের string টা তুমি আমাকে দাও, অথবা শুধুমাত্র ঐ string টাকে অন্য একটা variable এ রেখে দাও। এই কাজটা করার আগে একটা জিনিস জেনে রাখ, পাইথনে কিন্তু list কিন্তু 0 index based. মানে হচ্ছে, 0 তম index এ আছে Rakib, 1 তম index এ আছে Sakib আর 3 তম index এ আছে Wakib. বুঝছ, এইভাবেই চলতে থাকবে। মানে তুমি দেখেতেছ যে একটা element ১০০ তম জায়গায় আছে, তাহলে ঐ element টাকে অ্যাক্সেস করতে হলে তোমাকে কিন্তু ৯৯ তম index এ access করতে হবে। 

নিচের উদাহরণ টা দেখ 👇🏼
```python
friends   = ['Rakib', 'Sakib', 'Wakib'] 
ami_sakib = friends[1]      # এর মান হল Rakib
ami_rakib = friends[0]      # এর মান হল Sakib
```


### Conclusion
এই ব্লগে আমরা পাইথনের বেসিক কিছু ডাটা টাইপ এবং ভেরিয়েবল নিয়ে কিভাবে কাজ করতে হয় , এগুলা শিখছি। এর পরবর্তি ব্লগে আমরা String নিয়ে বিস্তারিত ভাবে জানতে পারব 🤟🏼