برامج بايثون في عمليات السلسلة

في هذا البرنامج التعليمي ، ستكتب برامج Python لحل الأسئلة الشائعة حول عمليات السلسلة.

ستتعلم كيفية التحقق مما إذا كانت سلاسل Python متجانسة وجناسًا في حالة العنوان.

سلاسل بايثون: مراجعة سريعة

في Python ، السلاسل هي أنواع بيانات مضمنة قوية. يمكنهم تخزين سلسلة من الشخصيات.

الفهرسة في سلاسل Python: مثل جميع متغيرات Python ، يتم أيضًا فهرسة السلاسل الصفرية. إذن ، المؤشرات الصالحة لسلسلة طولها N هي 0 ، 1 ، 2 حتى N – 1.

تدعم Python أيضًا الفهرسة السلبية للوصول إلى العناصر من نهاية السلسلة. إذن -1 هو فهرس الحرف الأخير في السلسلة ، و -2 هو فهرس الحرف الثاني إلى الأخير في السلسلة ، وهكذا.

ثبات سلاسل Python: بالإضافة إلى ذلك ، فإن السلاسل في Python غير قابلة للتغيير ، لذلك لا يمكنك تعديلها في مكانها. ومع ذلك ، يمكنك استدعاء عدة طرق سلسلة عليها والحصول على نسخ من السلاسل مع النتيجة المرجوة.

الآن بعد أن قمنا بمراجعة أساسيات سلاسل Python ، فلننتقل إلى حل بعض المشكلات البسيطة والمثيرة للاهتمام.

لنبدأ.

تحقق مما إذا كانت Python String هي Palindrome

المشكلة: بالنظر إلى سلسلة Python ، تحقق مما إذا كانت متناظرة أم لا.

إذا كانت الإجابة بنعم ، فارجع إلى True ؛ وإلا ، قم بإرجاع False.

لذا فإن مشكلتنا الأولى هي التحقق مما إذا كانت سلسلة نصية معينة هي متناظرة أم لا.

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

فيما يلي خطوات حل هذه المشكلة:

  • الحصول على نسخة معكوسة من السلسلة وتخزينها في متغير آخر ، إذا لزم الأمر.
  • قارن بين قيم السلسلة الأصلية والسلسلة المعكوسة.
  • إذا كانتا متساويتين ، فإن الخيط متماثل. لذا عد صحيحًا ، وتوقف.
  • إذا كانت النسخ الأصلية والنسخ المعكوسة غير متساوية ، فلن تكون السلسلة متماثلة. لذلك يجب أن نعيد False.

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

ومع ذلك ، سوف نتناول طريقتين:

  • استخدام تقطيع الخيوط
  • استخدام الدالة المعكوسة () وطريقة الانضمام ()
  كيف نفعل ذلك بسرعة وسهولة

كيفية عكس سلسلة Python باستخدام التقطيع

بناء الجملة [start: stop: step] إرجاع شريحة من السلسلة من البداية إلى ولكن لا تتضمن التوقف ، مع خطوة حجم الخطوة.

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

لذلك [::-1] إرجاع نسخة معكوسة من السلسلة.

تحتوي خلية الكود التالية على تعريف الوظيفة is_palindrome ().

تأخذ سلسلة كوسيطة ، وتعيد صواب أو خطأ اعتمادًا على ما إذا كان متماثلًا أم لا.

هنا ، استخدمنا تقطيع السلاسل للحصول على نسخة عكسية من السلسلة.

def is_palindrome(this_str):
  rev_str = this_str[::-1]
  if (this_str == rev_str):
    return True
  else:
    return False

▶ ️ الآن بعد أن حددنا الوظيفة ، يمكننا المضي قدمًا واستدعاء أي سلسلة صالحة كمتحول.

is_palindrome("racecar")
True

في خلية الشفرة أعلاه ، تعتبر سيارة السباق متناظرة. لذا فإن الدالة is_palindrome () ترجع True كما هو متوقع.

الآن ، حاول استدعاء الدالة بأي سلسلة ليست متناظرة ، مثل النهر.

is_palindrome("river")
False

وكما ترى ، تقوم بإرجاع False ، وهو الصحيح. ✅

كيفية عكس سلسلة Python باستخدام معكوس () وضم ()

