- أهمية الدرس: لا تتعامل بايثون مع كل القيم بالطريقة نفسها؛ فنوع القيمة يحدد معناها والعمليات التي يمكن تنفيذها عليها. فهم الأنواع يمنع أخطاء كثيرة ويجعل قراءة الكود أسهل.
- ماذا ستتعلم:
- اكتشاف نوع أي قيمة باستخدام
type(). - تمييز النصوص والأعداد الصحيحة والعشرية والقيم المنطقية.
- فهم أثر علامات الاقتباس والفاصلة العشرية في نوع القيمة.
- توقع نوع ناتج العمليات والتعبيرات.
- معرفة سبب نجاح عملية مع نوع وفشلها مع نوع آخر.
- اكتشاف نوع أي قيمة باستخدام
نوع القيمة يحدد سلوكها
كل قيمة في بايثون لها نوع بيانات. يخبر النوع بايثون بطبيعة القيمة، ويحدد العمليات المناسبة لها؛ فالعدد يقبل الحساب، والنص يقبل الدمج وقياس الطول، والمقارنة تنتج قيمة منطقية.
تُستخدم الدالة type() لاكتشاف نوع القيمة:
print(type("مرحبًا"))
print(type(100))
print(type(2.5))
print(type(True))
تظهر أسماء الأنواع داخل مخرجات مثل <class 'str'>. لا حاجة الآن إلى تفسير كلمة class؛ المهم هو الاختصار الموجود داخلها:
str: نص.int: عدد صحيح.float: عدد عشري.bool: قيمة منطقية.
قد تتشابه قيمتان عند طباعتهما، لكن نوعيهما يختلفان. لذلك لا يكفي النظر إلى المخرجات؛ أحيانًا يلزم فحص النوع لفهم ما يستطيع البرنامج فعله بالقيمة.
النصوص: ما بين علامتي الاقتباس
النوع str يمثل النصوص، وهي سلاسل من الحروف أو الأرقام أو الرموز محاطة بعلامتي اقتباس مفردتين أو مزدوجتين.
"تعلم بايثون" 'مرحبًا' "12345"
القيمة "12345" نص وليست عددًا، لأن علامات الاقتباس هي التي تحدد معناها. يمكن طباعتها وقياس طولها، لكن لا تُعامل مباشرةً كعدد في العمليات الحسابية.
- تدمج علامة
+نصين وتضع أحدهما بعد الآخر. - تعيد
len()عدد المحارف داخل النص، بما فيها المسافات. - يمكن أن يحتوي النص على أرقام، لكن وجودها داخله لا يغير نوعه.
print("أهلًا" + " " + "وسهلًا")
print("5" + "5")
print(len("بايثون 101"))
ناتج "5" + "5" هو النص "55"؛ فالعملية هنا دمج وليست جمعًا حسابيًا.
الأعداد الصحيحة والعشرية
تستخدم بايثون نوعين أساسيين لتمثيل الأعداد في هذا المستوى:
int: عدد كامل موجب أو سالب أو صفر، مثل10و-4و0.float: عدد يحتوي على فاصلة عشرية، مثل3.5و-0.25و1.0.
وجود الجزء العشري يجعل القيمة من النوع float حتى لو كان صفرًا؛ لذلك 1 عدد صحيح، بينما 1.0 عدد عشري.
print(type(7)) print(type(7.0)) print(5 + 2.5) print(20 / 5)
- العملية بين
intوfloatتنتج عادةًfloat. - ناتج القسمة باستخدام
/يكون عشريًا؛ فـ20 / 5تعطي4.0. - الأعداد تقبل عمليات مثل الجمع والطرح والضرب والقسمة.
القيمة العشرية ليست أدق أو أفضل دائمًا من الصحيحة؛ كل نوع يناسب شكل البيانات التي يمثلها.
القيم المنطقية: إجابة بنعم أو لا
النوع bool له قيمتان فقط: True وFalse. تظهران غالبًا نتيجة سؤال أو مقارنة داخل البرنامج.
print(10 > 5)
print(1 == 2)
print("بايثون" == "بايثون")
تنتج التعبيرات السابقة True ثم False ثم True.
- يختبر العامل
==تساوي قيمتين. - يختبر العاملان
>و<أي القيمتين أكبر أو أصغر. - يجب كتابة
TrueوFalseبحرف أول كبير. - يمكن مقارنة النصوص أيضًا، وتتحقق المساواة عندما تتطابق القيمتان.
ستصبح القيم المنطقية أساس اتخاذ القرارات لاحقًا؛ فالبرنامج يستطيع تنفيذ مسار عندما يكون الشرط صحيحًا، ومسار آخر عندما يكون خطأ.
الشكل قد يتشابه والنوع يغيّر النتيجة
أفضل طريقة لتحليل أي تعبير هي تحديد قيمة كل جزء ونوعها قبل توقع النتيجة. الرمز نفسه قد يتصرف بطريقة مختلفة باختلاف الأنواع.
5 + 5جمع عددي، وناتجه10من النوعint."5" + "5"دمج نصي، وناتجه"55"من النوعstr.5 + 2.5ناتجه7.5من النوعfloat.len("55")تعمل لأن النص له طول، أماlen(55)فتؤدي إلى خطأ لأن العدد الصحيح ليس سلسلة.
ولا يمكن جمع "5" و5 مباشرةً؛ فالأول نص والثاني عدد. تشابه شكلهما لا يعني أن بايثون ستتعامل معهما بالطريقة نفسها.
تتبع تعبير مركب
print(len("Success") > 5)
- تعيد
len("Success")العدد7. - تختبر المقارنة
7 > 5. - تنتج المقارنة القيمة المنطقية
True. - تعرض
print()النتيجة.
هذا الأسلوب—القيمة أولًا، ثم النوع، ثم العملية—يساعد على استنتاج الناتج بدل تخمينه.
التمارين المرتبطة بهذا الدرس
- التمرين الأول: تمييز الأنواع وتحليل القيم
- التمرين الثاني: استنتاج النوع والناتج
- التمرين الثالث: تصنيف القيم وتتبع التعبيرات
