القائمة الرئيسية

الصفحات

دورة البرمجة بلغة بايثون - الدرس السادس والعشرون (السلاسل النصية)

دورة البرمجة بلغة بايثون - الدرس السادس والعشرون (السلاسل النصية)

 دورة البرمجة بلغة بايثون - الدرس السادس والعشرون (السلاسل النصية)

ستتعلم في هذا البرنامج التعليمي إنشاء سلاسل نصية في بايثون وتنسيقها وتعديلها وحذفها. أيضًا ، سيتم تعريفك بالعديد من عمليات ووظائف السلسلة.


ما هي السلسلة النصية String في Python؟

السلسلة النصية هي سلسلة من الأحرف.

الحرف هو مجرد رمز. على سبيل المثال ، تحتوي اللغة الإنجليزية على 26 حرفًا.


لا تتعامل أجهزة الكمبيوتر مع الأحرف ، بل تتعامل مع الأرقام (ثنائي). على الرغم من أنك قد ترى أحرفًا على شاشتك ، فإنه يتم تخزينها داخليًا ومعالجتها كمجموعة من 0 و 1.


يسمى تحويل الحرف هذا إلى رقم بعملية الترميز ، والعملية العكسية هي فك الترميز. ASCII و Unicode هي بعض الترميزات الشائعة المستخدمة.


في بايثون ، السلسلة عبارة عن سلسلة من أحرف Unicode. تم تقديم Unicode لتضمين كل حرف في جميع اللغات وتحقيق التوحيد في الترميز. يمكنك التعرف على Unicode من هذا الرابط.


كيف تنشئ سلسلة نصية في بايثون؟

يمكن إنشاء سلاسل نصية بتضمين أحرف داخل علامة اقتباس مفردة أو علامات اقتباس مزدوجة. يمكن استخدام علامات الاقتباس الثلاثية في لغة بايثون ، ولكنها تُستخدم عمومًا لتمثيل السلاسل النصية المتعددة الأسطر والوثائق.

# defining strings in Python
# all of the following are equivalent
my_string = 'Hello'
print(my_string)

my_string = "Hello"
print(my_string)

my_string = '''Hello'''
print(my_string)

# triple quotes string can extend multiple lines
my_string = """Hello, welcome to
           the world of Python"""
print(my_string)

عند تشغيل البرنامج ، سيكون الإخراج:

Hello
Hello
Hello
Hello, welcome to
           the world of Python

كيفية الوصول إلى الأحرف في سلسلة نصية معينة؟

يمكننا الوصول إلى الأحرف الفردية باستخدام الفهرسة ومجموعة من الأحرف باستخدام التقطيع. يبدأ الفهرس من 0. ستؤدي محاولة الوصول إلى حرف خارج نطاق الفهرس إلى ظهور الخطأ IndexError. يجب أن يكون الفهرس عددًا صحيحًا. لا يمكننا استخدام رقم عائم أو أنواع أخرى ، سيؤدي ذلك إلىظهور خطأ TypeError.


تسمح Python بالفهرسة السلبية لتسلسلاتها.


يشير الفهرس -1 إلى العنصر الأخير ، ويشير -2 إلى العنصر الأخير الثاني وهكذا. يمكننا الوصول إلى مجموعة من العناصر في سلسلة باستخدام عامل التقطيع: (النقطتان).

#Accessing string characters in Python
str = 'programiz'
print('str = ', str)

#first character
print('str[0] = ', str[0])

#last character
print('str[-1] = ', str[-1])

#slicing 2nd to 5th character
print('str[1:5] = ', str[1:5])

#slicing 6th to 2nd last character
print('str[5:-2] = ', str[5:-2])


عند تشغيل البرنامج أعلاه ، نحصل على المخرجات التالية:

str =  programiz
str[0] =  p
str[-1] =  z
str[1:5] =  rogr
str[5:-2] =  am

إذا حاولنا الوصول إلى فهرس خارج النطاق أو استخدمنا عدد صحيح ، فسنحصل على أخطاء.

# index must be in range
>>> my_string[15]  
...
IndexError: string index out of range

# index must be an integer
>>> my_string[1.5] 
...
TypeError: string indices must be integers

يمكن تصور التقطيع بشكل أفضل من خلال اعتبار الفهرس بين العناصر كما هو موضح أدناه.


إذا أردنا الوصول إلى نطاق ، فنحن بحاجة إلى الفهرس الذي سيقطع الجزء من السلسلة.

تشريح السلسلة في بايثون


كيفية تغيير أو حذف سلسلة؟

السلاسل غير قابلة للتغيير. هذا يعني أنه لا يمكن تغيير عناصر سلسلة بمجرد تعيينها. يمكننا ببساطة إعادة تعيين سلاسل مختلفة لنفس الاسم.

>>> my_string = 'programiz'
>>> my_string[5] = 'a'
...
TypeError: 'str' object does not support item assignment
>>> my_string = 'Python'
>>> my_string
'Python'

