কন্ডিশনাল লজিক

এই অধ্যায়ে আমরা পরিচিত হবো কন্ডিশনাল লজিকের সঙ্গে। এখানে কন্ডিশন হচ্ছে শর্ত। আর কন্ডিশনাল লজিকে এক বা একাধিক শর্ত থাকতে পারে। এক বা একাধিক শর্ত নিয়ে যেই শর্তটি গঠন করা হবে, তার ফলাফল হবে দুই রকম - সত্য (true) বা মিথ্যা (false)। কিছু উদাহরণ দেওয়া যাক।

ধরা যাক, আমি ধানমণ্ডি থেকে রিকশা চড়ে নিউমার্কেট যাবো। আমি রিকশাচালককে ভাড়া জিজ্ঞাসা করায় তিনি বললেন, ভাড়া ৪০ টাকা, একদাম। এখন আমি রিকশায় ওঠার আগে একটি শর্ত পূরণ করতে হবে। সেটি হচ্ছে, আমার কাছে কি কমপক্ষে ৪০ টাকা আছে? এর উত্তর দুই রকম হতে পারে - হ্যাঁ (সত্য) কিংবা না (মিথ্যা)। যদি সত্য হয়, তাহলে আমি রিকশায় উঠবো, মিথ্যা হলে উঠবো না।

আবার ধরা যাক, আমার কয়েকটি বই কেনা প্রয়োজন এবং এর জন্য আমি নীলক্ষেতে (ঢাকার যে এলাকায় অনেক বইয়ের দোকান আছে) গিয়ে বই কেনার সিদ্ধান্ত নিয়েছি। এখন মঙ্গলবার নীলক্ষেতের মার্কেট বন্ধ থাকে। তাই আমি একটি শর্ত দিয়ে সিদ্ধান্ত নেবো যে, আজকে বই কিনতে যাবো কী যাবো না। শর্তটি হচ্ছে, “আজকে মঙ্গলবার”। এটি যদি সত্য হয়, তাহলে আমি যাবো না, মিথ্যা হলে যাবো। আবার ধরা যাক, নীলক্ষেতের দোকানগুলো খোলা থাকে সকাল ১০টা থেকে রাত ৮টা পর্যন্ত। তাহলে আমাকে অবশ্যই আরেকটি শর্ত পূরণ করতে হবে। “আমি রাত ৮টার মধ্যে নীলক্ষেতে পৌঁছতে পারবো” - এই শর্ত সত্য হলে আমি যাবো, মিথ্যা হলে আমি যাবো না। এখন আমরা দেখতে পাচ্ছি এখানে মোট দুইটি শর্ত আছে -

  • আজকে মঙ্গলবার
  • আমি রাত ৮টার মধ্যে নীলক্ষেতে পৌঁছতে পারবো

    তাহলে আমি যেকোনোদিন বই কেনার কথা চিন্তা করলে চার ধরনের সম্ভাব্য ঘটনা আমাকে চিন্তা করতে হবে :

১) আজকে মঙ্গলবার নয় এবং আমি রাত ৮টার মধ্যো নীলক্ষেতে পৌঁছাতে পারবো না

২) আজকে মঙ্গলবার নয় এবং আমি রাত ৮টার মধ্যো নীলক্ষেতে পৌঁছাতে পারবো

৩) আজকে মঙ্গলবার এবং আমি রাত ৮টার মধ্যো নীলক্ষেতে পৌঁছাতে পারবো না

৪) আজকে মঙ্গলবার এবং আমি রাত ৮টার মধ্যো নীলক্ষেতে পৌঁছাতে পারবো

ওপরের ঘটনাগুলোর মধ্যে কেবল দ্বিতীয় ঘটনাতেই আমি বই কিনতে নীলক্ষেত যাওয়ার সিদ্ধান্ত নেব। অর্থাৎ “আজকে মঙ্গলবার” শর্তটি মিথ্যা ও “আমি রাত ৮টার মধ্যে নীলক্ষেতে পৌঁছতে পারবো” শর্তটি সত্য হলেই কেবল আমি যাবো।

