تخطَّ إلى المحتوى

إدخال البيانات بـ input وتحويل الأنواع في Python

الدرس 5 من 25 · Python

حتى الآن كانت برامجنا تعرض معلومات ثابتة كتبناها بأنفسنا. لكن البرامج الحقيقية تتحدث مع المستخدم: تسأله عن اسمه، وعمره، وما يريد. في هذا الدرس ستتعلم الدالة 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

جمع نصين يعني لصقهما بجانب بعض، وليس جمعهما حسابياً.

الحل أن تحوّل النص إلى رقم قبل أن تحسب به. 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) + " جنيه")
الناتج
8
5.0
100 جنيه

التحويل يشبه صرف العملة: معك جنيهات وتريد أن تشتري بالدولار، فتذهب للصرافة أولاً. لا يمكنك الدفع بعملة لا يقبلها المتجر.

الآن نجمع 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.

ماذا لو كتب المستخدم كلاماً بدلاً من رقم؟

int("abc")
الناتج
ValueError: invalid literal for int() with base 10: 'abc'

Python لا تستطيع تحويل «abc» إلى رقم، فتتوقف وتظهر خطأ ValueError. سنتعلم في درس «التعامل مع الأخطاء» كيف نتعامل مع هذا بأناقة بدلاً من أن يتوقف البرنامج.

print("العمر: " + 15)
الناتج
TypeError: can only concatenate str (not "int") to str

لا يمكنك أن تلصق نصاً مع رقم بعلامة +. الحلول:

  • حوّل الرقم إلى نص: "العمر: " + str(15).
  • أو استخدم الفاصلة: print("العمر:", 15).
  • أو استخدم f-string: print(f"العمر: {15}")، وهي الطريقة المفضلة.

اكتب برنامجاً يسأل المستخدم عن اسمه وعن سنة ميلاده، ثم يحسب عمره في عام 2026 ويطبع رسالة. مثال على التشغيل:

الناتج
ما اسمك؟ مريم
في أي سنة وُلدت؟ 2012
أهلاً يا مريم، عمرك 14 سنة تقريباً

تلميح: احسب العمر بـ 2026 - int(year).

  • نسيان التحويل: الحساب بقيمة input مباشرة يعطي نتائج غريبة مثل "5" + "3" = "53"، أو خطأ TypeError.
  • استخدام int مع رقم عشري مكتوب كنص: int("2.5") يسبب ValueError. استخدم float للأعداد العشرية.
  • لصق نص مع رقم بـ +: استخدم f-string أو str().

سؤال

إذا كتب المستخدم 7، فما نوع القيمة التي تُرجعها input()؟

سؤال

ما ناتج int('4') + int('6')؟

  • input("سؤال") تعرض السؤال وتنتظر إجابة المستخدم.
  • input تُرجع نصاً دائماً، حتى لو كتب المستخدم أرقاماً.
  • حوّل بين الأنواع بـ int() و float() و str().
  • التحويل الفاشل مثل int("abc") يسبب ValueError.
  • لا تلصق نصاً مع رقم بـ +، واستخدم f-string بدلاً من ذلك.