الرئيسية تعليم لغات البرمجة الدرس العاشر في بايثون: التعامل مع المدخلات واستقبال بيانات المستخدم

الدرس العاشر في بايثون: التعامل مع المدخلات واستقبال بيانات المستخدم

amr gamal سبتمبر 17, 2026

الدرس العاشر في بايثون: التعامل مع المدخلات واستقبال بيانات المستخدم

في الدروس السابقة، تعلّمنا كيف نجعل لغة بايثون تطبع البيانات على الشاشة باستخدام الدالة print()، وكيف نخزن المعلومات في متغيرات ونقوم بعمليات حسابية ومنطقية عليها. لكن البرامج التي كتبناها حتى الآن كانت صامتة ومبرمجة مسبقاً بنتيجة ثابتة لا تتغير مهما تشغّلت المرة تلو الأخرى. البرنامج يأخذ أرقاماً محددة أنت كتبتَها بنفسك أثناء كتابة الكود، ويعطيك النتيجة. لكن البرامج الحقيقية والمفيدة تحتاج إلى التفاعل مع البشر. تحتاج إلى أن تسأل المستخدم عن اسمه، أو عمره، أو الرقم الذي يريد حسابه، وتنتظر إجابته لتتخذ بناءً عليها قرارات معينة. في هذا الدرس، سننتقل خطوة واسعة نحو بناء برامج تفاعلية حقيقية عبر تعلم كيفية استقبال المدخلات من المستخدم باستخدام الدالة الأساسية في بايثون والمخصصة لهذا الغرض.

دالة المدخلات الأساسية: input()

لكي تطلب من المستخدم إدخال بيانات في لغة بايثون، توفر لك اللغة دالة مدمجة بسيطة تسمى input(). عندما ينفذ مفسر بايثون هذه الدالة، يتوقف البرنامج عن العمل مؤقتاً وينتظر المستخدم حتى يكتب شيئاً على لوحة المفاتيح ويضغط على مفتاح الإدخال (Enter). يمكنك تمرير نص إرشادي داخل الأقواس لهذه الدالة، وهو ما يُعرف بالـ Prompt. هذا النص يظهر للمستخدم على الشاشة ليخبره بما يجب عليه إدخاله بالضبط.

دعنا نرى مثالاً بسيطاً ومباشراً يوضح كيفية استخدام الدالة وتخزين النتيجة في متغير لاستخدامها لاحقاً في طباعة رسالة ترحيبية مخصصة:

name = input("ما هو اسمك؟ ")
print("أهلاً بك يا " + name)

عندما تشغل هذا الكود، سيطبع البرنامج عبارة «ما هو اسمك؟ » على الشاشة، ثم يتوقف وينتظرك لتكتب اسمك وتضغط Enter. لنفترض أنك كتبت «أحمد»، سيخزن بايثون كلمة «أحمد» داخل المتغير name، ثم ينتقل للسطر التالي ليطبع «أهلاً بك يا أحمد».

طبيعة البيانات المستلمة: النصوص أولاً

هناك قاعدة أساسية وخطيرة يجب على كل مطور مبتدئ في بايثون معرفتها وعدم نسيانها أبداً: دالة input() تعيد دائماً ما يكتبه المستخدم على شكل نص (String)، بغض النظر عما إذا كتبه المستخدم كحروف أو أرقام. هذا السلوك منطقي لأن لوحة المفاتيح ترسل إشارات حرفية. لكنه يسبب مشكلة شائعة جداً عندما نريد التعامل مع المدخلات كأرقام لإجراء عمليات حسابية.

دعنا نرى ما يحدث لو حاولنا جمع رقمين يدخلهما المستخدم دون انتباه لهذا النوع من البيانات:

num1 = input("أدخل الرقم الأول: ")
num2 = input("أدخل الرقم الثاني: ")
sum_result = num1 + num2
print("المجموع هو: " + sum_result)

إذا قام المستخدم بإدخال الرقم 5 ثم الرقم 3، فإن المتوقع رياضياً أن يكون المجموع 8. لكن ما سيطبعه البرنامج على الشاشة هو 53! لماذا حدث ذلك؟ لأن بايثون لم تقم بجمع الرقمين رياضياً (Addition)، بل قامت بلصق النصين بجانب بعضهما البعض (String Concatenation)، تماماً كما ندمج الكلمات والنصوص معاً.

تحويل نوع البيانات (Type Casting)

لكي يتعامل بايثون مع المدخلات كأرقام، يجب علينا تحويل النص الناتج من دالة input() إلى النوع المناسب يدوياً باستخدام الدوال المخصصة للتحويل التي تعلمناها في الدروس السابقة، مثل int() للأعداد الصحيحة أو float() للأعداد العشرية. يمكننا إجراء هذا التحويل بطريقتين؛ إما بعد استقبال المدخل، أو أثناء استقباله مباشرة داخل دالة الإدخال لتوفير أسطر البرمجة وجعل الكود أكثر اختصاراً ونظافة.