এখন একটি জ্যামিতির উদাহরণে আসা যাক। আমরা জানি, একটি চতুর্ভূজের সবগুলো কোণ প্রতিটি যদি এক সমকোণ হয়, তাহলে সেটি আয়তক্ষেত্র বা বর্গক্ষেত্র হবে। যদি সবগুলো বাহু সমান হয়, তাহলে বর্গক্ষেত্র আর যদি বিপরীত বাহুগুলো সমান হয় (যেহেতু প্রতিটি কোণ এক সমকোণ, তাই সবগুলো বাহু সমান না হলে বিপরীত বাহুগুলো অবশ্যই সমান হবে), তাহলে আয়তক্ষেত্র।তাহলে একটি চতুর্ভূজ বর্গক্ষেত্র কী না, সেটি নির্ভর করে দুইটি শর্তের ওপর :

  • সবগুলো কোণ প্রতিটি এক সমকোণ (90 ডিগ্রী)
  • সবগুলো বাহু সমান দৈর্ঘ্যের

    ওপরের দুইটি শর্তই সত্য হলে চতুর্ভূজটি হবে একটি বর্গক্ষেত্র, প্রথমটি সত্য ও দ্বিতীয়টি মিথ্যা হলে চতুর্ভূজটি হবে আয়তক্ষেত্র।

এখন আমরা ট্রাফিক সিগন্যালের একটি উদাহরণ দিই। সিগন্যালে লাল, হলুদ কিংবা সবুজ বাতি জ্বলে। লাল বা হলুদ বাতি জ্বললে গাড়ি থামবে, সবুজ বাতি জ্বললে গাড়ি চলবে। তাহলে এখানে শর্তটি কেমন হবে? শর্তটি হতে পারে “সবুজ বাতি জ্বালানো আছে”। এটি সত্য কিংবা মিথ্যা হতে পারে। সত্য হলে গাড়ি চলবে, মিথ্যা হলে গাড়ি থামবে। আবার শর্তটি চাইলে আমরা দুইটি শর্ত ব্যবহার করেও লিখতে পারতাম। “লাল বাতি জ্বালানো আছে”, “হলুদ বাতি জ্বালানো আছে” - এই দুইটি শর্তের যেকোনো একটি সত্য হলেই আমরা গাড়ি থামাবো, আর দুইটি শর্তই যদি মিথ্যা হয়, তাহলে গাড়ি চলবে।

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

দ্বিতীয় বিষয় হচ্ছে, একটি শর্তের উল্টো শর্ত তৈরি করার পদ্ধতি, যাকে বলে NOT (নট)। যেমন “সবুজ বাতি জ্বালানো আছে” শর্তটি আমরা উল্টে ফেলতে পারি এভাবে : “সবুজ বাতি জ্বালানো নেই”, এবং একে এভাবেও লেখা যায় : NOT সবুজ বাতি জ্বালানো আছে। “সবুজ বাতি জ্বালানো আছে” যদি সত্য হয়, তাহলে “NOT সবুজ বাতি জ্বালানো আছে” হবে মিথ্যা। আর “সবুজ বাতি জ্বালানো আছে” যদি মিথ্যা হয়, তাহলে “NOT সবুজ বাতি জ্বালানো আছে” হবে সত্য। তেমনি “আজকে মঙ্গলবার” শর্তটি সত্য হলে “NOT আজকে মঙ্গলবার” হবে মিথ্যা। আর “আজকে মঙ্গলবার” শর্তটি মিথ্যা হলে “NOT আজকে মঙ্গলবার” হবে সত্য। তাহলে আমরা বলতে পারি : NOT true হচ্ছে false আর NOT false হচ্ছে true।

