সাধারণ কিছু অপারেশন

পাইথনের কনসোলে সহজেই ম্যাথেম্যাটিক্যাল ক্যালকুলেশন করা যায়। তাই আবার খুলে ফেলুন পাইথন ইন্টারপ্রেটার। অর্থাৎ, নিচের যেকোনো একটিঃ
১) পাইথন ইন্সটলেশনের সাথে আশা IDLE ২) লিনাক্স বা ম্যাক হলে Terminal ওপেন করুন এবং টাইপ করুন python3 ৩) উইন্ডোজ হলে Command Prompt চালু করুন এবং টাইপ করুন python
কনসোলে নিচের মত ম্যাথেম্যাটিক্যাল কমান্ড লিখে সহজেই সেগুলোর রেজাল্ট পাওয়া যায় –
				
					>>> 2 + 6
8
>>> 5 + 4 - 3
6
				
			

যোগ বিয়োগের মতই গুন ভাগের কাজও এখানে সহজেই করা যায়। ব্রাকেট ব্যবহার করে নির্ধারণ করে দেয়া যায় যে, কোন পার্ট টুকুর অপারেশন আগে করা হবে।

				
					>>> 2 * (2 + 2)
8
>>> 20/2
10.0
				
			

একটি সিঙ্গেল / ব্যবহার করে ভাগ করলে রেজাল্ট আসে float টাইপের ডেসিম্যাল।

				
					>>> -7 + 2
-5
				
			
নাম্বারের আগে মাইনাস (-) সাইন দিয়ে নেগেটিভ নাম্বার নির্ধারণ করে দেয়া হয়।
সাধারণ গণিতের মতই পাইথনে কোন সংখ্যাকে শূন্য দিয়ে ভাগ করতে গেলে এরর আসবে,
				
					>>> 44/0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
				
			
Float
 
যে নাম্বার গুলো Integer টাইপের নয় সেগুলোকে পাইথনে রিপ্রেজেন্ট করার জন্য float ব্যবহার করা হয়। যেমনঃ 1.0, -5.15 ইত্যাদি। যেকোনো সংখ্যার মধ্যে একটি দশমিক চিহ্ন ব্যবহার করা মানেই হল সেটি একটি float টাইপের ডাটা হয়ে যায়। অথবা পাইথনে যেকোনো দুটি ইন্টিজার টাইপের সংখ্যাকে ভাগ করলেই একটি float টাইপের রেজাল্ট পাওয়া যায়। যেমন,
				
					>>> 10/5
2.0
				
			

একটা কথা মনে রাখা জরুরি – মানুষের মত কম্পিউটারও শতভাগ সঠিকভাবে float টাইপের ডাটা স্টোর করতে পারে না। যেমন 1/3 এর ফলাফল হচ্ছে 0.333333333 (চলতেই থাকে)। এরকম অবস্থা কিছু অনাকাঙ্ক্ষিত ত্রুটির কারণ হয়ে দাঁড়াতে পারে।

				
					>>> 8 / 2
4.0
>>> 6 * 7.0
42.0
>>> 4 + 1.65
5.65
				
			

আরও কিছু নিউমেরিক অপারেশন

যোগ, বিয়োগ, গুন ভাগ বাদেও পাইথনে এক্সপনেন্সিয়েশন এর সাপোর্ট আছে যাকে আমরা একটি সংখ্যার উপর আরেকটা সংখ্যার পাওয়ার বলে থাকি। দুটো ** চিহ্ন দিয়ে এই অপারেশন করা হয়। যেমন –

				
					>>> 2 ** 3
8
>>> 3 ** 3
27
				
			

শুধুমাত্র ভাগফল (quotient) নির্ণয়ের জন্য floor division এবং ভাগশেষ নির্ণয়ের জন্য modulo operator ব্যবহার করা হয়। দুটো ফরওয়ার্ড স্ল্যাস // ব্যবহার করে floor division করা হয় আর % সিম্বল দিয়ে modulo operator এর কাজ করা হয়। নিচের উদাহরণটি দেখি –

				
					>>> 10 // 3
3
>>> 10 % 3
1
				
			

এখানে ৩ দিয়ে ১০ কে ভাগ করলে পূর্ণ ভাগফল আসে ৩ এবং ১০ কে ৩ দিয়ে ভাগ করলে ভাগশেষ থাকে ১

স্ট্রিং
 
