تمارين فهرسة القوائم والأطوال
لديك قائمة things وقيمة to_find. اطبع أول فهرس تظهر عنده to_find داخل القائمة؛ أي أصغر عدد i يجعل things[i] مساوية لـto_find. مثلًا، إذا كانت القيم:
things = ['on', 'the', 'way', 'to', 'the', 'store']
to_find = 'the'
فيجب أن يطبع البرنامج 1.
يمكنك افتراض أن to_find موجودة في القائمة مرة واحدة على الأقل.
تحتاج إلى فحص كل الفهارس الممكنة في
thingsلمعرفة الفهرس الصحيح.لفحص كل الفهارس، استخدم حلقة على
range(len(things)).للتحقق أن فهرسًا ما هو المطلوب، ستحتاج إلى:
if
- استخدام الفهرس داخل عملية فهرسة.
==
بما أنك تبحث عن أول فهرس، يجب إيقاف الحلقة عند العثور عليه.
تعلمت مؤخرًا كيف توقف الحلقة قبل نهايتها.
استخدم
break.
جميل!
وبالمناسبة، الفهرسة وlen() تعملان مع النصوص أيضًا. جرّبهما في الطرفية.
إليك تمرينًا آخر. لديك نصان متساويان في الطول، مثل:
string1 = 'Hello'
string2 = 'World'
اطبعهما رأسيًا جنبًا إلى جنب، مع مسافة بين كل محرفين متقابلين:
H W
e o
l r
l l
o d
هل جرّبت الفهرسة و
len()مع النصوص في الطرفية؟انسَ الحلقات للحظة. كيف تطبع السطر الأول فقط، أي أول محرف من كل واحد من النصين؟
في السطر الثاني تريد طباعة المحرف الثاني من كل نص، وهكذا.
ستحتاج إلى حلقة
for.ستحتاج إلى الفهرسة.
ستحتاج إلى
range.ستحتاج إلى
len.ستحتاج إلى
+.ستحتاج إلى فهرسة النصين.
استخدم الفهرس نفسه مع النصين في كل مرة للحصول على المحرفين المتقابلين.
رائع!
غالبًا يشبه حلك شيئًا كهذا:
for i in range(len(string1)):
char1 = string1[i]
char2 = string2[i]
print(char1 + ' ' + char2)
لكن هذا لا يعمل جيدًا إذا كان النصان مختلفين في الطول. بل إن الخطأ يختلف بحسب ما إذا كان string1 أو string2 هو الأطول.
تحديك التالي هو إصلاح هذه المشكلة بملء المحارف «المفقودة» بمسافات.
فمثلًا، إذا كانت القيم:
string1 = 'Goodbye'
string2 = 'World'
فيجب أن يكون الناتج:
G W
o o
o r
d l
b d
y
e
وإذا كانت القيم:
string1 = 'Hello'
string2 = 'Elizabeth'
فيجب أن يكون الناتج:
H E
e l
l i
l z
o a
b
e
t
h
الحل له البنية العامة والعناصر الأساسية نفسها في الحل السابق، لكنه أطول ويحتاج إلى بعض الأفكار الإضافية.
ماذا يجب أن تضع داخل
range()؟ لاlen(string1)ولاlen(string2)يكفي وحده.تحتاج إلى دورة واحدة لكل محرف في النص الأطول.
أي أنك تحتاج إلى
range(<length of the longest string>).بعبارة أخرى، تحتاج إلى إيجاد الأكبر بين
len(string1)وlen(string2). سبق أن حللت تمرينًا مشابهًا.بعد ضبط
for i in range(...)، ستكون قيمةiأحيانًا أكبر من فهرس صالح في أحد النصين. تحقق من ذلك قبل الفهرسة.تذكر أن أكبر فهرس صالح في
string1هوlen(string1) - 1، أماlen(string1)فهو أكبر من اللازم.ستحتاج إلى جملتي
if، واحدة لكل نص.عندما لا يكون
string1[i]صالحًا، اجعل مثلًاchar1 = ' '.
عمل ممتاز! خذ استراحة قصيرة؛ لقد استحققتها.