স্

স্ট্রিং মধ্যে Python

83টি অনুশীলনী

স্ট্রিং সম্পর্কে

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

একটি স্ট্রিং কী তথ্য ধারণ করে, সে বিষয়ে গভীরে যেতে (অথবা, "কম্পিউটার কীভাবে জানে শূন্য আর এককে অক্ষরে অনুবাদ করতে হয়?"), এই ব্লগ পোস্টটি চিরকালই সহায়ক। Python-এর ডকুমেন্টেশনেও খুব বিস্তারিত একটি unicode HOWTO আছে, যা str, bytes ও re মডিউলে Unicode স্পেসিফিকেশন নিয়ে Python-এর সমর্থন, লোকেল সংক্রান্ত বিবেচনা, এবং এনকোডিং ও অনুবাদ নিয়ে কিছু কমন সমস্যা আলোচনা করে।

স্ট্রিং সব কমন সিকোয়েন্স অপারেশন ইমপ্লিমেন্ট করে এবং for item in <str> বা for index, item in enumerate(<str>) সিনট্যাক্স দিয়ে ইটারেট করা যায়। আলাদা আলাদা কোড পয়েন্ট (দৈর্ঘ্য ১-এর স্ট্রিং) বাম দিক থেকে 0-based index সংখ্যা দিয়ে, বা ডান দিক থেকে -1-based index সংখ্যা দিয়ে রেফার করা যায়।

স্ট্রিং <str> + <other str> বা <str>.join(<iterable>) দিয়ে জোড়া লাগানো যায় এবং <str>.split(<separator>) দিয়ে ভাগ করা যায়। এতে ফরম্যাটিং, অ্যাসেম্বলি ও টেমপ্লেটিংয়ের আরও অনেক অপশনও আছে।

একটি str লিটারেল একক ' বা জোড়া " কোটেশন দিয়ে ডিক্লেয়ার করা যায়। প্রয়োজন অনুযায়ী escape \ ক্যারেক্টারও ব্যবহার করা যায়।


>>> 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."

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

>>> triple_quoted = '''Three single quotes or "double quotes" in a row allow for multi-line string literals.
  Line break characters, tabs and other whitespace is fully supported. Remember - The escape "\" character is also available if needed (as can be seen below). 
  
  You\'ll most often encounter multi-line strings 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.
    '''

অন্য অবজেক্ট থেকে স্ট্রিং তৈরি বা জোর করে রূপান্তর করতে str(<object>) কনস্ট্রাক্টর ব্যবহার করা যায়:

>>> my_number = 42
>>> str(my_number)
...
"42"

str(<object>) কনস্ট্রাক্টর দিয়ে স্ট্রিং কোয়ার্স বা রূপান্তর করা গেলেও, এটি কোনো অবজেক্ট ইটারেট করবে না বা আনপ্যাক করবে না। এটি list(), set(), dict() বা tuple()-এর মতো অন্য ডেটা টাইপের কনস্ট্রাক্টরের আচরণ থেকে আলাদা, এবং এর ফলাফল চমকে দেওয়ার মতো হতে পারে।

>>> numbers = [1,3,5,7]
>>> str(numbers)
...
'[1,3,5,7]'

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

creative = '창의적인'

>>> creative[0]
'창'

>>> creative[2]
'적'

>>> creative[3]
'인'

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

creative = '창의적인'

>>> creative[-4]
'창'

>>> creative[-2]
'적'

>>> creative[-1]
'인'

Python-এ আলাদা কোনো "character" বা "rune" টাইপ নেই, তাই একটি স্ট্রিং ইনডেক্স করলে দৈর্ঘ্য ১-এর একটি নতুন 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 না দিলে শুরুর ইনডেক্স হবে 0। stop না দিলে stop ইনডেক্স হবে স্ট্রিংয়ের শেষ।

moon_and_stars = '🌟🌟🌙🌟🌟⭐'

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

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

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

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

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

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

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


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


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

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

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

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' # Note the leading space, but no trailing space.
>>> 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] # This becomes one string, similar to ' ⤴️ under'.
>>> separator.join(upper_words)
 'upper 🌟 uppercrust 🌟 uppercase 🌟 upperclassmen 🌟 uppermost 🌟 uppercut'

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


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

# Note that there are more code points than perceived glyphs or characters.
# Care should be used when iterating over languages that use
# combining characters, or when dealing with emoji.
>>> 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 :  ့

স্ট্রিং মেথড

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

ফরম্যাটিং

Python-এ স্ট্রিং ফরম্যাটিং ও টেমপ্লেটিং-এর একটি সমৃদ্ধ সেট টুল আছে, এবং re (রেগুলার এক্সপ্রেশন), difflib (সিকোয়েন্স তুলনা) ও textwrap মডিউলের মাধ্যমে আরও উন্নত টেক্সট প্রসেসিংও করা যায়। Python-এ স্ট্রিং ফরম্যাটিংয়ের দারুণ একটি ভূমিকার জন্য Real Python-এর এই পোস্টটি দেখুন। স্ট্রিং মেথডের ভূমিকার জন্য একই সাইটে Strings and Character Data in Python দেখুন।

সম্পর্কিত টাইপ ও এনকোডিং

একটি str (একটি টেক্সট সিকোয়েন্স) ছাড়াও Python-এ সংশ্লিষ্ট বাইনারি সিকোয়েন্স টাইপ আছে, যেগুলো বাইনারি ডেটা সার্ভিস-এর অধীনে সংক্ষেপে দেওয়া হয়েছে: bytes (একটি বাইনারি সিকোয়েন্স), bytearray, এবং বাইনারি ডেটা দক্ষভাবে সংরক্ষণ ও হ্যান্ডেল করার জন্য memoryview। এছাড়া Streams ব্যবহার করে কলব্যাক ছাড়াই একটি নেটওয়ার্ক কানেকশনের মাধ্যমে বাইনারি ডেটা পাঠানো ও গ্রহণ করা যায়।

GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

স্ট্রিং শিখুন

অনুশীলন লক করা আছে

স্ট্রিং অনুশীলন করতে আরও 4টি অনুশীলনী আনলক করুন