str في Python هو تسلسل غير قابل للتغيير من نقاط ترميز Unicode.
وقد تشمل هذه الحروف والعلامات التشكيلية ومحارف التموضع والأعداد ورموز العملات والرموز التعبيرية وعلامات الترقيم والمسافات ومحارف فواصل الأسطر وغيرها.
ولأنه غير قابل للتغيير، فإن قيمة كائن 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'
يمكن الرجوع إلى نقاط الترميز داخل str برقم 0-based index من اليسار:
creative = '창의적인'
>>> creative[0]
'창'
>>> creative[2]
'적'
>>> creative[3]
'인'
تعمل الفهرسة أيضًا من اليمين، بدءًا من -1-based index:
creative = '창의적인'
>>> creative[-4]
'창'
>>> creative[-2]
'적'
>>> creative[-1]
'인'
لا يوجد في Python نوع منفصل للحرف أو لـ "rune"، لذا فإن فهرسة سلسلة نصية تُنتج str جديدة بطول 1:
>>> 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 = '🌟🌟🌙🌟🌟⭐'
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 : ့
أنت تساعد أختك الصغرى في واجب المفردات الإنجليزية، وهي تجده مملًا للغاية. يتعلم صفها كيفية إنشاء كلمات جديدة بإضافة البادئات و_اللواحق_. وبالنظر إلى مجموعة من الكلمات، تبحث المعلمة عن كلمات محوّلة تحويلًا صحيحًا وبتهجئة صحيحة، عبر إضافة البادئة إلى بداية الكلمة أو اللاحقة إلى نهايتها.
يتضمّن الواجب أربعة أنشطة، لكل منها مجموعة من النصوص أو الكلمات للعمل عليها.
من أكثر البادئات شيوعًا في الإنجليزية البادئة un، ومعناها "ليس".
في هذا النشاط، على أختك أن تصنع كلمات منفية، أي كلمات بمعنى "ليس"، بإضافة un إليها.
نفّذ الدالة add_prefix_un(<word>) التي تأخذ word معاملًا وتُرجع كلمة جديدة مسبوقة بـ un:
>>> add_prefix_un("happy")
'unhappy'
>>> add_prefix_un("manageable")
'unmanageable'
هناك أربع بادئات شائعة أخرى يدرسها صف أختك:
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'
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'
غالبًا ما تُستخدم اللواحق لتغيير نوع الكلمة المُسنَد إليها.
من الممارسات الشائعة في الإنجليزية "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'
سجّل في Exercism لتتعلّم وتتقن Python عبر 17 مفهومًا146 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.