• 0

لماذا تنسى الحلقة حذف بعض العناصر في بايثون؟

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

text = "Hey look Words!"

def anti_vowel(text):

    textlist = list(text)

    for char in textlist:
        if char.lower() in 'aeiou':
            textlist.remove(char)

    return "".join(textlist)

print anti_vowel(text)

فما سبب هذه المشكلة؟

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
  • 0

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

for char in textlist[:]: #shallow copy of the list
    # etc

ويمكنك أيضا الاستغناء عن حلقة التكرار لحذف حروف العلة عن طريق استعمال دالة translate() كما تظهر في المثال التالي:

vowels = 'aeiou'
vowels += vowels.upper()
text.translate(None, vowels)

المصدر

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن