ট্র্যাক
/
Python
Python
/
অনুশীলনী
/
টিসবেরি গুপ্তধন সন্ধান
টিসবেরি গুপ্তধন সন্ধান

টিসবেরি গুপ্তধন সন্ধান

লার্নিং অনুশীলনী

ভূমিকা

Python-এ একটি tuple হলো ক্রমে সাজানো আইটেমের একটি অপরিবর্তনীয় কালেকশন। বেশিরভাগ কালেকশনের মতোই tuples যেকোনো (বা একাধিক) ডেটা টাইপ ধারণ করতে পারে, এমনকি অন্য tuples-ও। টিউপল সব সাধারণ সিকোয়েন্স অপারেশন সমর্থন করে, কিন্তু পরিবর্তনযোগ্য সিকোয়েন্স অপারেশন সমর্থন করে না।

for item in <tuple> গঠনটি ব্যবহার করে একটি টিউপলের এলিমেন্টগুলোর উপর ইটারেশন করা যায়। এলিমেন্টের ইনডেক্স আর মান দুটোই দরকার হলে for index, item in enumerate(<tuple>) ব্যবহার করা যায়। যেকোনো সিকোয়েন্সের মতোই, tuples-এর ভেতরের এলিমেন্টগুলো ব্র্যাকেট নোটেশন দিয়ে অ্যাক্সেস করা যায়, বাম দিক থেকে 0-based index সংখ্যা বা ডান দিক থেকে -1-based index সংখ্যা ব্যবহার করে। এছাড়াও স্লাইস নোটেশন (<tuple>[<start>:<stop>:<step>]) ব্যবহার করে টিউপল সম্পূর্ণ বা আংশিক কপি করা যায়।

টিউপল তৈরি করা

tuple(<iterable>) ক্লাস কনস্ট্রাক্টর অথবা tuple লিটারাল ডিক্লারেশন, দুই পদ্ধতিতেই টিউপল তৈরি করা যায়।

tuple() কনস্ট্রাক্টর খালি অবস্থায় বা একটি ইটারেবল দিয়ে ব্যবহার করা:

>>> no_elements = tuple()
()

# The constructor *requires* an iterable, so single elements must be passed in a list or another tuple.
>>> one_element = tuple([16])
(16,)

স্ট্রিং ইটারেবল, তাই tuple() কনস্ট্রাক্টরে একটি একক str আর্গুমেন্ট হিসেবে দিলে চমকে দেওয়ার মতো ফলাফল আসতে পারে:

# String elements (characters) are iterated through and added to the tuple
>>> multiple_elements_string = tuple("Timbuktu")
('T', 'i', 'm', 'b', 'u', 'k', 't', 'u')

একক ইটারেবলের এলিমেন্টগুলো একে একে যোগ হয়:

>>> multiple_elements_list = tuple(["Parrot", "Bird", 334782])
("Parrot", "Bird", 334782)

>>> multiple_elements_set = tuple({2, 3, 5, 7, 11})
(2,3,5,7,11)
একটি টিউপলকে লিটারাল হিসেবে ডিক্লার করা:

যেহেতু tuple(<iterable>) কনস্ট্রাক্টর আর্গুমেন্ট হিসেবে শুধু ইটারেবল (বা কিছুই না) নেয়, তাই লিটারাল পদ্ধতিতে এক-উপাদানের টিউপল তৈরি করা অনেক সহজ।

>>> no_elements = ()
()

>>> one_element = ("Guava",)
("Guava",)

অন্য tuples-সহ নেস্টেড ডেটা স্ট্রাকচারও tuple এলিমেন্ট হিসেবে যোগ করা যায়:

>>> nested_data_structures = ({"fish": "gold", "monkey": "brown", "parrot" : "grey"}, ("fish", "mammal", "bird"))
({"fish": "gold", "monkey": "brown", "parrot" : "grey"}, ("fish", "mammal", "bird"))

>>> nested_data_structures_1 = (["fish", "gold", "monkey", "brown", "parrot", "grey"], ("fish", "mammal", "bird"))
(["fish", "gold", "monkey", "brown", "parrot", "grey"], ("fish", "mammal", "bird"))

টিউপল কনক্যাটেনেশন

প্লাস + অপারেটর ব্যবহার করে টিউপল কনক্যাটেনেট করা যায়, যা প্রতিটি tuple আনপ্যাক করে একটি নতুন সম্মিলিত tuple তৈরি করে।

>>> new_via_concatenate = ("George", 5) + ("cat", "Tabby")
("George", 5, "cat", "Tabby")

#likewise, using the multiplication operator * is the equivalent of using + n times
>>> first_group = ("cat", "dog", "elephant")

