المتغيرات وأنواع البيانات في لغة بايثون

في هذا الدرس الممتع من سلسلة «فكّر كمبرمج بايثون»، ستتعلم كيف يتذكّر الحاسوب المعلومات داخل متغيرات، وما هي أنواع البيانات الأساسية (أعداد، نصوص، قيم منطقية). سنعمل عمليًا على إنشاء متغيرات وفهم الدالة ()type والتعامل مع أخطاء شائعة.

المتغيرات وأنواع البيانات في لغة بايثون

أهداف التعلم

بنهاية هذا الدرس، ستكون قادرًا على:

  • فهم مفهوم المتغير (Variable) ودوره في تخزين المعلومات.
  • إنشاء متغيرات لأنواع بيانات مختلفة في Python.
  • التمييز بين الأعداد والنصوص والقيم المنطقية.
  • استخدام الدالة()type لمعرفة نوع البيانات.
  • التعامل مع الأخطاء الشائعة عند تعيين المتغيرات.

خارطة التعلم

  •  من الحفظ إلى المعالجة
  • ما هو المتغير؟ وكيف تُخزّن البيانات في الذاكرة؟
  • ما أنواع البيانات التي يفهمها الحاسوب؟
  • كيف نتعامل مع النصوص والأرقام؟

المتطلبات السابقة

  • إتمام الدرسين السابقين: فهم معنى البرمجة، وإعداد Python وVS Code.

لحظة البداية

تخيّل أن لديك عشرات المعلومات: اسمك، عمرك، درجتك... مثل الإنسان، يحتاج الحاسوب إلى “ذاكرة” لحفظ المعلومات. وهنا يظهر البطل: المتغير.

المتغير هو اسم يشير إلى قيمة مخزّنة في الذاكرة. فكّر فيه كصندوق عليه ملصق (الاسم)، وداخله قيمة تستخدمها لاحقًا.

في Python، لا تحتاج لتعريف نوع المتغير مسبقًا؛ تُحدّده بايثون تلقائيًا من القيمة:

name = "Sara"
age = 21

تفهم بايثون تلقائيًا أن name نص (str) وage عدد صحيح (int).

🧠 سؤال تفكيري: كيف تفرّق بايثون بين الرقم 21 والنص "21"؟

شرح المفهوم خطوة بخطوة

أولًا: ما هو المتغير؟

يمثل موقعًا في الذاكرة تُخزَّن فيه قيمة. عند استدعاء اسمه تحصل على القيمة.

variable_name = value

name = "Omar"
print(name)

النتيجة: Omar — إذن المتغير = اسم + قيمة.

ثانيًا: القواعد الذهبية لتسمية المتغيرات

  • يبدأ بحرف أو شرطة سفلية _، ولا يبدأ برقم.
  • بدون فراغات أو رموز خاصة، والحروف الكبيرة/الصغيرة مهمة (Case Sensitive).
  • اختر اسمًا معبرًا:
    student_name = "Lina"   # ✅ جيد
    # 1name = "Ali"         # ❌ خطأ: يبدأ برقم

ثالثًا: أنواع البيانات الأساسية في Python

النوع مثال الوصف
int 42 عدد صحيح
float 3.14 عدد عشري
str "Hello" نصوص
bool True / False قيمة منطقية
NoneType None قيمة فارغة

رابعًا: كيف أعرف نوع البيانات؟

باستخدام()type:

x = 10
print(type(x))  # <class 'int'>

name = "Sara"
pi = 3.14
is_student = True

print(type(name))      # <class 'str'>
print(type(pi))        # <class 'float'>
print(type(is_student))# <class 'bool'>

خامسًا: تحويل الأنواع

يمكنك التحويل باستخدام دوال جاهزة:

x = 10
y = str(x)    # تحويل الرقم إلى نص
z = float(x)  # تحويل الرقم إلى عشري

🧠 فكر قليلًا: لماذا قد تحتاج لتحويل الأعداد إلى نصوص؟ (تلميح: لدمجها داخل جمل مطبوعة).

تمثيل بصري

┌────────────────────────┐
│  student_name = "Ali"  │
│  student_age  = 20     │
└────────────────────────┘

# الاسم = ملصق الصندوق
# القيمة = ما بداخل الصندوق

التطبيق العملي

جرّب كتابة الكود في VS Code:

# تعريف متغيرات بأنواع مختلفة
name = "Lina"
age = 22
height = 1.68
is_student = True

# طباعة القيم وأنواعها
print("Name:", name)
print("Age:", age)
print("Height:", height)
print("Student:", is_student)

النتيجة المتوقعة:

Name: Lina
Age: 22
Height: 1.68
Student: True

تحليل الكود

السطر العنصر الوصف
1 name = "Lina" متغير نصي
2 age = 22 متغير عددي
3 height = 1.68 عدد عشري
4 is_student = True قيمة منطقية
6–9 print() عرض النتائج في الشاشة

دراسة حالة واقعية

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

تحدٍّ واقعي

عرّف المتغيرات الآتية واطبع جملة مدمجة:

  • city → اسم مدينتك
  • temperature → درجة الحرارة اليوم
  • is_raining → هل الجو ممطر؟ (True/False)