পাইথনে খুবই গুরুত্বপূর্ণ ডেটা টাইপ হলো স্ট্রিং । একগুচ্ছ ক্যারেক্টার বা কিছু ওয়ার্ডের সিকুয়েন্সকে সাধারণত স্ট্রিং বলা হয়ে থাকে। পাইথনে যে কোন সেনটেন্সকেই স্ট্রিং হিসেবে ব্যবহার করা যায় সিঙ্গেল(‘ ‘), ডাবল(” “) কিংবা ট্রিপল(“”” “””) কোটেশন এর মাধ্যমে। আমাদের পাইথন কনসোলে যদি নিচের মত করে বাক্য লিখে এন্টার চাপি তাহলে আউটপুটে সেই বাক্যকে দেখতে পারবো।
				
					>>> "We love python!"
'We love python!'
>>> 'The most popular general purpose programming language'
'The most popular general purpose programming language'
				
			
লক্ষণীয়, ইনপুট দেয়ার সময় ডাবল বা সিঙ্গেল কোটেশন যাই ব্যবহার করা হোক না কেন, আউটপুটের সময় সিঙ্গেল কোট দিয়ে সেই স্ট্রিং কে দেখায়।
কিছু ক্যারেক্টারকে সরাসরি একটি স্ট্রিং এর মধ্যে ব্যবহার করা যায় না। যেমন, ডাবল কোট দিয়ে নির্দেশ করা একটি স্ট্রিং তথা বাক্যের মধ্যে ডাবল কোট থাকতে পারে না। এতে করে পাইথন এরর দিবে। এক্ষেত্রে এরকম ক্যারেক্টার গুলোর সামনে একটি ব্যাকস্ল্যাস (\) চিহ্ন দিয়ে এস্কেপ করা হয়ে থাকে। যেমন
				
					>>> 'Brian\'s mother: He\'s not the Messiah. He\'s a very naughty boy!'
'Brian's mother: He's not the Messiah. He's a very naughty boy!'
				
			
নিউ লাইন ক্যারেক্টার (\n), ব্যাকস্ল্যাস ক্যারেক্টার (\), ট্যাব, ইউনিকোড ক্যারেক্টার – এদেরকেও এস্কেপ করে স্ট্রিং এর মধ্যে ব্যবহার করতে হয়।
পাইথনে নিউলাইন ক্যারেক্টারকে ম্যানুয়ালি লেখার দরকার পরে না যদি একাধিক লাইন সম্বলিত সেই স্ট্রিং বা বাক্যকে তিনটি করে কোটেশন এর মধ্যে ডিফাইন করা হয়। নিচের উদাহরণটি দেখি,
				
					>>> """Me: Hi, there!
... She: Yes, please!"""
'Me: Hi, there!\nShe: Yes, please!'
>>>
				
			
উপরে, দুই লাইন ওয়ালা একটি স্ট্রিংকে ইনপুট হিসেবে দিয়েছি এবং আউটপুটে দেখা যাচ্ছে সে স্ট্রিং এর মধ্যে যেখানে নতুন লাইন দরকার সেখানে পাইথন স্বয়ংক্রিয় ভাবে \n ক্যারেক্টার বসিয়ে দিয়েছে।
স্পেশাল ক্যারেক্টার এবং এস্কেইপ সিকুয়েন্স কিছু প্রচলিত এস্কেইপ সিকুয়েন্স নিচে দেওয়া হলো –
 
সিকুয়েন্স
পরিচিতি
\\
একটা ব্যাকস্ল্যাশ
\’
সিঙ্গল কোট (‘)
\”
ডাবল কোট (“)
\a
বেল
\b
ব্যাকস্পেইস
\f
ফর্মফিড
\n
লাইন ব্রেক
\N{name}
ইউনিকোড ক্যারেক্টার এর নাম
\r ASCII
ক্যারিজ রিটার্ন (ম্যাক ওস এক্স এ নিউ লাইন ক্যারেক্টার)
\t
ট্যাব
\uxxxx
১৬ বিট হেক্সাডেসিম্যাল ভ্যালু সম্বলিত ইউনিকোড ক্যারেক্টার
\Uxxxxxxxx
৩২ বিট হেক্সাডেসিম্যাল ভ্যালু বিশিষ্ট ইউনিকোড ক্যারেক্টার
\v
ভার্টিক্যাল ট্যাব
\ooo
`ooo` অক্টাল ভ্যালু বিশিষ্ট ক্যারেক্টার
\xhh
`hh` হেক্সাডেসিম্যাল ভ্যালুওয়ালা ক্যারেক্টার