في Python ، يمكنك استخدام طريقة الانضمام () مع وظيفة عكس () لعكس سلسلة.

  • ترجع الدالة reverse () مكررًا عكسيًا عبر الأحرف الموجودة في السلسلة.
  • يمكن بعد ذلك استخدام طريقة الانضمام () لضم هذه الأحرف بالترتيب العكسي.

باستخدام الطريقة أعلاه ، يمكنك إعادة كتابة دالة is_palindrome () كما في خلية الكود أدناه.

def is_palindrome(this_str):
  rev_str="".join(reversed(this_str))
  if (this_str == rev_str):
    return True
  else:
    return False

يمكنك أيضًا استخدام الوظيفة is_palindrome () داخل قائمة الفهم لتجميع كل المتجانسات من قائمة سلاسل أطول.

str_list = ["refer","blue","level","12321","dragon"]

palindromes = [string for string in str_list if is_palindrome(string)]
print(palindromes)
# Output
['refer', 'level', '12321']

إليك كيفية عمل الكود أعلاه:

  • اجتياز str_list ، واستدعاء is_palindrome () على كل سلسلة.
  • إذا قامت is_palindrome () بإرجاع True ، فأضف السلسلة إلى قائمة المتناظرات.

كما ترى في الإخراج أعلاه ، فإن المتجانسات هي قائمة بجميع السلاسل المتجانسة في str_list.

تحقق مما إذا كانت سلسلتان من Python هي الجناس الناقصة

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

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

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

  كيفية دفق "فريزر" بدون كابل

كيفية التحقق من الجناس الناقصة باستخدام كائن عداد في بايثون

هناك طريقة بسيطة وبديهية وهي حساب عدد تكرارات كل حرف في السلسلتين. ثم تحقق مما إذا كانت الأعداد متساوية.

يمكن القيام بذلك بسهولة أكبر باستخدام كائن العداد من وحدة itertools. ال يعداد يقوم الكائن بإرجاع قاموس Python: باستخدام الأحرف كمفاتيح ويتم احتساب القيم المقابلة كقيم.

ضع في اعتبارك الأوتار “حفظ” و “إناء” كما هو موضح أدناه.

str1 = "save"
str2 = "vase"

هنا ، c1 و c2 كائنات مضادة تحتوي على عدد أحرف السلاسل str1 و str2 على التوالي.

from collections import Counter
c1 = Counter(str1)
c2 = Counter(str2)
print(c1)
print(c2)
c1 == c2

# Output
Counter({'s': 1, 'a': 1, 'v': 1, 'e': 1})
Counter({'v': 1, 'a': 1, 's': 1, 'e': 1})
True

c1 == تُرجع c2 صوابًا لأن str1 و str2 عبارة عن الجناس الناقصة.

باستخدام هذا المنطق ، يمكننا الآن المضي قدمًا وتحديد الوظيفة are_anagrams () مع معلمتين word1 و word2. في جسم الوظيفة ، نتحقق مما إذا كان Counter (word1) == Counter (word2).

def are_anagrams(word1, word2):
  if Counter(word1) ==  Counter(word2):
    return True
  else:
    return False

▶ ️ للتحقق ، استدعِ are_anagrams () مع str1 ، str2 كوسائط. نظرًا لأن str1 و str2 هما الجناس الناقصة (“save” و “vase”) ، فإن الدالة ترجع True ، وهذا صحيح.

are_anagrams(str1, str2)
True

كيفية التحقق من الجناس الناقصة باستخدام نسخ مرتبة من السلاسل

هناك طريقة أخرى يمكنك القيام بها.

إذا كانت السلاسل عبارة عن جناس ناقص ، فإن نسخهما المصنفة متساوية.

لذا يمكننا إعادة كتابة الدالة are_anagrams () للتحقق مما إذا كانت النسخة المصنفة من str1 هي نفس النسخة التي تم فرزها من str2. إذا كانتا متساويتين ، فإن السلسلتين هما الجناس الناقصة ؛ وإلا فهم ليسوا كذلك.

باستخدام الطريقة أعلاه للتحقق من تساوي النسخ المصنفة ، يمكننا إعادة كتابة الوظيفة are_anagrams () على النحو التالي.

def are_anagrams(word1, word2):
  if sorted(word1) ==  sorted(word2):
    return True
  else:
    return False

