📌 الدرس السابق: تعرفنا على العوامل (Operators) وكيف تجعل بايثون تقوم بالحسابات والمقارنات والمنطق.
💻 تطبيق فوري: جرب كل الأمثلة بنفسك على محرر بايثون العرب لتثبيت المعلومة عملياً.
اليوم سنغوص في عالم أنواع البيانات (Data Types) – التصنيفات الأساسية لكل قيمة تخزنها في المتغيرات. هل تعلم أن بايثون تصنف كل شيء تخزنه؟ رقم، نص، قائمة، قاموس... لكل نوع شخصيته وقدراته الخاصة. معرفة هذه الأنواع تتيح لك اختيار الأداة المناسبة لكل مهمة، وتجنب الأخطاء الغبية. لنبدأ! 🚀
🤔 ما هو نوع البيانات (Data Type)؟
ببساطة، نوع البيانات يحدد طبيعة القيمة التي يحملها المتغير، وبالتالي يحدد العمليات التي يمكنك إجراؤها عليها. لا يمكنك جمع نص مع رقم مباشرة، ولا يمكنك البحث عن فهرس داخل قاموس. لماذا؟ لأن لكل نوع قواعده.
في بايثون، يتم تحديد النوع تلقائياً عند الإسناد:
x = 5 # inty = "Hello" # str
لكن يمكنك معرفة النوع في أي وقت باستخدام الدالة السحرية ()type:
x = 5print(type(x)) # <class 'int'>
📸 [صورة: جدول يظهر أيقونات ملونة لكل نوع بيانات مع اسمه بالإنجليزية والعربية]
🗂️ الأنواع المدمجة الرئيسية في بايثون
تقسم بايثون أنواع البيانات المدمجة إلى الفئات التالية:
| الفئة | الأنواع |
|---|---|
| Text Type (نصي) | str |
| Numeric Types (رقمي) | int, float, complex |
| Sequence Types (تسلسلي) | list, tuple, range |
| Mapping Type (تخطيطي) | dict |
| Set Types (مجموعات) | set, frozenset |
| Boolean Type (منطقي) | bool |
| Binary Types (ثنائي) | bytes, bytearray, memoryview |
لا تخف من الكم! سنركز على الأساسيات الآن، ونتعمق في كل نوع في دروس قادمة.
🧪 1. النوع النصي str (String)
يمثل أي نص، محاط بعلامات اقتباس مفردة أو مزدوجة:
x = "Hello World"print(type(x)) # <class 'str'>
خصائصه: يمكن تكراره (for letter in text)، تقطيعه (text[0:5])، وحساب طوله (len(text)).
🔢 2. الأنواع الرقمية int, float, complex
int – عدد صحيح
أعداد كاملة، موجبة أو سالبة، بدون حد أقصى لطولها!
x = 1y = 35656222554887711z = -3255522print(type(x), type(y), type(z)) # كلهم int
float – عدد عشري
أعداد تحتوي على فاصلة عشرية. يمكن كتابتها أيضاً بالصيغة العلمية باستخدام e:
x = 1.10y = 1.0z = -35.59print(type(x)) # <class 'float'># صيغة علمية:a = 35e3 # 35000.0b = 12E4 # 120000.0c = -87.7e100 # عدد ضخم جداً
complex – عدد مركب
له جزء حقيقي وجزء تخيلي (يُرمز له بـ j):
x = 3 + 5jy = 5jz = -5jprint(type(x)) # <class 'complex'>
📸 [صورة: أمثلة على الأعداد الصحيحة والعشرية والمركبة مع مخرجات type()]
📋 3. الأنواع التسلسلية list, tuple, range
list – قائمة
مجموعة مرتبة، قابلة للتغيير، وتسمح بالتكرار. محاطة بأقواس مربعة []:
x = ["apple", "banana", "cherry"]print(type(x)) # <class 'list'>
tuple – صف
مثل القائمة، لكنها غير قابلة للتغيير بعد إنشائها. محاطة بأقواس دائرية ():
x = ("apple", "banana", "cherry")print(type(x)) # <class 'tuple'>
range – نطاق
يُنتج سلسلة من الأعداد، يستخدم بكثرة في الحلقات:
x = range(6)print(type(x)) # <class 'range'>
🧭 4. نوع التخطيط dict (Dictionary)
يخزن أزواجاً من مفتاح : قيمة. المفاتيح فريدة، والقيم يمكن أن تكون أي شيء. محاط بأقواس معقوفة {}:
x = {"name": "John", "age": 36}print(type(x)) # <class 'dict'>
مفيد جداً لتمثيل كائنات حقيقية (مثل شخص، منتج، إعدادات).
🎒 5. أنواع المجموعات set, frozenset
set – مجموعة
مجموعة غير مرتبة، غير قابلة للتكرار (لا عناصر مكررة)، وقابلة للتغيير:
x = {"apple", "banana", "cherry"}print(type(x)) # <class 'set'>
frozenset – مجموعة مجمدة
مثل set لكنها غير قابلة للتغيير:
x = frozenset({"apple", "banana", "cherry"})print(type(x)) # <class 'frozenset'>
✅ 6. النوع المنطقي bool
يمثل قيمتين فقط: True أو False. ناتج المقارنات والشروط:
x = Trueprint(type(x)) # <class 'bool'>
📦 7. الأنواع الثنائية bytes, bytearray, memoryview
تتعامل مع البيانات الثنائية (صور، ملفات، اتصالات شبكة). سنؤجل تفاصيلها للمستويات المتقدمة:
x = b"Hello"print(type(x)) # <class 'bytes'>x = bytearray(5)print(type(x)) # <class 'bytearray'>x = memoryview(bytes(5))print(type(x)) # <class 'memoryview'>
🎯 تحديد نوع البيانات يدوياً (Casting / Constructor)
إذا أردت فرض نوع معين بدلاً من تركه لبايثون، يمكنك استخدام دوال البناء (Constructor Functions):
| الدالة | مثال | الناتج |
|---|---|---|
str() | str(10) | '10' |
int() | int("20") | 20 |
float() | float(5) | 5.0 |
complex() | complex(1, 2) | (1+2j) |
list() | list("abc") | ['a', 'b', 'c'] |
tuple() | tuple([1, 2]) | (1, 2) |
set() | set([1, 2, 2]) | {1, 2} |
dict() | dict(name="A", age=20) | {'name': 'A', 'age': 20} |
bool() | bool(1) | True |
مثال:
x = str("Hello World") # strx = int(20) # intx = float(20.5) # floatx = complex(1j) # complexx = list(("apple", "banana", "cherry")) # listx = tuple(("apple", "banana", "cherry")) # tuplex = range(6) # rangex = dict(name="John", age=36) # dictx = set(("apple", "banana", "cherry")) # setx = frozenset(("apple", "banana", "cherry")) # frozensetx = bool(5) # bool (True)x = bytes(5) # bytesx = bytearray(5) # bytearrayx = memoryview(bytes(5)) # memoryview
📸 [صورة: جدول دوال البناء مع تحويلات مرئية (نص إلى رقم، قائمة إلى صف، …)]
🧪 جرّب بنفسك: استكشف الأنواع
انسخ هذا الكود في محرر بايثون العرب وشاهد التنوع:
variables = ["Hello World", # str20, # int20.5, # float1j, # complex["apple", "banana"], # list("apple", "banana"), # tuplerange(6), # range{"name": "John"}, # dict{"apple", "banana"}, # setfrozenset({"apple"}),# frozensetTrue # bool]for var in variables:print(f"{var} -> {type(var)}")
سترى كل قيمة ونوعها أمامك. إنه متحف صغير لأنواع بايثون! 🏛️
📢 انتظرونا في الدرس القادم
في الدرس الثامن سنغوص في تفاصيل الأعداد في بايثون (int, float, complex) ونتعلم العمليات الخاصة بكل نوع. لا تفوّته! 🔢🚀
