- أهمية الدرس: تجعل
input()البرنامج يستقبل بيانات المستخدم بدل الاكتفاء بعرض معلومات ثابتة. ومن هنا يبدأ بناء البرامج الحوارية التي تسأل وتعالج ثم تقدم نتيجة. - ماذا ستتعلم:
- دور الكونسول في الحوار بين المستخدم والبرنامج.
- كيف تعرض
input()رسالة وتنتظر الإدخال. - لماذا تعيد الدالة نصًا حتى عند إدخال رقم.
- تحويل المدخلات باستخدام
int()وfloat(). - تتبع رحلة المدخل من الكتابة إلى المعالجة ثم المخرجات.
الكونسول: مساحة الحوار النصي
الكونسول أو الطرفية بيئة نصية تظهر فيها رسائل البرنامج ونتائجه، ويمكن للمستخدم أن يكتب فيها مدخلاته. وهي مناسبة لتعلم منطق البرامج قبل الانتقال إلى الواجهات الرسومية.
تقوم الدالة input() بثلاث خطوات مترابطة:
- تعرض الرسالة الموجودة بين قوسيها إن وُجدت.
- توقف تنفيذ البرنامج مؤقتًا وتنتظر الكتابة.
- تعيد ما كُتب بعد الضغط على مفتاح الإدخال.
name = input("اكتب اسمك: ")
print("مرحبًا", name)
إذا كُتب الاسم علي، تُخزن الكلمة في المتغير name ثم تستخدمها print() في رسالة الترحيب.
يمكن استدعاء input() من دون رسالة، لكن وجود سؤال واضح أفضل؛ لأن المستخدم يحتاج إلى معرفة البيانات المطلوبة وطريقة كتابتها.
كل ما تعيده input() هو نص
تعيد input() قيمة من النوع str دائمًا. إذا كتب المستخدم 25، تستقبل الدالة النص "25" لا العدد الصحيح 25.
x = input("الرقم الأول: ")
y = input("الرقم الثاني: ")
combined = x + y
إذا كانت المدخلات 7 و3، فإن x + y يدمج النصين ويعطي "73"، لأن علامة + تدمج القيم النصية بدل جمعها حسابيًا.
- علامتا الاقتباس لا تظهران عندما يكتب المستخدم، لكن القيمة تظل نصًا داخل البرنامج.
- يمكن استخدام المدخل مباشرةً إذا كان المطلوب اسمًا أو رسالةً أو رمزًا نصيًا.
- يجب تحويله أولًا إذا كان سيشارك في عملية حسابية.
المظهر الخارجي للقيمة لا يحدد نوعها؛ فطريقة الحصول عليها هي التي تفسر لماذا بقي الرقم المكتوب نصًا.
التحويل قبل الحساب
تحول int() النص الرقمي إلى عدد صحيح، وتحوله float() إلى عدد عشري. يُختار التحويل بحسب طبيعة البيانات المطلوبة.
int("25")تعيد العدد الصحيح25.float("12.5")تعيد العدد العشري12.5.float("7")تعيد7.0.int("3.14")لا تعيد3؛ بل تفشل لأن النص لا يمثل عددًا صحيحًا بصيغته الحالية.
num1 = int(input("أدخل الرقم الأول: "))
num2 = int(input("أدخل الرقم الثاني: "))
result = num1 + num2
print("النتيجة:", result)
عند إدخال 5 و3 تصبح القيمتان عددين صحيحين، ولذلك يكون الناتج 8 لا النص "53".
إذا كُتب نص لا يصلح للتحويل، مثل "خمسة" داخل int()، يظهر ValueError. ستُدرس طريقة معالجة هذا الخطأ لاحقًا؛ والمهم هنا أن التحويل لا يخمّن المقصود ولا يصلح المدخل تلقائيًا.
اقرأ الاستدعاء المتداخل من الداخل
في السطر الآتي توجد دالتان متداخلتان:
age = int(input("أدخل عمرك: "))
- تنفذ
input()أولًا، وتعرض السؤال وتنتظر الإجابة. - تعيد الإجابة كنص، مثل
"16". - تحول
int()النص إلى العدد16. - تُسند النتيجة العددية إلى
age.
يمكن كتابة الخطوات في أسطر منفصلة، وهذا مفيد عندما يلزم فحص القيمة النصية قبل تحويلها:
age_text = input("أدخل عمرك: ")
age = int(age_text)
والفكرة نفسها تنطبق على print(input("Message: ")): تظهر رسالة Message: مرة واحدة، ثم تطبع print() القيمة التي كتبها المستخدم، لا رسالة السؤال مرة ثانية.
ابنِ الحوار حول نوع البيانات
البرنامج التفاعلي الجيد لا يطلب البيانات فقط؛ بل يوضح المطلوب، ويختار النوع المناسب لكل مدخل، ثم يعرض نتيجة مفهومة.
price = float(input("أدخل سعر القطعة: "))
quantity = int(input("أدخل الكمية: "))
total = price * quantity
print("التكلفة الإجمالية:", total)
تسير البيانات في هذا المثال عبر مسار واضح:
- يُقرأ السعر نصًا ثم يتحول إلى
floatلأنه قد يحتوي على جزء عشري. - تُقرأ الكمية نصًا ثم تتحول إلى
intلأنها عدد صحيح من القطع. - يُضرب السعر في الكمية، فتكون قيمة
totalمن النوعfloat. - تُعرض النتيجة مع وصف يبين معناها.
اختيار int أو float ليس قرارًا شكليًا؛ بل يعتمد على البيانات التي يسمح بها البرنامج. أما الأسماء والعبارات النصية فلا تحتاج إلى تحويل عددي.
التمارين المرتبطة بهذا الدرس
- التمرين الأول: الإدخال والتحويل بين الأنواع
- التمرين الثاني: سلوك الإدخال والتفاعل النصي
- التمرين الثالث: تتبع الحوار والمخرجات