لا يمكننا حذف أو إزالة الأحرف من سلسلة. لكن حذف السلسلة بالكامل ممكن باستخدام الكلمة الأساسية del.

>>> del my_string[1]
...
TypeError: 'str' object doesn't support item deletion
>>> del my_string
>>> my_string
...
NameError: name 'my_string' is not defined

دوال سلاسل بايثون النصية

هناك العديد من العمليات التي يمكن إجراؤها على السلاسل مما يجعلها واحدة من أكثر أنواع البيانات استخدامًا في Python.


لمعرفة المزيد حول أنواع البيانات المتوفرة في Python ، تفضل بزيارة: أنواع بيانات Python


ضم سلسلتين نصيتين أو أكثر

يسمى ضم سلسلتين أو أكثر في سلسلة واحدة التسلسل.


عامل + يفعل ذلك في بايثون. ببساطة ، فإن كتابة سلسلتين حرفية معًا تجمعهما أيضًا.


يمكن استخدام عامل التشغيل * لتكرار السلسلة لعدد معين من المرات.

# Python String Operations
str1 = 'Hello'
str2 ='World!'

# using +
print('str1 + str2 = ', str1 + str2)

# using *
print('str1 * 3 =', str1 * 3)

عند تشغيل البرنامج أعلاه ، نحصل على المخرجات التالية:

str1 + str2 =  HelloWorld!
str1 * 3 = HelloHelloHello

تؤدي كتابة سلسلتين حرفية معًا إلى تجميعها أيضًا مثل عامل التشغيل +.


إذا أردنا ربط السلاسل في سطور مختلفة ، فيمكننا استخدام الأقواس.

>>> # two string literals together
>>> 'Hello ''World!'
'Hello World!'

>>> # using parentheses
>>> s = ('Hello '
...      'World')
>>> s
'Hello World'

التكرار من خلال سلسلة

يمكننا التكرار خلال سلسلة معينة باستخدام حلقة for. هذا مثال لحساب عدد 'l' في سلسلة.

# Iterating through a string
count = 0
for letter in 'Hello World':
    if(letter == 'l'):
        count += 1
print(count,'letters found')

عند تشغيل البرنامج أعلاه ، نحصل على المخرجات التالية:

3 letters found

اختبار عضوية السلسلة

يمكننا اختبار ما إذا كانت السلسلة الفرعية موجودة داخل سلسلة أم لا ، باستخدام الكلمة الأساسية in.

>>> 'a' in 'program'
True
>>> 'at' not in 'battle'
False


دوال مدمجة تعمل مع لغة بايثون

تعمل العديد من الوظائف المضمنة التي تعمل مع السلاسل أيضًا.


بعض من تلك المستخدمة بشكل شائع ()count و ()len. ترجع الدالة ()enumerate كائن تعداد. يحتوي على فهرس وقيمة جميع العناصر في السلسلة كأزواج. يمكن أن يكون هذا مفيدًا للتكرار.


وبالمثل ، تُرجع الدالة ()len طول (عدد الأحرف) للسلسلة.

str = 'cold'

# enumerate()
list_enumerate = list(enumerate(str))
print('list(enumerate(str) = ', list_enumerate)

#character count
print('len(str) = ', len(str))

عند تشغيل البرنامج أعلاه ، نحصل على المخرجات التالية:

list(enumerate(str) =  [(0, 'c'), (1, 'o'), (2, 'l'), (3, 'd')]
len(str) =  4

تنسيق سلسلة بايثون

تسلسل الهروب

إذا أردنا طباعة نص مثل He said, What's there ، فلا يمكننا استخدام علامات الاقتباس المفردة أو علامات الاقتباس المزدوجة. سينتج عن هذا خطأ في بناء الجملة حيث أن النص نفسه يحتوي على علامات اقتباس مفردة ومزدوجة.

>>> print("He said, "What's there?"")
...
SyntaxError: invalid syntax
>>> print('He said, "What's there?"')
...
SyntaxError: invalid syntax

طريقة واحدة للتغلب على هذه المشكلة هي استخدام علامات الاقتباس الثلاثية. بدلاً من ذلك ، يمكننا استخدام تسلسلات الهروب.


يبدأ تسلسل الهروب بشرطة مائلة للخلف ويتم تفسيره بشكل مختلف. إذا استخدمنا علامة اقتباس واحدة لتمثيل سلسلة نصية ، فيجب تخطي جميع علامات الاقتباس المفردة داخل السلسلة. نفس الحال مع علامات الاقتباس المزدوجة. إليك كيفية القيام بذلك لتمثيل النص أعلاه.

# using triple quotes
print('''He said, "What's there?"''')

# escaping single quotes
print('He said, "What\'s there?"')

# escaping double quotes
print("He said, \"What's there?\"")

عند تشغيل البرنامج أعلاه ، نحصل على المخرجات التالية:

He said, "What's there?"
He said, "What's there?"
He said, "What's there?"

فيما يلي قائمة بجميع تسلسلات الهروب التي تدعمها Python.

Escape SequenceDescription
\newlineBackslash and newline ignored
\\Backslash
\'Single quote
\"Double quote
\aASCII Bell
\bASCII Backspace
\fASCII Formfeed
\nASCII Linefeed
\rASCII Carriage Return
\tASCII Horizontal Tab
\vASCII Vertical Tab
\oooCharacter with octal value ooo
\xHHCharacter with hexadecimal value HH


وهنا بعض الأمثلة

>>> print("C:\\Python32\\Lib")
C:\Python32\Lib

>>> print("This is printed\nin two lines")
This is printed
in two lines

>>> print("This is \x48\x45\x58 representation")
This is HEX representation

سلسلة خام لتجاهل تسلسل الهروب

في بعض الأحيان قد نرغب في تجاهل تسلسلات الهروب داخل سلسلة. للقيام بذلك ، يمكننا وضع r أو R أمام السلسلة. هذا يعني أنه سلسلة خام وسيتم تجاهل أي تسلسل هروب بداخله.

>>> print("This is \x61 \ngood example")
This is a
good example
>>> print(r"This is \x61 \ngood example")
This is \x61 \ngood example

طريقة ()format لتنسيق السلاسل

تعتبر طريقة ()format المتوفرة مع كائن السلسلة متعددة الاستخدامات وفعالة في تنسيق السلاسل. تحتوي سلاسل التنسيق على أقواس معقوفة {} كعناصر نائبة أو حقول بديلة يتم استبدالها.


يمكننا استخدام الوسائط الموضعية أو وسيطات الكلمات الرئيسية لتحديد الترتيب.

# Python string format() method

# default(implicit) order
default_order = "{}, {} and {}".format('John','Bill','Sean')
print('\n--- Default Order ---')
print(default_order)

# order using positional argument
positional_order = "{1}, {0} and {2}".format('John','Bill','Sean')
print('\n--- Positional Order ---')
print(positional_order)

# order using keyword argument
keyword_order = "{s}, {b} and {j}".format(j='John',b='Bill',s='Sean')
print('\n--- Keyword Order ---')
print(keyword_order)

عند تشغيل البرنامج أعلاه ، نحصل على المخرجات التالية:

--- Default Order ---
John, Bill and Sean

--- Positional Order ---
Bill, John and Sean

--- Keyword Order ---
Sean, Bill and John

يمكن أن يكون لهذه الطريقة مواصفات تنسيق اختيارية. يتم فصلها عن اسم الحقل باستخدام النقطتين. على سبيل المثال ، يمكننا ضبط سلسلة لليسار < أو ضبط لليمين > أو توسيط ^ في الفراغ المحدد.


يمكننا أيضًا تنسيق الأعداد الصحيحة على هيئة ثنائي ، أو سداسي عشري ، وما إلى ذلك ، ويمكن تقريب الأرقام العائمة أو عرضها بتنسيق الأس. هناك الكثير من التنسيقات التي يمكنك استخدامها.

>>> # formatting integers
>>> "Binary representation of {0} is {0:b}".format(12)
'Binary representation of 12 is 1100'

>>> # formatting floats
>>> "Exponent representation: {0:e}".format(1566.345)
'Exponent representation: 1.566345e+03'

>>> # round off
>>> "One third is: {0:.3f}".format(1/3)
'One third is: 0.333'

>>> # string alignment
>>> "|{:<10}|{:^10}|{:>10}|".format('butter','bread','ham')
'|butter    |  bread   |       ham|'

تنسيق النمط القديم

يمكننا حتى تنسيق السلاسل مثل نمط ()sprintf القديم المستخدم في لغة البرمجة سي. نستخدم عامل التشغيل ٪ لإنجاز ذلك.

>>> x = 12.3456789
>>> print('The value of x is %3.2f' %x)
The value of x is 12.35
>>> print('The value of x is %3.4f' %x)
The value of x is 12.3457

طرق سلسلة Python الشائعة

هناك العديد من الطرق المتاحة مع كائن السلسلة. طريقة ()format ذكرناها أعلاه هي واحدة منها. بعض الطرق الشائعة الاستخدام هي lower ، upper ، join ، split ، find ، replace وما إلى ذلك. 

>>> "PrOgRaMiZ".lower()
'programiz'
>>> "PrOgRaMiZ".upper()
'PROGRAMIZ'
>>> "This will split all words into a list".split()
['This', 'will', 'split', 'all', 'words', 'into', 'a', 'list']
>>> ' '.join(['This', 'will', 'join', 'all', 'words', 'into', 'a', 'string'])
'This will join all words into a string'
>>> 'Happy New Year'.find('ew')
7
>>> 'Happy New Year'.replace('Happy','Brilliant')
'Brilliant New Year'
reaction:
Ahmed Taher
Ahmed Taher
مدون من العراق . احب البرمجة وكل ما يتعلق بالشبكات والسيرفرات وامن المعلومات . واسعى الى توفير جميع المصادر والمواد للامتحانات الدولية.

تعليقات