اذهب إلى المحتوى

السؤال

نشر

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

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)

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

Recommended Posts

  • 0
نشر

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

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

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

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

المصدر

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...