برمجة

حل المسائل: عدّاد كلمات

حوّل مشكلة حقيقية إلى برنامج خطوة بخطوة.

كل الدروس · دروس بايثون: تعلّم من الصفر

كيف تقارب المسألة

قبل كتابة الكود اشرح المهمة بجمل بسيطة، ثم قسّمها إلى خطوات صغيرة واختبر كل خطوة على حدة. هذا يجعل البرنامج الكبير قابلاً للإدارة.

  1. ما المعطى وما المطلوب؟ اكتب مثالًا للمدخل والمخرج المتوقع.
  2. حلّها يدويًا ودوّن الخطوات.
  3. حوّل الخطوات إلى دوال.
  4. اختبر على أمثلة صغيرة ثم جرّب الحالات الحدّية.

مثال: عدّاد الكلمات

المهمة: عدّ مرات ظهور كل كلمة في نص. الخطة: حوّل النص إلى أحرف صغيرة ونظّفه من علامات الترقيم وقسّمه إلى كلمات وعُدّ في dict ثم اعرض الأكثر تكرارًا.

def clean(text):
    keep = "abcdefghijklmnopqrstuvwxyz əöüğışç"
    return "".join(ch for ch in text.lower() if ch in keep)

def count_words(text):
    counts = {}
    for word in clean(text).split():
        counts[word] = counts.get(word, 0) + 1
    return counts

def top(counts, n=3):
    return sorted(counts.items(), key=lambda p: p[1], reverse=True)[:n]

sample = "The cat and the dog. The end!"
print(top(count_words(sample)))   # [('the', 3), ('cat', 1), ('and', 1)]

كل دالة تؤدي مهمة واحدة ويمكن اختبارها منفردة، وبعدها يسهل توسيع البرنامج: القراءة من ملف وحفظ النتيجة وتجاهل الكلمات القصيرة جدًا.

العثور على الأخطاء

إذا تصرّف البرنامج بشكل غير متوقع فاطبع القيم الوسيطة وابحث عن النقطة التي ينحرف عندها الواقع عن توقعك. وتحميك فحوصات assert الصغيرة عند تعديل الدالة لاحقًا.

assert count_words("a a b") == {"a": 2, "b": 1}
assert top({"x": 1, "y": 5}, 1) == [("y", 5)]
print("all checks passed")

المؤلف: Nibras Code