আমরা যখন একাধিক শর্ত নিয়ে কাজ করবো, তখন দুইটিই সত্য বা দুইটির যেকোনো একটি সত্য, এমন চিন্তাভাবনা করার প্রয়োজন হয়। তখন আমাদের কাজে লাগবে AND (অ্যান্ড) এবং OR (অর)। AND-এর ক্ষেত্রে যদি তার দুইপাশের (বাম ও ডানপাশের) শর্ত সত্য হয়, তাহলে পুরো শর্তটি সত্য, এর অন্যথা হলে (যেকোনো একটি মিথ্যা কিংবা দুটিই মিথ্যা) পুরো শর্তটি মিথ্যা। যেমন : কোনো চতুর্ভূজ বর্গক্ষেত্র হওয়ার শর্ত হচ্ছে : সবগুলো কোণ প্রতিটি এক সমকোণ (90 ডিগ্রী) AND সবগুলো বাহু সমান দৈর্ঘ্যের। অর্থাৎ, AND এর বামদিকের ও ডানদিকের দুইটি শর্তই সত্য হতে হবে।

OR-এর ক্ষেত্রে, তার দুইপাশের যেকোনো একটি সত্য হলেই পুরো শর্তটি সত্য। কেবল দুইটিই যদি মিথ্যা হয়, তাহলে শর্তটি মিথ্যা। যেমন: ট্রাফিক লাইটের ক্ষেত্রে, লাল বাতি জ্বলছে OR হলুদ বাতি জ্বলছে - এই শর্তটি সত্য হবে যদি লাল বাতি জ্বালানো থাকে, কিংবা হলুদ বাতি জ্বালানো থাকে, কিংবা দুটি বাতিই জ্বালানো থাকে। লাল ও হলুদ দুটি বাতিই যদি জ্বালানো না থাকে, তাহলে শর্তটি মিথ্যা।

ওপরের আলোচনার সারসংক্ষেপ আমরা তৈরি করতে পারি নিচের টেবিল ব্যবহার করে।
এখন আমরা দেখবো, পাইথনে বিভিন্ন কন্ডিশনাল লজিকের ব্যবহার। দুইটি জিনিস সমান কী না, তা পরীক্ষা করার জন্য আমরা == অপারেটর ব্যবহার করতে পারি। ছোট-বড় পরীক্ষার জন্য আছে >, <, >=, <=। আবার অসমান বোঝানের জন্য আছে != চিহ্ন। কোনটা কী কাজ করে, সহজে বোঝার জন্য আমরা কোড লিখে দেখতে পারি :

>>> 2 == 3
False
>>> 3 == 3
True
>>> 2 > 3
False
>>> 2 < 3
True
>>> 2 != 3
True
>>> 3 != 3
False
>>> 2 >= 3
False
>>> 2 <= 3
True
>>>

ওপরে আমি print() ফাংশন ব্যবহার করি নি, কারণ আমি যখন পাইথন ইন্টারপ্রেটার চালু করবো, সেখানে কোনো স্টেটমেন্ট চালালে তার ফলাফল পরের লাইনে আপনাআপনি দেখায়। আর আমি যেমন সরাসরি বিভিন্ন সংখ্যার তুলনা করেছি, সেগুলো ভ্যারিয়েবলে রেখে ভ্যারিয়েবলগুলোর মধ্যেও এই তুলনা করার কাজটি করা যেত।

আবার দুটি স্ট্রিং সমান কী না, সেটিও আমরা পরীক্ষা করতে পারি :

>>> "Bangladesh" == "Bangladesh"
True
>>> "Bangladesh" == "bangladesh"
False

এখন আমরা পরিচিত হবো লিস্ট (list)-এর সঙ্গে। আমরা যখন একাধিক ডেটা একসঙ্গে রাখতে চাই, তখন আমরা লিস্ট ব্যবহার করতে পারি। যেমন 1 থেকে 10 পর্যন্ত সংখ্যাগুলো একসঙ্গে রাখতে চাইলে আমরা একটি লিস্টে রাখবো এভাবে : [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]। লিস্ট শুরু ও শেষ করতে হয় স্কয়ার ব্র্যাকেট (অনেক সময় একে থার্ড ব্র্যাকেটও বলা হয়) দিয়ে। আর স্কয়ার ব্র্যাকেটের মধ্যে প্রতিটি উপাদান রাখা হয় এবং সেগুলো কমা চিহ্ন (,) দিয়ে পৃথক করা হয়।