(এই টেবিল টি জেড শ এর লার্ন পাইথন দ্যা হার্ড ওয়ে বইটি থেকে অনুবাদকৃত)

ব্যাসিক ইনপুট আউটপুট

পাইথনে ডাটা ইনপুট এবং আউটপুট এর জন্য আমরা স্পেশাল কিছু ফাংশন ব্যবহার করে থাকি। ইনপুট এবং আউটপুট এর বেসিক ফাংশন গুলো হল :

				
					input()   
print()
				
			
ইনপুট ফাংশন input()
এই ফাংশনকে আমরা সাধারণত ইউজার এর কাছ থেকে ইনপুট নেয়ার জন্য ব্যবহার করে থাকি। উদাহরণ দিলে ব্যাপারটা আরো পরিষ্কার হবে আশা করি।
 
				
					>>> input("Give me your country name: ")
Give me your country name: Bangladesh
'Bangladesh'
				
			
এ ক্ষেত্রে পাইথন ইন্টারপ্রেটার যখন কোডটা এক্সিকিউট করবে তখন ইন্টারপ্রেটার ইউজার এর ইনপুট এর জন্য অপেক্ষা করবে এবং ততক্ষণ পর্যন্ত ইনপুট এর ডাটা গ্রহণ করবে যতক্ষণ না ইউজার Enter বাটন প্রেস করে অথবা ইনপুটে আরেকটি নিউলাইন ক্যারেক্টার আসে। যদি কনসোলে উপরের স্টেটমেন্টটি এক্সিকিউট করা হয় তাহলে এন্টার চাপলে নিচের লাইনে 'Bangladesh' আউটপুট হিসেবে আসছে যা ইউজারের কাছ থেকে ইনপুট নেয়া হয়েছিল।
আউটপুট ফাংশন print()
print() ফাংশন কেবলমাত্র তাই আউটপুট দেয় যা এর আর্গুমেন্ট হিসেবে দেয়া হয়। কয়েকটি উদাহরণ দেখলে আউটপুট এর ব্যাপারটি আরো সহজ হবে।
				
					>>> print('Hello World!')
Hello World!
				
			

উপরের প্রোগ্রামের আউটপুট হবে যথারীতি Hello World!

				
					>>> print(5+5)
10
				
			
				
					>>> print('Name: Bangladeash\nPopulation: 156.6M')
Name: Bangladeash
Population: 156.6M
				
			
স্ট্রিং অপারেশন
 
কনক্যাটেনেশন (Concatenation)
ইন্টিজার বা ফ্লটের মত, স্ট্রিংকেও যোগ করা যায় যাকে কনক্যাটেনেশন বলা হয়।
				
					>>> "Spam" + 'eggs'
'Spameggs'
				
			
				
					>>> print("First string" + ", " + "second string")
First string, second string
				
			

তাই বলে কোন নাম্বারের সাথে স্ট্রিং যোগ করা যাবে না,

				
					>>> "2" + "2"
'22'
>>> 1 + '2' + 3 + '4'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
				
			
রিপিটেশন (Repetition)
যোগের মত স্ট্রিং নিয়ে গুনও করা যায়, একে রিপিটেশন বলে। তবে এই গুন হতে হবে একটি স্ট্রিং এর সাথে একটি ইন্টিজার নাম্বারের। স্ট্রিং এবং স্ট্রিং এর মধ্যে নয় অথবা ফ্লট টাইপের ডাটার সাথে নয়।
উদাহরণ,
				
					>>> print("spam" * 3)
spamspamspam

>>> 4 * '2'
'2222'

>>> '17' * '87'
TypeError: can't multiply sequence by non-int of type 'str'

>>> 'pythonisfun' * 7.0
TypeError: can't multiply sequence by non-int of type 'float'
				
			

