إدخال البيانات بـ input وتحويل الأنواع في Python
حتى الآن كانت برامجنا تعرض معلومات ثابتة كتبناها بأنفسنا. لكن البرامج الحقيقية تتحدث مع المستخدم: تسأله عن اسمه، وعمره، وما يريد. في هذا الدرس ستتعلم الدالة input لقراءة ما يكتبه المستخدم، ثم ستتعلم تحويل الأنواع، وهي مهارة ستحتاجها فوراً.
الدالة input
Section titled “الدالة input”الدالة input تعرض سؤالاً، ثم تنتظر حتى يكتب المستخدم شيئاً ويضغط Enter، ثم تُرجع ما كتبه:
name = input("ما اسمك؟ ")print("أهلاً يا", name)عند التشغيل، يظهر السؤال وينتظر البرنامج. لنفترض أن المستخدم كتب «أحمد»:
ما اسمك؟ أحمدأهلاً يا أحمدتخيّل input مثل موظف الاستقبال في فندق: يسألك سؤالاً، وينتظر إجابتك، ثم يسجّلها في دفتره (المتغير name).
المشكلة: input تُرجع نصاً دائماً
Section titled “المشكلة: input تُرجع نصاً دائماً”جرّب أن تطلب من المستخدم عمره:
age = input("كم عمرك؟ ")print(type(age))كم عمرك؟ 14<class 'str'>رغم أن المستخدم كتب رقماً، فالقيمة نص str! الدالة input تُرجع نصاً دائماً، مهما كتب المستخدم. وهذا يسبب مشكلة إذا أردت أن تحسب بها:
print("5" + "3")53جمع نصين يعني لصقهما بجانب بعض، وليس جمعهما حسابياً.
تحويل الأنواع (Type Casting)
Section titled “تحويل الأنواع (Type Casting)”الحل أن تحوّل النص إلى رقم قبل أن تحسب به. Python توفر دوالاً للتحويل تحمل نفس أسماء الأنواع:
| الدالة | تحوّل إلى | مثال | النتيجة |
|---|---|---|---|
int() |
عدد صحيح | int("5") |
5 |
float() |
عدد عشري | float("2.5") |
2.5 |
str() |
نص | str(100) |
"100" |
print(int("5") + int("3"))print(float("2.5") * 2)print(str(100) + " جنيه")85.0100 جنيهالتحويل يشبه صرف العملة: معك جنيهات وتريد أن تشتري بالدولار، فتذهب للصرافة أولاً. لا يمكنك الدفع بعملة لا يقبلها المتجر.
الحل الكامل
Section titled “الحل الكامل”الآن نجمع input مع التحويل:
age = input("كم عمرك؟ ")age = int(age)print(f"بعد 10 سنوات سيكون عمرك {age + 10} سنة")كم عمرك؟ 14بعد 10 سنوات سيكون عمرك 24 سنة(الكتابة f"..." اسمها f-string، وتسمح لك بوضع متغيرات داخل النص بين قوسين معقوفين. سنشرحها بالتفصيل في درس النصوص).
ويمكنك أن تختصر القراءة والتحويل في سطر واحد بوضع input داخل int أو float:
price = float(input("سعر المنتج: "))quantity = int(input("الكمية: "))print(f"الإجمالي: {price * quantity} جنيه")سعر المنتج: 12.5الكمية: 3الإجمالي: 37.5 جنيهاقرأ السطر الأول من الداخل للخارج: اعرض السؤال واقرأ الإجابة، ثم حوّلها إلى عدد عشري، ثم خزّنها في price.
عندما يفشل التحويل
Section titled “عندما يفشل التحويل”ماذا لو كتب المستخدم كلاماً بدلاً من رقم؟
int("abc")ValueError: invalid literal for int() with base 10: 'abc'Python لا تستطيع تحويل «abc» إلى رقم، فتتوقف وتظهر خطأ ValueError. سنتعلم في درس «التعامل مع الأخطاء» كيف نتعامل مع هذا بأناقة بدلاً من أن يتوقف البرنامج.
خطأ شائع: لصق نص مع رقم
Section titled “خطأ شائع: لصق نص مع رقم”print("العمر: " + 15)TypeError: can only concatenate str (not "int") to strلا يمكنك أن تلصق نصاً مع رقم بعلامة +. الحلول:
- حوّل الرقم إلى نص:
"العمر: " + str(15). - أو استخدم الفاصلة:
print("العمر:", 15). - أو استخدم f-string:
print(f"العمر: {15}")، وهي الطريقة المفضلة.
جرّب بنفسك
Section titled “جرّب بنفسك”اكتب برنامجاً يسأل المستخدم عن اسمه وعن سنة ميلاده، ثم يحسب عمره في عام 2026 ويطبع رسالة. مثال على التشغيل:
ما اسمك؟ مريمفي أي سنة وُلدت؟ 2012أهلاً يا مريم، عمرك 14 سنة تقريباًتلميح: احسب العمر بـ 2026 - int(year).
أخطاء شائعة
Section titled “أخطاء شائعة”- نسيان التحويل: الحساب بقيمة
inputمباشرة يعطي نتائج غريبة مثل"5" + "3" = "53"، أو خطأTypeError. - استخدام int مع رقم عشري مكتوب كنص:
int("2.5")يسببValueError. استخدمfloatللأعداد العشرية. - لصق نص مع رقم بـ +: استخدم f-string أو
str().
اختبر نفسك
Section titled “اختبر نفسك”سؤال
إذا كتب المستخدم 7، فما نوع القيمة التي تُرجعها input()؟
الدالة input تُرجع نصاً دائماً مهما كتب المستخدم، ويجب تحويله للحساب به.
سؤال
ما ناتج int('4') + int('6')؟
بعد التحويل أصبح لدينا رقمان 4 و 6، فيُجمعان حسابياً.
الخلاصة
Section titled “الخلاصة”input("سؤال")تعرض السؤال وتنتظر إجابة المستخدم.inputتُرجع نصاً دائماً، حتى لو كتب المستخدم أرقاماً.- حوّل بين الأنواع بـ
int()وfloat()وstr(). - التحويل الفاشل مثل
int("abc")يسببValueError. - لا تلصق نصاً مع رقم بـ
+، واستخدم f-string بدلاً من ذلك.