>>> number_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> print(number_list)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

আমরা চাইলে লিস্টের প্রতিটি উপাদান আলাদাভাবে পেতে পারি। এজন্য আমাদেরকে লিস্টের নাম লিখে তারপর স্কয়ার ব্র্যাকেটের ভেতরে ওই উপাদানের ক্রমিক সংখ্যা লিখতে হবে। এই ক্রমিক সংখ্যাকে প্রোগ্রামিংয়ের ভাষায় বলে ইনডেক্স (index) এবং এটি শুরু হয় 0 থেকে (কোনো কোনো প্রোগ্রামিং ভাষায় 1 থেকেও শুরু হয়)। এখন তাহলে কিছু উদাহরণ দেখে নিই :

>>> number_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> print(number_list)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 
>>> print(number_list[0])
1
>>> print(number_list[1])
2
>>> print(number_list[9])
10
>>> print(number_list[10])
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>>

একটি বিষয় খেয়াল করতে হবে যে, আমাদের লিস্টে যদি দশটি উপাদান থাকে, তাহলে ইনডেক্স থাকবে 0 থেকে 9। তাই আমরা যখন number_list[10] প্রিন্ট করার চেষ্টা করেছি, তখন একটি এরর দিয়ে আমাদেরকে জানিয়ে দেওয়া হয়েছে যে লিস্টের ইনডেক্স রেঞ্জের বাইরে। একটি লিস্টে কতটি উপাদান আছে, সেটি জানার জন্য আমরা len() ফাংশন ব্যবহার করতে পারি। নিচে আমি সার্কভুক্ত দেশগুলোর একটি তালিকা তৈরি করলাম এবং সেখান থেকেও এও বের করলাম যে মোট কয়টি দেশ সার্কের অন্তর্গত :

>>> saarc = ["Bangladesh", "Afghanistan", "Bhutan", "Nepal", "India", "Pakistan", "Sri Lanka"]
>>> print(saarc)
['Bangladesh', 'Afghanistan', 'Bhutan', 'Nepal', 'India', 'Pakistan', 'Sri Lanka']
>>> print(saarc[0])
Bangladesh
>>> print("Number of countries in SAARC:", len(saarc))
Number of countries in SAARC: 7
>>>

এখন কোনো দেশ saarc এর সদস্য, এটি সত্য না মিথ্যা আমরা সহজেই যাচাই করতে পারবো।

>>> "Bangladesh" in saarc
True
>>> "China" in saarc
False
>>> "China" not in saarc
True
>>> "India" not in saarc
False
>>>

তাহলে আমরা দেখলাম, কোনো উপাদান একটি লিস্টে আছে কী নেই, সেটি খুব সহজেই যাচাই করা যায়। ওপরের উদাহরণ না বুঝলে ঠান্ডা মাথায় মনোযোগ দিয়ে বোঝার চেষ্টা করতে হবে, এটি না বুঝে সামনে আগানো ঠিক হবে না।

if স্টেটমেন্ট

আমরা তো শিখলাম কিভাবে বিভিন্ন শর্ত প্রয়োগ করতে হয়, কিভাবে একাধিক শর্ত একসঙ্গে প্রয়োগ করতে হয়। এখন কোড লেখার পালা। আমরা যদি চাই যে, কোনো শর্ত সত্য হলে একটি কাজ হবে, তাহলে আমাদেরকে if ব্যবহার করতে হবে। if ব্যবহার করার নিয়ম বোঝার জন্য আমরা নিচের কোড লিখবো এবং saarc.py নামক ফাইলে সেভ করবো।

saarc = ["Bangladesh", "Afghanistan", "Bhutan", "Nepal", "India", "Pakistan", "Sri Lanka"]

country = input("Enter the name of the country: ")
if country in saarc:
    print(country, "is a member of SAARC")

print("Program terminated")

