إذا كنت تريد حساب مجموع عناصر List في بايثون، فأسهل حل غالبًا هو استخدام الدالة الجاهزة sum(). لكن فهم طريقة الجمع يدويًا باستخدام for loop مهم أيضًا؛ لأنه يوضح لك كيف تتغير قيمة المجموع خطوة بخطوة داخل الحلقة.
في هذا الدرس الرابع من سلسلة بايثون بالمثال سنجمع عناصر قائمة رقمية باستخدام sum()، ثم نكرر الفكرة باستخدام for و+=. وسنرى أيضًا ماذا يحدث مع القائمة الفارغة، والقائمة التي تحتوي أرقامًا مكتوبة كنصوص، وكيف نحسب المجموع من إدخال المستخدم.
الهدف ليس حفظ أكثر من طريقة، بل معرفة متى تستخدم الحل المباشر ومتى تحتاج إلى حلقة تمنحك تحكمًا أكبر أثناء معالجة العناصر.
{getToc} $title={محتوى المقال}
{alertInfo} الخلاصة السريعة: استخدمsum()عندما تريد مجموع قيم رقمية مباشرة، واستخدمfor loopعندما تريد فهم خطوات الجمع أو تنفيذ منطق إضافي أثناء المرور على العناصر.
قبل البدء، يفضّل أن تكون مرتاحًا مع القوائم Lists في بايثون و الحلقات Loops. ويمكنك تجربة الأمثلة داخل محرر بايثون العرب.
كيف أحسب مجموع عناصر List في بايثون؟
لنفترض أن لدينا القائمة التالية:
numbers = [10, 20, 30, 40]
نريد الحصول على:
100
أي أن بايثون ستجمع القيم الأربع:
10 + 20 + 30 + 40
الطريقة الأولى: استخدام sum() لجمع عناصر القائمة
الدالة sum() هي الطريقة الأبسط عندما تحتوي القائمة على قيم رقمية وتريد مجموعها مباشرة:
numbers = [10, 20, 30, 40]
total = sum(numbers)
print(total)
الناتج:
100
تأخذ sum() العناصر من الـiterable وتعيد مجموعها. والقيمة الابتدائية الافتراضية للمجموع هي 0.
{alertSuccess}
إذا كان المطلوب مجرد جمع قائمة أرقام، فـsum() هي الحل الذي ينبغي أن تبدأ به بدل كتابة حلقة يدويًا بلا حاجة.
ماذا تعيد sum() مع قائمة فارغة؟
القائمة الفارغة لا تسبب خطأ مع sum(). لأن قيمة البداية الافتراضية هي صفر:
numbers = []
print(sum(numbers))
الناتج:
0
هذه نقطة تختلف عن دوال مثل max() وmin() التي تحتاج إلى وجود عنصر للمقارنة إذا لم تُعطَ قيمة افتراضية مناسبة.
الطريقة الثانية: جمع عناصر List باستخدام for loop
رغم أن sum() هي الطريقة المباشرة، فإن كتابة الجمع يدويًا تساعدك على فهم فكرة المتغير المتراكم Accumulator:
numbers = [10, 20, 30, 40]
total = 0
for number in numbers:
total = total + number
print(total)
الناتج:
100
كيف تتغير قيمة total؟
| الدورة | number | total بعد الجمع |
|---|---|---|
| الأولى | 10 |
10 |
| الثانية | 20 |
30 |
| الثالثة | 30 |
60 |
| الرابعة | 40 |
100 |
استخدام += بدل total = total + number
يمكنك اختصار هذا السطر:
total = total + number
إلى:
total += number
فيصبح البرنامج:
numbers = [10, 20, 30, 40]
total = 0
for number in numbers:
total += number
print(total)
{alertInfo}+=ليست طريقة ثالثة مختلفة لحساب المجموع؛ هي فقط صيغة مختصرة لتحديث قيمةtotalداخل الحلقة.
sum() أم for loop: أيهما أستخدم؟
| الحالة | الأنسب | السبب |
|---|---|---|
| جمع قائمة أرقام مباشرة | sum() |
أقصر وأوضح ويعبّر عن الهدف مباشرة. |
| تعلم طريقة تراكم المجموع | for loop |
توضح كيف تتغير القيمة في كل دورة. |
| تطبيق شرط أو منطق إضافي أثناء الجمع | for loop أو تعبير مناسب |
تمنحك تحكمًا في كل عنصر قبل إضافته. |
جمع الأعداد الصحيحة والعشرية
يمكن أن تحتوي القائمة على int وfloat معًا:
values = [10, 20.5, 4.25]
total = sum(values)
print(total)
الناتج:
34.75
إذا كنت تتعامل مع أعداد عشرية، فتذكر أن float لها قواعد الدقة العشرية المعتادة في الحاسوب؛ لكن ذلك موضوع منفصل عن فكرة جمع القائمة نفسها.
لماذا تفشل sum() إذا كانت بعض الأرقام نصوصًا؟
هذا المثال لا يمثل قائمة رقمية كاملة:
values = [10, "20", 30]
print(sum(values))
القيمة "20" من النوع str وليست رقمًا. لذلك يجب تحويل القيم النصية الرقمية قبل جمعها.
numbers = ["10", "20", "30"]
converted = []
for number in numbers:
converted.append(int(number))
print(sum(converted))
الناتج:
60
إذا كان أحد النصوص لا يمثل عددًا صحيحًا، فقد يظهر ValueError. عندها راجع
حل خطأ ValueError invalid literal for int في بايثون.
هل يمكن استخدام sum() لدمج النصوص؟
لا تستخدم sum() لجمع قائمة نصوص مثل:
words = ["Arab", "Python"]
sum() موجهة أساسًا للجمع الرقمي. إذا أردت دمج النصوص فالأداة المناسبة عادة هي join():
words = ["Arab", "Python"]
print(" ".join(words))
الناتج:
Arab Python
حساب مجموع أرقام يدخلها المستخدم
لنجعل المثال أكثر عملية. سيكتب المستخدم أرقامًا مفصولة بمسافات:
user_input = input("Enter numbers separated by spaces: ")
parts = user_input.split()
numbers = []
for part in parts:
numbers.append(int(part))
print("Total:", sum(numbers))
إذا أدخل:
10 20 30
سيكون الناتج:
Total: 60
بعد أن تتعلم List Comprehension في بايثون يمكنك كتابة خطوة التحويل بصورة أقصر، لكن الحلقة العادية أوضح في هذه المرحلة لفهم كل خطوة.
مثال عملي: مجموع الدرجات وحساب المتوسط
grades = [80, 90, 75, 85]
total = sum(grades)
average = total / len(grades)
print("Total:", total)
print("Average:", average)
الناتج:
Total: 330
Average: 82.5
لاحظ أن حساب المتوسط بقسمة المجموع على len(grades) يحتاج إلى قائمة غير فارغة؛ لأن القسمة على صفر ستسبب خطأ.
أخطاء شائعة عند جمع عناصر List
1. وضع نص داخل قائمة الأرقام
تأكد من نوع البيانات قبل الجمع. القيمة "20" نص، بينما 20 عدد.
2. نسيان total = 0 مع الحلقة
إذا كنت تستخدم for loop وتريد تراكم المجموع، يجب أن تبدأ بقيمة مناسبة:
total = 0
3. وضع print داخل الحلقة دون قصد
إذا كان print(total) داخل الحلقة، فسترى المجموع بعد كل دورة:
numbers = [10, 20, 30]
total = 0
for number in numbers:
total += number
print(total)
أما إذا أردت النتيجة النهائية فقط، فضع print(total) بعد انتهاء الحلقة.
{alertWarning}
المسافة البادئة تغير معنى البرنامج. سطر print داخل الحلقة ينفذ في كل دورة، وخارج الحلقة ينفذ مرة واحدة بعد اكتمال الجمع.
أسئلة شائعة
ما أسرع طريقة لحساب مجموع List في بايثون؟
استخدم sum(numbers) عندما تكون لديك قيم رقمية وتريد مجموعها مباشرة.
ماذا تعيد sum([])؟
تعيد 0 لأن قيمة البداية الافتراضية في sum() هي صفر.
هل sum تعمل مع int وfloat معًا؟
نعم، يمكن جمع قيم رقمية صحيحة وعشرية في نفس iterable.
لماذا يظهر TypeError عند استخدام sum؟
من الأسباب الشائعة وجود قيمة غير رقمية مثل str داخل البيانات التي تحاول جمعها.
متى أستخدم for بدل sum؟
استخدم الحلقة عندما تحتاج إلى منطق إضافي لكل عنصر أو عندما تريد تعلم كيفية تراكم المجموع خطوة بخطوة.
روابط مفيدة من بايثون العرب
- شرح Lists في بايثون للمبتدئين
- شرح Loops في بايثون للمبتدئين
- شرح List Comprehension في بايثون
- حل ValueError عند تحويل النص إلى int
- توثيق Python الرسمي لدالة sum()
الخلاصة
لحساب مجموع عناصر List في بايثون، ابدأ بـsum() عندما تكون البيانات رقمية وتريد النتيجة مباشرة. وإذا كنت تتعلم الحلقات أو تحتاج إلى تنفيذ خطوات إضافية أثناء المرور على العناصر، فاستخدم for loop ومتغيرًا مثل total.
وتذكر أن += ليست طريقة مستقلة للجمع، بل اختصار لتحديث قيمة المجموع داخل الحلقة. كما أن القائمة الفارغة تعطي 0 مع sum()، بينما القيم النصية يجب تحويلها إلى أرقام قبل جمعها.
{alertSuccess} اختر أبسط أداة تعبّر عن هدفك:sum()للمجموع المباشر، وforعندما تحتاج إلى تحكم إضافي.
المثال التالي في السلسلة
بعد أن تعلمت حساب المجموع، انتقل إلى
بايثون بالمثال 5: إيجاد أكبر وأصغر رقم في List باستخدام Python
لتتعلم استخدام max() وmin() ثم تنفيذ الفكرة يدويًا باستخدام الحلقة.
تمرين بسيط لك
أنشئ قائمة أسعار، ثم اطبع مجموعها باستخدام sum(). بعد ذلك اكتب الحل مرة ثانية باستخدام for loop و+= وتأكد أن النتيجتين متساويتان.
prices = [25, 40, 15, 20]