ট্র্যাক
/
Python
Python
/
অনুশীলনী
/
ছোট বোনের শব্দভান্ডার
ছোট বোনের শব্দভান্ডার

ছোট বোনের শব্দভান্ডার

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

ভূমিকা

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

একটি str লিটারাল একক ' বা দ্বৈত " কোটেশন দিয়ে ডিক্লেয়ার করা যায়। প্রয়োজন হলে এস্কেপ \ ক্যারেক্টার ব্যবহার করা যায়।


>>> single_quoted = 'These allow "double quoting" without "escape" characters.'

>>> double_quoted = "These allow embedded 'single quoting', so you don't have to use an 'escape' character."

>>> escapes = 'If needed, a \'slash\' can be used as an escape character within a string when switching quote styles won\'t work.'

মাল্টি-লাইন স্ট্রিং ''' বা """ দিয়ে ডিক্লেয়ার করা হয়।

>>> triple_quoted =  '''Three single quotes or "double quotes" in a row allow for multi-line string literals.
  Line break characters, tabs and other whitespace are fully supported.

  You\'ll most often encounter these as "doc strings" or "doc tests" written just below the first line of a function or class definition.
    They\'re often used with auto documentation ✍ tools.
    '''

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

language = "Ukrainian"
number = "nine"
word = "дев'ять"

sentence = word + " " + "means" + " " + number + " in " + language + "."

>>> print(sentence)
...
"дев'ять means nine in Ukrainian."

যদি আলাদা আলাদা স্ট্রিংয়ের একটি list, tuple, set বা অন্য কোনো কালেকশনকে একটি str-এ একত্র করতে হয়, তাহলে <str>.join(<iterable>) ভালো একটি বিকল্প:

# str.join() makes a new string from the iterables elements.
>>> chickens = ["hen", "egg", "rooster"] # Lists are iterable.
>>> ' '.join(chickens)
'hen egg rooster'

# Any string can be used as the joining element.
>>> ' :: '.join(chickens)
'hen :: egg :: rooster'

>>> ' 🌿 '.join(chickens)
'hen 🌿 egg 🌿 rooster'


# Any iterable can be used as input.
>>> flowers = ("rose", "daisy", "carnation")  # Tuples are iterable.
>>> '*-*'.join(flowers)
'rose*-*daisy*-*carnation'

>>> flowers = {"rose", "daisy", "carnation"}  # Sets are iterable, but output order is not guaranteed.
>>> '*-*'.join(flowers)
'rose*-*carnation*-*daisy'

>>> phrase = "This is my string"  # Strings are iterable, but be careful!
>>> '..'.join(phrase)
'T..h..i..s.. ..i..s.. ..m..y.. ..s..t..r..i..n..g'


# Separators are inserted **between** elements, but can be any string (including spaces).
# This can be exploited for interesting effects.
>>> under_words = ['under', 'current', 'sea', 'pin', 'dog', 'lay']
>>> separator = ' ⤴️ under'
>>> separator.join(under_words)
'under ⤴️ undercurrent ⤴️ undersea ⤴️ underpin ⤴️ underdog ⤴️ underlay'

# The separator can be composed different ways, as long as the result is a string.
>>> upper_words = ['upper', 'crust', 'case', 'classmen', 'most', 'cut']
>>> separator = ' 🌟 ' + upper_words[0]
>>> separator.join(upper_words)
 'upper 🌟 uppercrust 🌟 uppercase 🌟 upperclassmen 🌟 uppermost 🌟 uppercut'

স্ট্রিংয়ের ভেতরের কোড পয়েন্টগুলো বাম দিক থেকে 0-based index সংখ্যা দিয়ে রেফারেন্স করা যায়:

creative = '창의적인'

>>> creative[0]
'창'

>>> creative[2]
'적'

>>> creative[3]
'인'

ডান দিক থেকেও ইনডেক্স করা যায়, যা -1-based index দিয়ে শুরু হয়:

creative = '창의적인'

>>> creative[-4]
'창'

>>> creative[-2]
'적'

>>> creative[-1]
'인'

Python-এ আলাদা কোনো “ক্যারেক্টার” বা “রুন” টাইপ নেই, তাই একটি স্ট্রিং ইনডেক্স করলে ১ দৈর্ঘ্যের একটি নতুন str তৈরি হয়:


>>> website = "exercism"
>>> type(website[0])
<class 'str'>

>>> len(website[0])
1

>>> website[0] == website[0:1] == 'e'
True

সাবস্ট্রিংগুলো স্লাইস নোটেশন দিয়ে নির্বাচন করা যায়, <str>[<start>:stop:<step>] ব্যবহার করে একটি নতুন স্ট্রিং তৈরি করা যায়। ফলাফল থেকে stop ইনডেক্স বাদ পড়ে। যদি start না দেওয়া হয়, শুরুর ইনডেক্স ০ হবে। যদি stop না দেওয়া হয়, stop ইনডেক্স হবে স্ট্রিংয়ের শেষ।

moon_and_stars = '🌟🌟🌙🌟🌟⭐'
sun_and_moon = '🌞🌙🌞🌙🌞🌙🌞🌙🌞'

>>> moon_and_stars[1:4]
'🌟🌙🌟'

>>> moon_and_stars[:3]
'🌟🌟🌙'

>>> moon_and_stars[3:]
'🌟🌟⭐'

>>> moon_and_stars[:-1]
'🌟🌟🌙🌟🌟'

>>> moon_and_stars[:-3]
'🌟🌟🌙'

>>> sun_and_moon[::2]
'🌞🌞🌞🌞🌞'

>>> sun_and_moon[:-2:2]
'🌞🌞🌞🌞'

>>> sun_and_moon[1:-1:2]
'🌙🌙🌙🌙'

স্ট্রিংগুলোকে <str>.split(<separator>) দিয়ে ছোট ছোট স্ট্রিংয়েও ভাঙা যায়, যা সাবস্ট্রিংয়ের একটি list রিটার্ন করে। প্রয়োজনে ওই লিস্টটিকে আরও ইনডেক্স বা স্প্লিট করা যায়। কোনো আর্গুমেন্ট ছাড়া <str>.split() ব্যবহার করলে স্ট্রিংটি হোয়াইটস্পেসে ভাগ হবে।

>>> cat_ipsum = "Destroy house in 5 seconds mock the hooman."
>>> cat_ipsum.split()
...
['Destroy', 'house', 'in', '5', 'seconds', 'mock', 'the', 'hooman.']


>>> cat_ipsum.split()[-1]
'hooman.'


>>> cat_words = "feline, four-footed, ferocious, furry"
>>> cat_words.split(', ')
...
['feline', 'four-footed', 'ferocious', 'furry']

<str>.split()-এর জন্য সেপারেটর একাধিক ক্যারেক্টারেরও হতে পারে। স্প্লিট মেলানোর জন্য পুরো স্ট্রিং ব্যবহার করা হয়।


>>> colors = """red,
orange,
green,
purple,
yellow"""

>>> colors.split(',\n')
['red', 'orange', 'green', 'purple', 'yellow']

স্ট্রিংগুলো সব সাধারণ সিকোয়েন্স অপারেশন সমর্থন করে। for item in <str> দিয়ে একটি লুপে প্রতিটি কোড পয়েন্ট ইটারেট করা যায়। for index, item in enumerate(<str>) দিয়ে আইটেমসহ ইনডেক্সগুলো একটি লুপে ইটারেট করা যায়।


>>> exercise = 'လေ့ကျင့်'

# Note that there are more code points than perceived glyphs or characters
>>> for code_point in exercise:
...    print(code_point)
...
လ
ေ
့
က
ျ
င
်
့

# Using enumerate will give both the value and index position of each element.
>>> for index, code_point in enumerate(exercise):
...    print(index, ": ", code_point)
...
0 :  လ
1 :  ေ
2 :  ့
3 :  က
4 :  ျ
5 :  င
6 :  ်
7 :  ့

নির্দেশনা

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

এই অ্যাসাইনমেন্টে চারটি অ্যাক্টিভিটি আছে, প্রতিটিতে কাজ করার জন্য কিছু টেক্সট বা শব্দ দেওয়া আছে।

1. একটি শব্দে উপসর্গ যোগ করুন

ইংরেজিতে সবচেয়ে কমন উপসর্গগুলোর একটি হলো un, যার অর্থ "not"। এই অ্যাক্টিভিটিতে আপনার বোনকে un যোগ করে নেতিবাচক, অর্থাৎ "not" অর্থের শব্দ বানাতে হবে।

add_prefix_un(<word>) ফাংশনটি ইমপ্লিমেন্ট করুন, যা প্যারামিটার হিসেবে word নেয় এবং un উপসর্গযুক্ত একটি নতুন শব্দ রিটার্ন করে:

>>> add_prefix_un("happy")
'unhappy'

>>> add_prefix_un("manageable")
'unmanageable'

2. শব্দগুচ্ছে উপসর্গ যোগ করুন

আপনার বোনের ক্লাস আরও চারটি কমন উপসর্গ নিয়ে পড়ছে: en (অর্থ 'ভেতরে রাখা' বা 'ঢেকে দেওয়া'), pre (অর্থ 'আগে' বা 'সামনে'), auto (অর্থ 'নিজে' বা 'একই'), আর inter (অর্থ 'মাঝে' বা 'মধ্যে');

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

make_word_groups(<vocab_words>) ফাংশনটি ইমপ্লিমেন্ট করুন, যা নিচের রূপে প্যারামিটার হিসেবে vocab_words নেয়: [<prefix>, <word_1>, <word_2> .... <word_n>], এবং এমন একটি স্ট্রিং রিটার্ন করে যেখানে প্রতিটি শব্দে উপসর্গটি প্রয়োগ করা থাকে: '<prefix> :: <prefix><word_1> :: <prefix><word_2> :: <prefix><word_n>'.

ইনপুট প্রসেস করার জন্য এখানে for বা while লুপ তৈরি করার দরকার নেই। বদলে কোন স্ট্রিং মেথড (এবং ডেলিমিটার) ব্যবহার করতে পারেন, সেটি ভালো করে ভাবুন।

>>> make_word_groups(['en', 'close', 'joy', 'lighten'])
'en :: enclose :: enjoy :: enlighten'

>>> make_word_groups(['pre', 'serve', 'dispose', 'position'])
'pre :: preserve :: predispose :: preposition'

>> make_word_groups(['auto', 'didactic', 'graph', 'mate'])
'auto :: autodidactic :: autograph :: automate'

>>> make_word_groups(['inter', 'twine', 'connected', 'dependent'])
'inter :: intertwine :: interconnected :: interdependent'

3. একটি শব্দ থেকে প্রত্যয় সরান

ness একটি কমন প্রত্যয়, যার অর্থ 'কোনো কিছু হওয়ার অবস্থা'। এই অ্যাক্টিভিটিতে আপনার বোনকে ness প্রত্যয়টি সরিয়ে মূল শব্দটি খুঁজে বের করতে হবে। কিন্তু অবশ্যই কিছু বিরক্তিকর বানানের নিয়ম আছে: যদি মূল শব্দটি আসলে একটি ব্যঞ্জনবর্ণের পরে 'y' দিয়ে শেষ হতো, তাহলে সেই 'y' বদলে 'i' হয়ে যেত। সেই মূল শব্দগুলোতে 'ness' সরালে 'y' আবার ফিরিয়ে আনতে হবে। যেমন happiness --> happi --> happy।

remove_suffix_ness(<word>) ফাংশনটি ইমপ্লিমেন্ট করুন, যা প্যারামিটার হিসেবে word নেয় এবং ness প্রত্যয় ছাড়া মূল শব্দটি রিটার্ন করে।

>>> remove_suffix_ness("heaviness")
'heavy'

>>> remove_suffix_ness("sadness")
'sad'

4. একটি শব্দ বের করে রূপান্তর করুন

একটি শব্দ যে পার্টস অফ স্পিচে পড়ে, তা বদলাতে প্রায়ই প্রত্যয় ব্যবহার করা হয়। ইংরেজিতে একটি কমন প্রথা হলো "verbing" বা "verbifying", যেখানে en প্রত্যয় যোগ করে একটি বিশেষণ ক্রিয়ায় পরিণত হয়।

এই কাজে আপনার বোন একটি বাক্য থেকে বিশেষণ বের করে সেটিকে ক্রিয়ায় পরিণত করার মাধ্যমে শব্দ "verbing" অনুশীলন করবে। সৌভাগ্যক্রমে, এখানে যে শব্দগুলো রূপান্তর করতে হবে সেগুলো সবই "regular", অর্থাৎ প্রত্যয় যোগ করতে বানান বদলানোর দরকার নেই।

adjective_to_verb(<sentence>, <index>) ফাংশনটি ইমপ্লিমেন্ট করুন, যা দুটি প্যারামিটার নেয়। একটি sentence, যেখানে ভোকাবুলারির শব্দটি ব্যবহৃত হয়েছে, আর বাক্যটি টুকরো করে ভাগ করার পর শব্দটির index। ফাংশনটি বের করা বিশেষণটিকে ক্রিয়া হিসেবে রিটার্ন করবে।

>>> adjective_to_verb('I need to make that bright.', -1 )
'brighten'

>>> adjective_to_verb('It got dark as the sun set.', 2)
'darken'
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি একটি নতুন উইন্ডো বা ট্যাবে খোলে
Python Exercism

ছোট বোনের শব্দভান্ডার শুরু করতে প্রস্তুত?

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