الفصل 8

الفصل 8

8.1 عمليات السلاسل النصية

1.
a. بما أن قيمة آسكي للحرف a أقل من قيمة آسكي للحرف b، فإن ناتج "aaa" < "aab" هو صحيح.
2.
b. بما أن "a" أقصر من "aa" ، والبادئة "aa" بطول 1 تساوي المعامل الثاني ( "a" )، تُعتبر السلسلة النصية الأقصر هي الأصغر. وعليه، فإن "aa" < "a" تُقيّم إلى خطأ.
3.
c. بينما توجد جميع الأحرف في "aples" ضمن "apples" ، إلا أن الأحرف ليست متسلسلة، لذا فإن السلسلة النصية "aples" ليست سلسلة فرعية من "apples" . لذلك، فإن "aples" in "apples" تُرجع خطأ.
4.
a. تقوم "aBbA".lower() بتحويل جميع الأحرف إلى أحرف صغيرة، والناتج هو "abba" .
5.
b. تقوم "aBbA".upper() بتحويل جميع الأحرف إلى أحرف كبيرة، والناتج هو "ABBA" .
6.
a. تقوم upper() بتحويل "a" إلى حرف كبير ( "A" ). عند التحقق من "a".upper() == "A"، يكون الناتج صحيحًا.

8.2 تقطيع السلسلة النصية

1.
b. بما أن الفهرسة تبدأ من 0، فإن الحرف الموجود في الفهرس 1 هو الحرف الثاني في السلسلة النصية، وهو "e" .
2.
b. بما أن الفهرسة السالبة تبدأ من -1 من يمين السلسلة النصية إلى اليسار، فإن "u" يقع في الفهرس -2.
3.
a. الحرف "e" في السلسلة النصية "chance" له فهرس -1 (فهرسة سالبة) و 5 (فهرسة موجبة).
4.
b. a_string[2:4] هو تقطيع يتضمن الحرفين الثالث والرابع، وهو "ll" .
5.
b. التقطيع [-3:-1] يتضمن الأحرف في الفهرسين -3 و -2، وهما "oo" .
6.
b. تقطيع السلسلة النصية greeting[3:] هو السلسلة الفرعية التي تبدأ من الفهرس 3 حتى نهاية السلسلة النصية، وهي "Leila" .
7.
b. لتعديل محتوى السلسلة النصية، يجب إنشاء متغير جديد بالتعديلات المطلوبة.
8.
a. محاولة إسناد قيمة إلى فهرس أو نطاق من الفهارس في سلسلة نصية تؤدي إلى TypeError: 'str' object does not support item assignment.
9.
c. الحرف الموجود في الفهرس 1، وهو "o" ، يحل محل محتوى المتغير str . وعليه، فإن تعليمة الطباعة تطبع "o" .

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

1.
c. بما أن "a" هي سلسلة فرعية من "an umbrella" ، فإن ناتج "a" in "an umbrella" هو True .
2.
b. "ab" ليست سلسلة فرعية من "arbitrary" ؛ وبالتالي، فإن الناتج هو False .
3.
a. بما أن "" هي سلسلة فرعية بطول 0 لـ "string" ، فإن الناتج هو True .
4.
a. تتكرر حلقة التكرار المحدد عبر الأحرف في "string" وتطبع جميع الأحرف بدون أي حرف فاصل.
5.
c. تتكرر الشِفرة المعطاة على الأحرف في السلسلة النصية "abca" ، وفي كل مرة يتم ملاحظة الحرف "a" ، يزداد متغير العداد بمقدار 1. بما أن "a" يظهر مرتين في "abca" ، فسيكون الناتج 2 .
6.
c. تتكرر الشِفرة على الأحرف في "cab" وتطبع ما يعادل كل حرف بالحرف الكبير. لذلك، فإن الناتج هو "CAB" .
7.
c. تُرجع "aaa".count("a") القيمة 3 ، وهو عدد مرات ظهور "a" في السلسلة النصية "aaa" .
8.
a. لا يوجد أي ظهور للحرف "b" في "weather" ؛ وبالتالي، فإن ناتج "weather".count("b") هو 0 .
9.
b. توجد سلسلتان فرعيتان "aa" في "aaa" ، إحداهما تبدأ من الفهرس 0 والأخرى تبدأ من الفهرس 1.
10.
a. تُرجع دالّة find() الفهرس لأول ظهور للسلسلة الفرعية في السلسلة النصية المعطاة. الفهرس لأول ظهور للحرف "a" هو 1.
11.
b. بما أن "c" ليست سلسلة فرعية في "banana" ، فإن دالّة find() تُرجع -1.
12.
a. بما أن "banana" ليست سلسلة فرعية من "b" ، يتم إرجاع -1.
13.
a. تُرجع دالّة index() فهرس بداية أول ظهور لسلسلة فرعية في السلسلة النصية المعطاة. فهرس أول ظهور للحرف "o" في "school" هو 3.
14.
c. السلسلة الفرعية "ooo" لا توجد في السلسلة النصية "ooo" ، وبالتالي تُرجع دالّة index() خطأ القيمة.
15.
a. تُرجع sentence.index(" ") فهرس أول حرف مسافة. تطبع تعليمة الطباعة بادئة الجملة التي تنتهي قبل أول حرف مسافة مباشرة، لذا فإن الناتج هو "This" .