city = "Cairo"
temperature = 29
is_raining = False

print("Today in", city + ",", "the temperature is", temperature, ", raining:", is_raining)

زاوية السوق

المتغيرات موجودة في كل المجالات: البنوك، الألعاب، علم البيانات... تُخزن نتائج مؤقتة وتدير الحالة والمنطق. لا يوجد كود بلا متغيرات.

تتبّع التنفيذ

المتغير القيمة النوع الملاحظة
name "Lina" str نص
age 22 int عدد صحيح
height 1.68 float عدد عشري
is_student True bool قيمة منطقية

التدريبات المتدرجة

  • المستوى 1: أنشئ متغيرًا باسم language وخزّن فيه "Python". اطبعه.
  • المستوى 2: عرّف a=5, b=7, ثم sum=a+b واطبع الناتج.
  • المستوى 3 (تحدي): بدّل القيم بين متغيرين باستخدام متغير مؤقت.

اختبار تطبيقي

number = "10"
result = number + 5  # هل سينجح؟

لن ينجح لأن أحدهما نص والآخر رقم. يلزم تحويل النوع أولًا: int(number) + 5 أو str(5) للدمج كنص.

تقييم ذاتي

المهارة أتقنتها ✅ أحتاج مراجعة 🔁
تعريف المتغيرات 🔁
فهم أنواع البيانات 🔁
معرفة النوع بـ type() 🔁
التعامل مع الأخطاء البسيطة 🔁

ما وراء الكود

المتغيرات ليست مجرد أدوات للحفظ؛ إنها تمثيل لذاكرة البرنامج. كل مرة تكتب فيها x = 5 فأنت تُعلّم الحاسوب تذكر معلومة جديدة.

ملخص الدرس

  • المتغيرات تحفظ القيم داخل الذاكرة.
  • القيم قد تكون نصوصًا أو أعدادًا أو قيمًا منطقية.
  • Python تتعرف على النوع تلقائيًا.
  • type() تُخبرك بنوع البيانات.

❓ أسئلة المراجعة

  1. ما هو المتغير؟
    عرض الإجابة

    هو اسم يُستخدم للإشارة إلى قيمة مخزّنة في ذاكرة الحاسوب يمكن تغييرها واستخدامها لاحقًا.

  2. هل يمكن أن يبدأ اسم المتغير برقم؟ ولماذا؟
    عرض الإجابة

    ❌ لا، لا يمكن أن يبدأ برقم لأن ذلك يخالف قواعد اللغة. يجب أن يبدأ بحرف أو بشرطة سفلية (_).

  3. ما الفرق بين "5" و 5؟
    عرض الإجابة

    "5" نص (من النوع str)، بينما 5 عدد صحيح (int) — الأول لا يمكن جمعه كعدد إلا بعد تحويله.

نصائح للمبرمج المبتدئ

  • استخدم أسماء واضحة للمتغيرات.
  • تجنّب إعادة استخدام الاسم لغرض مختلف.
  • استعن بـ type() لفهم الكائنات قبل الاستخدام.
روابط مفيدة:
عادل محمد
عادل محمد
محرر وكاتب تقني متحمس للتكنولوجيا والبحث عن أحدث الأخبار والابتكارات التقنية. يسعى لتوفير محتوى شيق ومفيد يشمل الأخبار والكورسات في مختلف المجالات التقنية. بفضل خبرته ومهاراته في التحرير والكتابة، يقوم بتحليل وتلخيص الموضوعات التقنية بطريقة سلسة.
تعليقات



function initializeIntersectionObserver(elements,options={threshold:0.1,rootMargin:'0px 0px -50px 0px'}){const observer=new IntersectionObserver((entries)=>{entries.forEach(entry=>{if(entry.isIntersecting){entry.target.style.opacity='1';entry.target.style.transform='translateY(0)'}})},options);elements.forEach(el=>{el.style.opacity='0';el.style.transform='translateY(30px)';el.style.transition='opacity 0.6s ease, transform 0.6s ease';observer.observe(el)})} function initializeSmoothScrolling(){document.querySelectorAll('a[href^="#"]').forEach(anchor=>{anchor.addEventListener('click',function(e){e.preventDefault();const target=document.querySelector(this.getAttribute('href'));if(target){target.scrollIntoView({behavior:'smooth',block:'start'})}})})} function initializeLazyLoading(images){const imageObserver=new IntersectionObserver((entries,observer)=>{entries.forEach(entry=>{if(entry.isIntersecting){const img=entry.target;img.src=img.dataset.src||img.src;img.classList.remove('lazy');imageObserver.unobserve(img)}})});images.forEach(img=>{img.dataset.src=img.src;img.classList.add('lazy');imageObserver.observe(img)})} function debounce(func,wait){let timeout;return function executedFunction(...args){const later=()=>{clearTimeout(timeout);func(...args)};clearTimeout(timeout);timeout=setTimeout(later,wait)}} document.addEventListener('DOMContentLoaded',()=>{initializeSmoothScrolling();initializeLazyLoading(document.querySelectorAll('img'));initializeHeroSection();initializeFeaturedLessons();initializeBeginnersGuide();initializeRecentProjects();initializeNewsletter();initializeFAQ();initializeLatestArticles()})