স্ট্রিং ফরম্যাটিং নন স্ট্রিং ডাটার সাথে স্ট্রিং টাইপের ডাটাকে যুক্ত করে সুন্দর স্ট্রিং আউটপুট তৈরি করতে format মেথড ব্যবহার করা হয়। এর মাধ্যমে একটি স্ট্রিং এর মধ্যে থাকা কিছু আর্গুমেন্টকে রিপ্লেস বা সাবস্টিটিউট করা যায়। format মেথডের মধ্যের প্রত্যেকটি আর্গুমেন্ট দিয়ে এর সামনে থাকা স্ট্রিং এর মধ্যের প্লেস হোল্ডার গুলোকে রিপ্লেস করা হয়। প্লেস হোল্ডার গুলো {} এর সাথে ইনডেক্স বা নাম ব্যবহার করে ডিফাইন করা হয়। একটি উদাহরণ দেখলেই বিষয়টি পরিষ্কার হয়ে যাবে –

				
					msg = "My self score on PHP: {0}, Python: {1}, Java: {2}, Swift: {3}". format(6, 6.5, 5, 6)

print(msg)
				
			

আউটপুট,

				
					My self score on PHP: 6, Python: 6.5, Java: 5, Swift: 6
				
			

ফরম্যাটিংয়ের সময় ইন্ডেক্সগুলো 0, 1, 2…. এইভাবে সিরিয়ালি দিতে হবে ব্যাপারটা কিন্তু এমন না। ইচ্ছে করলেই এগুলো আগে পরে কিংবা একাধিকবার করেও দেয়া যায়।

				
					>>> '{2}, {1}, {0}'.format('a', 'b', 'c')
'c, b, a'
>>> '{0}{1}{0}'.format('abra', 'cad')
'abracadabra'
				
			

format মেথডের মধ্যে নাম ওয়ালা আর্গুমেন্ট পাঠিয়ে এবং স্ট্রিং এর মধ্যের প্লেস হোল্ডার গুলোতে সেই নামে সেগুলোকে ব্যবহার করেও কাজ করা যায় –

				
					message = "If x = {x} and y = {y}, then x+y = {z}".format(x = 20, y = 300, z = 20+300)

print(message)
				
			

আউটপুট,

				
					If x = 20 and y = 300, then x+y = 320
				
			

কিছু গুরুত্বপূর্ণ ফাংশন নিচে স্ট্রিং নিয়ে কাজ করার জন্য বেশ কিছু গুরুত্বপূর্ণ এবং উপকারী ফাংশনের উদাহরণ দেয়া হল –

				
					print(", ".join(["apple", "orange", "pineapple"]))
#prints "apple, orange, pineapple"
				
			

join মেথড একটি স্ট্রিং ওয়ালা লিস্টের (লিস্ট নিয়ে পরবর্তীতে আলোচনা করা হয়েছে) স্ট্রিং গুলোকে একত্রিত করে কিন্তু মাঝখানে নির্ধারিত একটি সেপারেটর ব্যবহার করে। যেমন উপরের উদাহরণে, apple, orange, pineapple এই তিনটি ভ্যালুকে একত্রিত করা হয়েছে কিন্তু তাদের মধ্যে কমা , সেপারেটর ব্যবহার করে।

				
					print("Hello ME".replace("ME", "world"))
#prints "Hello world"
				
			

replace মেথডের মাধ্যমে একটি সাব স্ট্রিং কে খুঁজে সেখানে অন্য কিছু রিপ্লেস করা যায়। যেমন উপরের উদাহরণে – ME রিপ্লেস করে world বসানো হয়েছে।

				
					print("This is a sentence.".startswith("This"))
# prints "True"

print("This is a sentence.".endswith("sentence."))
# prints "True"
				
			

startswith, endswith মেথডের মাধ্যমে কোন একটি ব্যাক্যর শুরু বা শেষ নির্দিষ্ট কোন সাবস্ট্রিং দিয়ে হয়েছে কিনা তা চেক করা যায়।

				
					print("This is a sentence.".upper())
# prints "THIS IS A SENTENCE."

print("AN ALL CAPS SENTENCE".lower())
#prints "an all caps sentence"
				
			

upper() মেথড স্ট্রিংয়ের সবগুলো ক্যারেক্টারকে uppercase এ পরিবর্তিত করে। একইভাবে lower() মেথড ট্রিংয়ের সবগুলো ক্যারেক্টারকে lowercase এ পরিবর্তিত করে।

				
					print("a, e, i, o, u".split(", "))
#prints "['a', 'e', 'i', 'o', 'u']"
				
			

split মেথড হচ্ছে join মেথডের উল্টো। অর্থাৎ একটি বাক্যেকে নির্দিষ্ট কোন সেপারেটর এর সাপেক্ষে ভেঙ্গে একটি লিস্ট তৈরি করা যায় এই মেথডের মাধ্যমে। সেটাই দেখানো হয়েছে উপরের উদাহরণে।