دعونا الآن نجري بعض المكالمات الوظيفية.

  • السلاسل “كوع” و “أدناه” هي الجناس الناقصة والدالة هي _anagrams () ترجع صحيحًا.
  • و “state” و “tasted” ليسا الجناس الناقصة ، وتعيد الدالة False.
are_anagrams("below","elbow")
True

are_anagrams("state","tasted")
False

تحقق مما إذا كانت سلسلة Python موجودة في حالة العنوان

إليك سؤالنا الأخير لهذا البرنامج التعليمي.

المشكلة: إعطاء سلسلة: اسم شخص – بالاسم الأول واسم العائلة.

يجب عليك التحقق مما إذا كان الحرف الأول من كل من الاسمين الأول والأخير مكتوبًا بأحرف كبيرة.

يسمى هذا النوع من الغلاف حيث يتم كتابة الحرف الأول من كل كلمة بأحرف كبيرة باسم حالة العنوان.

لذلك عليك التحقق مما إذا كان الاسم في حالة العنوان:

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

  أفضل 8 أدوات لضغط ملفات PDF [Online + Software]

2. عدا ذلك ، قم بإرجاع نسخة من السلسلة المنسقة في حالة العنوان

  • تحتوي لغة Python على طريقة سلسلة مضمنة istitle () ، والتي تتحقق مما إذا كانت السلسلة موجودة في حالة العنوان.

يقوم .istitle () بإرجاع True إذا تم تنسيق السلسلة في حالة العنوان ، وإلا فإنها ترجع False.

  • ويعيد عنوان طريقة سلسلة Python () نسخة من السلسلة المنسقة في حالة العنوان.

يمكنك الآن استخدام هاتين الطريقتين لحل المشكلة.

حدد دالة check_titlecase () تقبل الاسم كوسيط.

  • يمكنك استدعاء طريقة istitle () على سلسلة الإدخال للتحقق مما إذا كان منسقًا في حالة العنوان.
  • إذا كان صحيحًا ، يمكنك طباعة أن السلسلة موجودة بالفعل في حالة أحرف العنوان.
  • عدا ذلك ، يمكنك استدعاء طريقة العنوان () وإرجاع نسخة من السلسلة في حالة العنوان.

تُظهر خلية الكود التالية تعريف دالة check_titlecase ().

def check_titlecase(name):
  if name.istitle():
    print(f"'{name}' is already formatted in title case.")
  else:
    return name.title()

دعونا الآن نطلق على طريقة check_titlecase () مع وسيطة.

check_titlecase("jane smith")

# Output
Jane Smith

في الإخراج أعلاه ، يمكنك أن ترى أن السلسلة “Jane Smith” موجودة الآن في حالة العنوان.

▶ ️ لنأخذ مثالاً آخر.

check_titlecase("agatha Christie")

# Output
Agatha Christie

هذه المرة ، دعنا نسمي الدالة بسلسلة ذات غلاف عنوان.

check_titlecase("Grace Hopper")

# Output
'Grace Hopper' is already formatted in title case.

يتم إعلامنا أن السلسلة منسقة في حالة العنوان ، وأن الوظيفة تعمل كما هو متوقع.

الخلاصة 👩‍🏫

الآن دعونا نلخص المشاكل التي ناقشناها حتى الآن.

  • للتحقق مما إذا كانت السلسلة متطابقة ، تحقق مما إذا كانت السلسلة وإصدارها المعكوس متساويتين. يمكنك استخدام طرق تقطيع السلاسل أو الطرق المضمنة لعكس السلاسل.
  • للتحقق مما إذا كانت هناك سلسلتان من الجناس الناقصة ، تحقق مما إذا كانت نسختهما المصنفة متساوية. ولفرز سلسلة ، استخدم وظيفة الفرز المضمنة ().
  • للتحقق مما إذا كان الاسم في حالة أحرف العنوان ، استخدم طريقة .istitle () للتحقق وطريقة .title () للحصول على نسخة مغلفة بالعنوان من السلسلة.

أتمنى أن تكون قد استمتعت بهذا البرنامج التعليمي حول سلاسل Python. كخطوة تالية ، تعلم كيفية استخدام list comprehensions في Python أو تعرف على عامل التشغيل غير المتكافئ في Python.

نتمنى لك الاستمتاع بالتعلم والبرمجة!