8.4 تنسيق السلاسل النصية

1.
c. يتم استبدال "Ana" بحقل الاستبدال {} في القالب، وبالتالي فإن الناتج هو "Hello Ana!" .
2.
b. يتم تمرير الوسيطين إلى القالب "{}:{}" الذي يُخرج "One:1" .
3.
a. يتم تمرير وسائط دالّة format() بالترتيب وسيتم استبدالها بحقول الاستبدال. قد يتم تجاهل الوسائط الإضافية بواسطة القالب وتبقى غير مستخدمة.
4.
c. يتم استبدال "Bengio" في حقل الاستبدال المُسمَّى المرتبط بالعلامة name؛ وبالتالي، فإن الناتج هو "Hey Bengio!" .
5.
b. بما أن قالب السلسلة النصية يستخدم وسيطًا مُسمَّى، فإن المدخلات لا تُقبل إلا من خلال المفاتيح المقابلة. وبالتالي، تُنشئ الشِفرة خطأ المفتاح: 'name'.
6.
b. يتم استبدال المتغير greeting الذي قيمته "Hi" بحقل استبدال التحية. ويتم الأمر نفسه لحقل استبدال الاسم ومتغير الاسم. الناتج هو "Hi Jess" .
7.
b. يحدد القالب الحد الأدنى لطول الحقل name ليكون 12، لذا فإن len(formatted_name) هو 12 .
8.
c. تحدد مواصفات المحاذاة وطول الحقل تنسيق حقل greeting ليكون بطول ستة أحرف ومحاذًا لليمين. لذلك، سيأخذ المتغير formatted_greeting القيمة " Hello" ، والحرف 0 من السلسلة النصية هو حرف مسافة.
9.
c. تفرض مواصفات طول الحقل الحد الأدنى لطول السلسلة النصية. المدخلات التي تكون أطول من الحد الأدنى المحدد لن يتم تعديلها.
10.
c. تحدد مواصفات التنسيق .3 أن دقة الناتج يجب أن تكون ثلاثة أرقام عشرية.
11.
a. تُخرج مواصفات {:1>3d} عددًا من 3 أرقام في الناتج، وإذا لم يكن للوسيط المعطى ثلاثة أرقام، فسيتم حشو الرقم بالآحاد من الجانب الأيسر.
12.
b. تُنسق {:+d} العدد العشري بإضافة علامة الموجب.

8.5 تقسيم ودمج السلاسل النصية

1.
b. عندما يتم تقسيم "1*2*3*" إلى سلاسل فرعية باستخدام الفاصل '*' ، يكون الناتج ["1", "2", "3"].
2.
c. عندما يتم تقسيم "a year includes 12 months" إلى سلاسل فرعية باستخدام أحرف المسافة الفارغة، يتم إنشاء القائمة ["a", "year", "includes", "12", "months"].
3.
b. عند تقسيم السلسلة النصية متعددة الأسطر، يكون الناتج ['This', 'is', 'a', 'test'].
4.
c. يتم ربط عناصر القائمة elements معًا باستخدام فاصلة، لذا فإن الناتج هو 'A,beautiful,day,for,learning' .
5.
b. ناتج "sss".join(["1","2"]) هو "1sss2" ، وطوله 5.
6.
b. بما أن الفاصل هو سلسلة نصية فارغة، فسيتم ربط عناصر القائمة بدون فاصل وسيكون الناتج "12" .