>>> multiplied_group = first_group * 3
('cat', 'dog', 'elephant', 'cat', 'dog', 'elephant', 'cat', 'dog', 'elephant')

টিউপলের ভেতরের এলিমেন্ট অ্যাক্সেস করা

বাম দিক থেকে 0-based index সংখ্যা বা ডান দিক থেকে -1-based index সংখ্যা ব্যবহার করে ব্র্যাকেট নোটেশন দিয়ে একটি tuple-এর ভেতরের এলিমেন্টগুলো অ্যাক্সেস করা যায়।

student_info = ("Alyssa", "grade 3", "female", 8 )

#gender is at index 2 or index -2
>>> student_gender = student_info[2]
'female'

>>> student_gender = student_info[-2]
'female'

#name is at index 0 or index -4
>>> student_name = student_info[0]
Alyssa

>>> student_name = student_info[-4]
Alyssa

টিউপলের এলিমেন্টগুলোর উপর ইটারেশন করা

for item in <tuple> সিনট্যাক্স ব্যবহার করে একটি লুপে tuple-এর ভেতরের এলিমেন্টগুলোর উপর ইটারেশন করা যায়। ইনডেক্স আর মান দুটোই দরকার হলে for index, item in enumerate(<tuple>) ব্যবহার করা যায়।

>>> student_info = ("Alyssa", "grade 3", "female", 8 )
>>> for item in student_info:
...   print(item)

...
Alyssa
grade 3
female
8

>>> for index, item in enumerate(student_info):
...  print("Index is: " + str(index) + ", value is: " + str(item) +".")

...
Index is: 0, value is: Alyssa.
Index is: 1, value is: grade 3.
Index is: 2, value is: female.
Index is: 3, value is: 8.

একটি টিউপলে সদস্যতা যাচাই করা

একটি tuple-এ সদস্যতা যাচাই করতে in অপারেটর ব্যবহার করা যায়।

>>> multiple_elements_list = tuple(["Parrot", "Bird", 334782])
("Parrot", "Bird", 334782)

>>> "Parrot" in multiple_elements_list
True

নির্দেশনা

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


Azara-র তালিকা Rui-র তালিকা
গুপ্তধন কোঅর্ডিনেট
Amethyst Octopus 1F
Angry Monkey Figurine 5B
Antique Glass Fishnet Float 3D
Brass Spyglass 4B
Carved Wooden Elephant 8C
Crystal Crab 6A
Glass Starfish 6D
Model Ship in Large Bottle 8A
Pirate Flag 7F
Robot Parrot 1C
Scrimshawed Whale Tooth 2A
Silver Seahorse 4E
Vintage Pirate Hat 7E
স্থানের নাম কোঅর্ডিনেট কোয়াড্রেন্ট
Seaside Cottages ("1", "C") Blue
Aqua Lagoon (Island of Mystery) ("1", "F") Yellow
Deserted Docks ("2", "A") Blue
Spiky Rocks ("3", "D") Yellow
Abandoned Lighthouse ("4", "B") Blue
Hidden Spring (Island of Mystery) ("4", "E") Yellow
Stormy Breakwater ("5", "B") Purple
Old Schooner ("6", "A") Purple
Tangled Seaweed Patch ("6", "D") Orange
Quiet Inlet (Island of Mystery) ("7", "E") Orange
Windswept Hilltop (Island of Mystery) ("7", "F") Orange
Harbor Managers Office ("8", "A") Purple
Foggy Seacave ("8", "C") Purple

কিন্তু সবকিছু একটু অগোছালো: Azara-র কোঅর্ডিনেটগুলো Rui-র থেকে আলাদা ফরম্যাটে ও আলাদাভাবে সাজানো বলে মনে হচ্ছে, আর কোন গুপ্তধন কোন স্থানের সাথে যায় তা বের করার জন্য তাদের বারবার এক তালিকা থেকে অন্য তালিকায় তাকাতে হচ্ছে। তারা দুজনেই নতুন নতুন পাইথন-অনুরাগী, তাই তাদের খোঁজের তথ্যগুলো আরও ভালোভাবে গুছিয়ে রাখার জন্য একটি ছোট প্রোগ্রাম (আসলে কয়েকটি ফাংশনের একটি সেট) লিখতে তারা আপনার কাছে সাহায্য চাইতে এসেছে।

1. কোঅর্ডিনেট বের করা

get_coordinate() ফাংশনটি লিখুন, যা Azara-র তালিকা থেকে একটি (treasure, coordinate) জোড়া নেয় এবং কেবল বের করা মানচিত্রের কোঅর্ডিনেট রিটার্ন করে।

>>> get_coordinate(('Scrimshawed Whale Tooth', '2A'))
2A