তাহলে আমরা দেখতে পাচ্ছি, if এর পরে শর্ত লিখতে হয়, তারপরে একটি কোলন চিহ্ন ব্যবহার করতে হয়। আর সেই শর্ত সত্য হলে কী কাজ করা হবে, সেটি লিখতে হয় if এর নিচে একটি tab (কীবোর্ডের বাম দিকে বাটনটি পাওয়া যাবে) দিয়ে। এই কাজটাকে বলে ইনডেনটেশন করা। ঠিকঠাক ইনডেনটেশন করা না হলে পাইথন বুঝতে পারে না যে কী কাজ করতে হবে। ওপরের প্রোগ্রামে if-এর পরে শর্ত সত্য হলে print(country, "is a member of SAARC") স্টেটমেন্টটি কাজ করবে। আর পরের প্রিন্টের সঙ্গে if-এর কোনো সম্পর্ক নেই। এটি if ব্লকের বাইরে। এখন আমরা প্রোগ্রাম রান করে দেখি :

$ python saarc.py 
Enter the name of the country: Bangladesh
Bangladesh is a member of SAARC
Program terminated
$ python saarc.py 
Enter the name of the country: Japan
Program terminated

Bangladesh-এর ক্ষেত্রে প্রিন্ট করলো যে Bangladesh সার্কের সদস্য কিন্তু Japan-এর বেলায় সেটি করল না। কারণ শর্ত মিথ্যা। আর উভয় ক্ষেত্রেই Program terminated প্রিন্ট করলো, কারণ এর সঙ্গে if-এর সম্পর্ক নেই, এটি if ব্লকের বাইরে।

আমাদের কোডে if-এর ভেতরে ইনডেনটেশনের কাজটি না করলে কী হতো? তখন আমরা এরকম এরর পেতাম: IndentationError: expected an indented block। এই পরীক্ষাটি করার কাজ আমি পাঠকের ওপর ছেড়ে দিলাম।

এখন, আমরা Japan-এর বেলায় তেমন কিছু প্রিন্ট করলাম না। কিন্তু আমরা যদি বলে দিতাম যে Japan সার্কের সদস্য নয়, তাহলে ব্যাপারটি একটু ভালো হতো। এজন্য আমরা ব্যবহার করতে পারি else। if-এর শর্ত মিথ্যা হলে else ব্লকের ভেতরে যা করতে বলা হবে, প্রোগ্রাম তা-ই করবে।

saarc = ["Bangladesh", "Afghanistan", "Bhutan", "Nepal", "India", "Pakistan", "Sri Lanka"]

country = input("Enter the name of the country: ")
if country in saarc:
    print(country, "is a member of SAARC")
else:
    print(country, "is not a member of SAARC")

print("Program terminated")

এখন আমরা প্রোগ্রাম রান করলে এরকম আউটপুট পাবো :

$ python saarc.py 
Enter the name of the country: Japan
Japan is not a member of SAARC
Program terminated

কোনো প্রোগ্রামে যদি এরকম থাকে যে একের পর এক বিভিন্ন রকম শর্ত পরীক্ষা করতে হবে, তারজন্য আমরা প্রথম if-এর পরে বাকী শর্তগুলো লেখার জন্য elif ব্যবহার করবো। আমরা এখন একটি প্রোগ্রাম লিখবো যেটি পরীক্ষায় প্রাপ্ত নম্বর থেকে গ্রেড বের করবে, আর সেখানে elif এর ব্যবহার দেখবো।

marks = input("Please enter your marks: ")
marks = int(marks)

if marks >= 80:
    grade = "A+"
elif marks >= 70:
    grade = "A"
elif marks >= 60:
    grade = "A-"
elif marks >= 50:
    grade = "B"
else:
    grade = "F"

print("Your grade is", grade)

এখন প্রোগ্রামটি grade_calculator.py নামক ফাইলে সেভ করে রান করতে হবে। প্রোগ্রামটি ভালোভাবে লক্ষ করলেই if, elif ও else-এর ব্যবহার বুঝতে পারা যাবে। যখনই একটি শর্ত সত্য হবে, তখন কিন্তু আর বাকী elif বা else-এর শর্ত পরীক্ষা হবে না।

