البحث في السلاسل النصية واختبارها

8.3 البحث في السلاسل النصية واختبارها

أهداف التعلم

في نهاية هذا القسم، ينبغي أن تكون قادرًا على:

  • استخدام العامل in لتحديد ما إذا كانت سلسلة نصية معينة تحتوي على سلسلة فرعية.
  • استدعاء التابع count() لعد عدد السلاسل الفرعية في سلسلة نصية معينة.
  • البحث في سلسلة نصية للعثور على سلسلة فرعية باستخدام التابع find().
  • استخدام التابع index() للعثور على فهرس أول ظهور لسلسلة فرعية في سلسلة نصية معينة.
  • كتابة حلقة التكرار المحدد على السلاسل النصية باستخدام العامل in.

العامل in

يمكن استخدام العامل المنطقي in للتحقق مما إذا كانت سلسلة نصية تحتوي على سلسلة نصية أخرى. يُرجع in القيمة True إذا كانت السلسلة النصية الأولى موجودة في السلسلة النصية الثانية، وFalse بخلاف ذلك.

نقطة تحقق

ماذا يوجد في العبارة؟

مفاهيم تطبيقية

استخدام العامل in للعثور على السلاسل الفرعية

1.
ما ناتج ("a" in "an umbrella")؟
  1. 2
  2. False
  3. True
  4. 1
2.
ما ناتج ("ab" in "arbitrary")؟
  1. True
  2. False
3.
ما ناتج ("" in "string")؟
  1. True
  2. False

حلقة التكرار المحدد باستخدام العامل in

يمكن استخدام العامل in للتكرار على الأحرف في سلسلة نصية باستخدام حلقة التكرار المحدد. في كل تكرار لحلقة for، يتم قراءة حرف واحد وسيكون هو مُتغيِّر الحلقة لذلك التكرار.

نقطة تحقق

حلقة التكرار المحدد باستخدام العامل in

مفاهيم تطبيقية

استخدام العامل in ضمن حلقة التكرار المحدد

4.
ما ناتج الشِفرة التالية؟
for c in "string":
  print(c, end = "")
  1. string
  2. s
    t
    r
    i
    n
    g
  3. s t r i n g
5.
ما ناتج الشِفرة التالية؟
count = 0
for c in "abca":
  if c == "a":
    count += 1
print(count)
  1. 0
  2. 1
  3. 2
6.
ما ناتج الشِفرة التالية؟
word = "cab"
for i in word:
  if i == "a":
    print("A", end = "")
  if i == "b":
    print("B", end = "")
  if i == "c":
    print("C", end = "") 
  1. cab
  2. abc
  3. CAB
  4. ABC

count()

يحسب التابع count() عدد مرات ظهور سلسلة فرعية في سلسلة نصية معينة. إذا لم تكن السلسلة الفرعية المعطاة موجودة في السلسلة النصية المعطاة، تُرجَع القيمة 0.

نقطة تحقق

عد عدد مرات ظهور سلسلة فرعية

مفاهيم تطبيقية

استخدام count() لعد عدد السلاسل الفرعية

7.
ما ناتج (aaa".count("a"))؟
  1. True
  2. 1
  3. 3
8.
ما ناتج ("weather".count("b"))؟
  1. 0
  2. -1
  3. False
9.
ما ناتج ("aaa".count("aa"))؟
  1. 1
  2. 2
  3. 3

find()

يُرجع التابع find() فهرس أول ظهور لسلسلة فرعية في سلسلة نصية معينة. إذا لم تكن السلسلة الفرعية موجودة في السلسلة النصية المعطاة، تُرجَع القيمة -1.

نقطة تحقق

العثور على الفهرس الأول لسلسلة فرعية

مفاهيم تطبيقية

استخدام find() لتحديد موقع سلسلة فرعية

10.
ما ناتج "banana".find("a")؟
  1. 1
  2. 3
  3. 5
11.
ما ناتج "banana".find("c")؟
  1. 0
  2. -1
  3. ValueError
12.
ما ناتج "b".find("banana")؟
  1. -1
  2. 0
  3. ValueError

index()

يعمل التابع index() بشكل مشابه للتابع find()، حيث يُرجع التابع فهرس أول ظهور لسلسلة فرعية في سلسلة نصية معينة. يفترض التابع index() أن السلسلة الفرعية موجودة في السلسلة النصية المعطاة؛ وإلا، فإنه يطلق خطأ ValueError.

مثال 8.4

الحصول على جزء الدقائق من الوقت

لنفترض أن قيمة الوقت معطاة كجزء من سلسلة نصية باستخدام التنسيق "hh:mm"، حيث يمثل "hh" الساعة ويمثل "mm" الدقائق. لاسترداد جزء الدقائق فقط من السلسلة النصية، يمكن استخدام الشِفرة التالية:

    time_string = "The time is 12:50"
    index = time_string.index(":")
    print(time_string[index+1:index+3])

ناتج الشِفرة أعلاه هو:

    50

مفاهيم تطبيقية

استخدام index() لتحديد موقع سلسلة فرعية

13.
ما ناتج "school".index("o")؟
  1. 3
  2. 4
  3. -3
14.
ما ناتج "school".index("ooo")؟
  1. 3
  2. 4
  3. ValueError
15.
ما ناتج الشِفرة التالية؟
sentence = "This is a sentence"
index = sentence.index(" ")
print(sentence[:index])
  1. "This"
  2. "This "
  3. "sentence"

جرّب بنفسك

العثور على جميع المسافات

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

    Input: "This is great"
    Prints:
    2
    Thisisgreat