دعنا نرى الطريقة الأكثر احترافية ونظافة لجمع الأرقام بطريقة صحيحة:

num1 = int(input("أدخل الرقم الأول: "))
num2 = int(input("أدخل الرقم الثاني: "))
sum_result = num1 + num2
print("المجموع الصحيح هو:", sum_result)

في هذا الكود المحسّن، قمنا بتغليف دالة input() بالكامل داخل الدالة int(). الآن، عندما يدخل المستخدم الرقم 5، تأخذه الدالة input() كنص، ثم تمرره فوراً إلى الدالة int() لتقوم بتحويله إلى عدد صحيح، ويتم تخزينه في المتغير كقيمة رقمية بحتة. النتيجة الآن ستكون 8 بشكل صحيح تماماً.

مثال عملي متكامل: حاسبة مؤشر كتلة الجسم المبسطة

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

print("--- برنامج حساب مؤشر الكتلة المبسط ---")

# استقبال الوزن وتحويله إلى رقم عشري (float) لأنه قد يحتوي على كسور
weight = float(input("أدخل وزنك بالكيلوجرام (مثال 70.5): "))

# استقبال الطول وتحويله إلى رقم عشري أيضاً
height = float(input("أدخل طولك بالأمتار (مثال 1.75): "))

# حساب المؤشر (الوزن مقسوماً على مربع الطول)
bmi = weight / (height ** 2)

# طباعة النتيجة مع تحويل الناتج إلى نص لدمجه مع الرسالة
print("مؤشر كتلة جسمك هو: " + str(bmi))

في هذا المثال، استخدمنا نوع البيانات float() بدلاً من int() لأن الأوزان والأطوال غالباً ما تحتوي على كسور عشرية (مثل 1.75 متراً). كما استخدمنا الدالة str() في سطر الطباعة الأخير لتحويل الناتج الحسابي الرقمي إلى نص، لكي نتمكن من عرضه بجانب عبارة نصية توضيحية دون أن يرفض بايثون تنفيذ الكود بسبب محاولة دمج نص مع رقم بشكل مباشر.

أخطاء شائعة عند التعامل مع المدخلات وكيفية تجنبها

بما أن المبتدئين غالباً ما يقعون في بعض الفخاخ عند التعامل مع تفاعل المستخدمين، من المفيد جداً تسليط الضوء على أبرز الأخطاء لكي تتجنبها منذ اليوم الأول في مسيرتك البرمجية:

  • نسيان تحويل النوع: محاولة إجراء عمليات حسابية أو مقارنات عددية على متغيرات قادمة مباشرة من input() دون تحويلها إلى int أو float، مما يؤدي إلى ظهور رسالة خطأ مزعجة من نوع TypeError.
  • التعامل مع الإدخال الخاطئ: إذا طلبت من المستخدم إدخال رقم صحيح باستخدام int(input()) وقام المستخدم بكتابة حروف أو كلمات مثل "خمسة"، فسيتوقف البرنامج فوراً ويعطي خطأ من نوع ValueError. في المستوى المبتدئ نتجنب ذلك بتأكيد التوجيه للمستخدم، بينما في المستويات المتقدمة يتم التعامل مع هذه الأخطاء باستخدام كتل الحماية البرمجية مثل try و except.
  • تجاهل المسافات الفارغة: أحياناً يكتب المستخدم مسافة بالخطأ قبل أو بعد الكلمة المدخلة. يمكنك استخدام دالة .strip() المدمجة في النصوص لتنظيف المدخلات هكذا: name = input("اكتب اسمك: ").strip()

خلاصة الدرس

تعتبر المدخلات هي البوابة التي تحول كود بايثون الخاص بك من نصوص جامدة ونتائج مسبقة الصنع إلى برامج حية وتفاعلية تستجيب لطلبات مستخدميها. لقد تعرفنا اليوم على دالة input()، وفهمنا أن ناتجها يكون دائماً نصياً بغض النظر عن محتواه، وتعرفنا على كيفية استخدام دوال التحويل مثل int() و float() لجعل هذه المدخلات قابلة للاستخدام الرياضي والمنطقي في برامجنا.

في الدروس القادمة، سنربط هذه المدخلات بالجمل الشرطية (Conditions) لكي يستطيع برنامجنا اتخاذ قرارات مختلفة ومتنوعة بناءً على ما يكتبه المستخدم في كل مرة يتم فيها تشغيل البرنامج، مما يفتح آفاقاً واسعة لتصميم تطبيقات متكاملة وقابلة للاستخدام الفعلي في مشاريع حقيقية.

الكاتب
عمرو جمال

محرر متخصص في تطوير قوالب بلوجر وووردبريس وتقديم شروحات التقنية. أقدم حلولاً مبتكرة لتصميم مواقع عصرية وجذابة.