অনুশীলনী:

  • ব্যবহারকারীর কাছ থেকে একটি সংখ্যা ইনপুট নিতে হবে, আর সেটি ধনাত্মক না ঋণাত্মক, তা বের করতে হবে।
  • আমরা জানি যেসব সংখ্যা দুই দিয়ে নিঃশেষে বিভাজ্য, তাদেরকে বলে জোড় সংখ্যা, আর তা না হলে বিজোড় সংখ্যা। একটি সংখ্যা জোড় না বিজোড়, তা বের করার প্রোগ্রাম লিখতে হবে। এরজন্য মডুলাস অপারেটর (%) ব্যবহার করতে হবে।

লিপ ইয়ার (Leap Year)

এখন আমরা কোনো বছর লিপ ইয়ার (বাংলায় বলে অধিবর্ষ) কি না সেটি বের করার একটি প্রোগ্রাম লিখবো। কোনো বছর লিপ ইয়ার হলে সেই বছরে ফেব্রুয়ারি মাস হয় 29 দিনে, আর লিপ ইয়ার না হলে হয় 28 দিনে। কোনো সাল 4 দিয়ে নিঃশেষে বিভাজ্য হলে সেটি লিপ ইয়ার হয়, তবে একটি ব্যতিক্রম আছে। সেই সাল যদি আবার 100 দিয়ে নিঃশেষ বিভাজ্য হয়, তাহলে তাকে 400 দিয়েও নিঃশেষে বিভাজ্য হতে হবে, নইলে সেটি লিপ ইয়ার হবে না। তাহলে আমরা লজিক সাজাতে পারি এভাবে :

if year % 4 != 0:
    print("No")
else:
    if year % 100 == 0:
        if year % 400 == 0:
            print("Yes")
        else:
            print("No")
    else:
        print("Yes")

আবার আমরা চাইলে নিচের মতো করেও লজিক সাজাতে পারি।

if year % 400 == 0:
    print("Yes")
elif year % 100 == 0:
    print("No")
elif year % 4 == 0:
    print("Yes")
else:
    print("No")

আমরা এখানে একটু বুদ্ধি খাটিয়েছি। কারণ year যদি 400 দিয়ে নিঃশেষে বিভাজ্য হয়, তাহলে সেটি অবশ্যই লিপ ইয়ার। আর তা না হলে এটি যদি 100 দিয়ে নিঃশেষে বিভাজ্য হয়, তবে এটি লিপ ইয়ার নয়। কারণ এটি 100 দিয়ে নিঃশেষ বিভাজ্য কিন্তু 400 দিয়ে নয় (400 দিয়ে নিঃশেষে বিভাজ্য যদি হতো তাহলে তো প্রথম if ব্লকেই ঢুকে যেত, এখানে আসতো না)। আর যদি 100 দিয়ে বিভাজ্য না হয়, তখন আমরা পরীক্ষা করছি যে year 4 দিয়ে নিঃশেষে বিভাজ্য কী না। যদি হয়, তাহলে এটি অবশ্যই লিপ ইয়ার (কারণ এটি 100 দিয়ে বিভাজ্য নয়, সেটি ইতিমধ্যেই পরীক্ষিত)। আর যদি 4 দিয়ে নিঃশেষে বিভাজ্য না হয়, তাহলে তো আর ওই বছর লিপ ইয়ার নয়।

এখন এই লিপইয়ারের প্রোগ্রাম আমরা আরেকভাবে করবো।

if year % 100 != 0 and year % 4 == 0:
    print("Yes")
elif year % 100 == 0 and year % 400 == 0:
    print("Yes")
else:
    print("No")

আমরা এখানে একাধিক শর্ত একসঙ্গে প্রয়োগ করছি and ব্যবহার করে। প্রোগ্রামটির বিস্তারিত ব্যাখ্যায় আর গেলাম না। বুঝে নেওয়ার দায়িত্ব পাঠকের ওপরই ছেড়ে দিলাম। আশা করি, একটু চিন্তা করলে এবং এখন পর্যন্ত বই ঠিকমতো পড়লে প্রোগ্রামটি বুঝতে সমস্যা হবে না।

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

results matching ""

    No results matching ""