الدالتان اللتان تجعلان برنامجك تفاعليًا
معظم برامج بايثون في بدايتها تسير على نفس النمط: نطلب من المستخدم إدخال شيء ما عبر input()، ثم نعالج الإجابة، وأخيرًا نعرض النتيجة باستخدام print(). هاتان الدالتان المدمجتان هما وسيلة تواصل الكود مع العالم الخارجي، وهما أساس الإدخال والإخراج في بايثون.
لنأخذ كل واحدة منهما على حدة.
دالة print في بايثون: كيف نطبع المخرجات
أبسط استخدام لدالة print() هو كتابة سطر نصي في الطرفية (Terminal):
هذا سيطبع كلمة hello متبوعة بسطر جديد. هذا السطر الجديد هو ما يفصل استدعاء print عن الذي يليه على الشاشة.
ويمكنك تمرير أكثر من قيمة في استدعاء واحد، وستضع بايثون مسافة بين كل قيمة وأخرى تلقائياً:
يبدو أنك لم ترفق أي محتوى لأترجمه. من فضلك أرسل نص الـ markdown الذي تريد إعادة صياغته بالعربية وسأتولى الأمر.
Name: Ada Age: 36
القيم اللي بتمررها لـ print مش لازم تكون نصوص. الدالة بتنادي str() على كل وسيط تلقائياً، فتقدر تخلط بين الأنواع من غير أي مشكلة:
تغيير الفاصل بين القيم في print
لو ما تبي تكون المسافة هي الفاصل بين القيم اللي تطبعها، استخدم المعامل sep:
تغيير نهاية السطر في دالة print
بشكل افتراضي، تضيف دالة print سطرًا جديدًا في النهاية. يمكنك استخدام الوسيط end لتغيير هذا السلوك — مثلًا، للإبقاء على المخرجات في نفس السطر:
end="" هي الحيلة اللي بتخليك تبني السطر قطعة قطعة.
دالة print تكتب على stdout
بشكل افتراضي، print بتكتب على stdout (الإخراج القياسي)، يعني المكان الطبيعي اللي بيظهر فيه خرج الطرفية. وتقدر تحوّل الإخراج إلى stderr أو إلى ملف أو إلى أي كائن شبيه بالملف عبر المعامل file:
لتنسيق الإخراج — عرض رقمين بعد الفاصلة العشرية، محاذاة الأعمدة، أو إضافة فواصل للأرقام الكبيرة — استخدم f-strings داخل دالة print:
دالة input في بايثون: قراءة مدخلات المستخدم
لإدخال قيمة من المستخدم نستخدم الأمر input(prompt)، الذي يوقف تنفيذ البرنامج ويعرض الرسالة التوجيهية للمستخدم ثم ينتظر. كل ما يكتبه المستخدم قبل ضغط زر Enter يعود إليك كنص (string).
ثلاث نقاط في دالة input توقع المبتدئين في الفخ:
القيمة المُرجعة دائمًا نصية
حتى لو كتب المستخدم 42، فإن ما ستستقبله هو السلسلة النصية "42" وليس الرقم. بمعنى أنك لا تستطيع إجراء عمليات حسابية عليها مباشرةً:
ولهذا السبب ستشاهد كثيرًا استخدام int(input(...)) أو float(input(...)) في سطر واحد. لكن انتبه: لو أدخل المستخدم قيمة لا تمثّل رقمًا صحيحًا، فإن int() سيرفع استثناء ValueError — وهو ما سنتعامل معه بشكل سليم في فصل الاستثناءات.
رسالة التوجيه اختيارية
إذا لم تُمرِّر نصًا توجيهيًا للدالة input()، فستنتظر إدخال المستخدم بصمت تام، وهذا تقريبًا دائمًا قرار خاطئ — لأن المستخدم لن يعرف ماذا تريد منه. احرص دومًا على تمرير رسالة واضحة:
لا يحذف أي شيء تلقائيًا
كل ما يكتبه المستخدم يرجع كما هو، بما في ذلك المسافات في بداية النص ونهايته. إذا كان هذا يؤثر على منطق برنامجك، استخدم .strip():
برنامج بايثون صغير ومتكامل
خلّينا نجمع كل اللي فات في برنامج بسيط: بضع أسطر تطلب من المستخدم بياناته، ثم تطبع له تقريراً مختصراً.
اثنا عشر سطرًا فقط. تقرأها من الأعلى إلى الأسفل وكأنها تعليمات، لا كود برمجي. وهذا تمامًا هو الأسلوب الذي تحاول هذه الدروس ترسيخه.
هل استخدام print في تتبع الأخطاء فكرة جيدة؟
ربما تصادف من يقول لك إن "المطورين الحقيقيين يستخدمون أدوات التصحيح (debugger)، لا جُمل print". لكن هذا الكلام فيه مبالغة. الحقيقة أن print أداة ممتازة لتتبع الأخطاء، خاصةً مع السكربتات الصغيرة والتجارب السريعة. لا تتردد في نثر استدعاءات print بسخاء عندما تحاول فهم ما يجري في الكود، ثم احذفها بعد أن تنتهي.
إليك حيلتين صغيرتين تُسهّلان حياتك:
وجود = داخل الـ f-string يطبع الاسم والقيمة معاً، وهذا يوفّر عليك كتابة print("name =", name) في كل مرة.
الخطوة التالية
بوجود print و input صار عندك حلقة تفاعل كاملة مع المستخدم: تسأل، تقرأ الإجابة، ثم ترد. في الفصل القادم سنبدأ بإدخال الشروط إلى المعادلة — جملة if والمعاملات التي تحدد ما يفعله برنامجك بناءً على القيم التي يراها.
الأسئلة الشائعة
ما الذي تفعله دالة print() في بايثون؟
ببساطة تطبع القيم في الـ terminal. مثلاً print("hello") يُخرج كلمة hello متبوعة بسطر جديد. ويمكنك تمرير عدة قيم مفصولة بفواصل، وستضع print() مسافة بينها بشكل افتراضي.
كيف تعمل دالة input() في بايثون؟
الاستدعاء input(prompt) يوقف تنفيذ البرنامج، ويعرض رسالة للمستخدم، ثم ينتظر حتى يكتب شيئاً ويضغط Enter، ويُرجع ما كتبه على هيئة نص (string) دائماً. لذلك إذا أردت رقماً، عليك تغليف الاستدعاء بـ int(...) أو float(...).
كيف أطبع في نفس السطر في بايثون؟
مرّر المعامل end="" إلى print. الافتراضي أن print يضيف سطراً جديداً بعد الإخراج، لكن عند ضبط end على نص فارغ (أو أي حرف آخر) يحلّ ذلك محل السطر الجديد.