2. কোঅর্ডিনেট ফরম্যাট করা

convert_coordinate() ফাংশনটি লিখুন, যা "2A" ফরম্যাটে একটি কোঅর্ডিনেট নেয় এবং ("2", "A") ফরম্যাটে একটি টাপল রিটার্ন করে।

>>> convert_coordinate("2A")
("2", "A")

3. কোঅর্ডিনেট মেলানো

compare_records() ফাংশনটি লিখুন, যা একটি (treasure, coordinate) জোড়া এবং একটি (location, coordinate, quadrant) রেকর্ড নেয় এবং দুটির কোঅর্ডিনেট তুলনা করে। কোঅর্ডিনেটগুলো "মিলে গেলে" True রিটার্ন করুন, আর না মিললে False রিটার্ন করুন। সঠিকভাবে তুলনা করার জন্য প্রয়োজন অনুসারে কোঅর্ডিনেটগুলো আবার ফরম্যাট করুন।

>>> compare_records(('Brass Spyglass', '4B'), ('Seaside Cottages', ('1', 'C'), 'blue'))
False

>>> compare_records(('Model Ship in Large Bottle', '8A'), ('Harbor Managers Office', ('8', 'A'), 'purple'))
True

4. মিলে যাওয়া রেকর্ড একত্র করা

create_record() ফাংশনটি লিখুন, যা Azara-র তালিকা থেকে একটি (treasure, coordinate) জোড়া এবং Rui-র তালিকা থেকে একটি (location, coordinate, quadrant) রেকর্ড নেয় এবং কোঅর্ডিনেটগুলো মিলে গেলে (treasure, coordinate, location, coordinate, quadrant) রিটার্ন করে। কোঅর্ডিনেটগুলো না মিললে স্ট্রিং "not a match" রিটার্ন করুন। সঠিকভাবে তুলনা করার জন্য প্রয়োজন অনুসারে কোঅর্ডিনেটটি আবার ফরম্যাট করুন।

>>> create_record(('Brass Spyglass', '4B'), ('Abandoned Lighthouse', ('4', 'B'), 'Blue'))
('Brass Spyglass', '4B', 'Abandoned Lighthouse', ('4', 'B'), 'Blue')

>>> create_record(('Brass Spyglass', '4B'), ('Seaside Cottages', ('1', 'C'), 'blue'))
"not a match"

5. "পরিষ্কার করা" ও সব রেকর্ডের একটি রিপোর্ট তৈরি করা

Azara আর Rui-র একত্র করা রেকর্ডগুলো এমনভাবে পরিষ্কার করুন যাতে প্রতিটি রেকর্ডে কেবল এক সেট কোঅর্ডিনেট থাকে। একটা রিপোর্ট তৈরি করুন, যাতে তারা মানচিত্রে বসাতে যা যা লাগবে তার একটি তালিকা একসাথে দেখতে পারে। clean_up() ফাংশনটি লিখুন, যা একটি টাপলের টাপল নেয় (দুটি তালিকার সবকিছু), বাইরের টাপলের মধ্যে লুপ করে প্রতিটি ভেতরের টাপল থেকে অবাঞ্ছিত কোঅর্ডিনেট বাদ দেয় এবং প্রতিটিকে একটি 'রিপোর্ট'-এ যোগ করে। 'রিপোর্ট'টি এমনভাবে ফরম্যাট করে রিটার্ন করুন যাতে প্রতিটি লাইনে একটি করে পরিষ্কার করা রেকর্ড থাকে।

>>> clean_up((('Brass Spyglass', '4B', 'Abandoned Lighthouse', ('4', 'B'), 'Blue'), ('Vintage Pirate Hat', '7E', 'Quiet Inlet (Island of Mystery)', ('7', 'E'), 'Orange'), ('Crystal Crab', '6A', 'Old Schooner', ('6', 'A'), 'Purple')))

"""
('Brass Spyglass', 'Abandoned Lighthouse', ('4', 'B'), 'Blue')\n
('Vintage Pirate Hat', 'Quiet Inlet (Island of Mystery)', ('7', 'E'), 'Orange')\n
('Crystal Crab', 'Old Schooner', ('6', 'A'), 'Purple')\n
"""
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Python Exercism

টিসবেরি গুপ্তধন সন্ধান শুরু করতে প্রস্তুত?

Exercism-এ সাইন আপ করুন, Python ট্র্যাকের 17টি কনসেপ্ট146টি অনুশীলনী আর সত্যিকারের মানুষের মেন্টরিং দিয়ে শিখুন ও দক্ষ হয়ে উঠুন, সম্পূর্ণ বিনামূল্যে।