المتغيّرات وأنواع البيانات في بايثون: صناديق تحفظ معلوماتك

تعلّم كيف تحفظ الأرقام والنصوص في متغيّرات بايثون، وتفرّق بين int و float و str، وتجمعها بدون أخطاء.

تخيّل أنك تلعب لعبة على الجوال. اللعبة تعرف اسمك، وتحفظ نقاطك، وتتذكّر المستوى الذي وصلت إليه. أين تحفظ اللعبة كل هذه المعلومات؟ في هذا الدرس ستعرف الجواب، وستكتب برنامجك الذي يحفظ معلوماتك بنفسك.

🎯 ماذا ستتعلم؟

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

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

🧰 ماذا تحتاج قبل أن تبدأ؟

يكفي أن تكون قد استخدمت print() مرة واحدة. إن لم تفعل، اقرأ أولًا أول برنامج لك بلغة بايثون. ولا تحتاج إلى تثبيت أي شيء، فكل الأمثلة تعمل في مترجم بايثون في المتصفح.

الفكرة ببساطة

في غرفتك صناديق كثيرة. على كل صندوق ملصق باسم، وبداخله شيء واحد. صندوق اسمه “نقاطي” فيه الرقم 120، وصندوق اسمه “اسمي” فيه اسمك.

هذا بالضبط هو المتغيّر (variable): اسم يشير إلى قيمة محفوظة في ذاكرة الحاسوب. تضع القيمة مرة، ثم تستخدم الاسم كلما احتجت إليها.

والشيء الذي بداخل الصندوق له نوع (type). الرقم نوع، والنص نوع آخر. بايثون تعرف النوع وحدها من شكل القيمة، ولا تحتاج أن تخبرها.

الخطوة 1: أول متغيّر لك

لإنشاء متغيّر، اكتب اسمه، ثم علامة =، ثم القيمة. علامة = هنا لا تعني “يساوي” كما في الرياضيات، بل تعني “ضع هذه القيمة في هذا الصندوق”.

# نصنع صندوقًا اسمه score ونضع فيه 120
score = 120
print(score)
120

لاحظ الفرق بين print(score) و print("score"). الأولى تطبع ما بداخل الصندوق، أي 120. والثانية تطبع كلمة score نفسها لأنها بين علامتي اقتباس.

يمكنك تغيير ما بداخل الصندوق في أي وقت. القيمة الجديدة تحلّ محل القديمة:

score = 120
print(score)
# جمع اللاعب نقاطًا جديدة، فنغيّر القيمة
score = 150
print(score)
120
150

الخطوة 2: الأرقام

بايثون تفرّق بين نوعين من الأرقام:

  • العدد الصحيح (int): رقم بلا فاصلة عشرية، مثل عدد الأهداف في مباراة أو عمرك.
  • العدد العشري (float): رقم فيه فاصلة عشرية، مثل درجة الحرارة أو معدّلك في المدرسة.
# عدد الأهداف: عدد صحيح
goals = 3
# درجة الحرارة: عدد عشري
temperature = 36.5
print(goals)
print(temperature)
3
36.5

الفرق بين 3 و 3.0 مهم عند بايثون. الأول عدد صحيح، والثاني عدد عشري. ولو أردت تحويل عدد صحيح إلى عشري، استخدم float():

# نحوّل 7 إلى عدد عشري
price = float(7)
print(price)
7.0

🚀 للمتقدمين: تستطيع أن تسأل بايثون عن نوع أي قيمة باستخدام type(). جرّب print(type(3)) ثم print(type(3.0)). ستحصل على <class 'int'> ثم <class 'float'>. وفي لغات أخرى يجب أن تعلن النوع قبل الاستخدام، أما بايثون فتحدّده تلقائيًا من القيمة.

الخطوة 3: النصوص

النص (string) هو أي كلام تضعه بين علامتي اقتباس: اسم، أو جملة، أو حتى رقم بين علامتي اقتباس. يمكنك استخدام علامات الاقتباس المفردة ' أو المزدوجة "، والنتيجة واحدة.

player = 'سالم'
print(player)
team = "الفريق الأزرق"
print(team)
سالم
الفريق الأزرق

متى تفيدك المزدوجة؟ عندما يكون داخل النص علامة اقتباس مفردة، كما في الكلمات الإنجليزية مثل Don’t. لو استخدمت المفردة للإحاطة بالنص، ستظن بايثون أن النص انتهى عند الفاصلة العليا.

message = "Don't give up!"
print(message)
Don't give up!

الخطوة 4: العمليات على المتغيّرات

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

round_one = 40
round_two = 55
total = round_one + round_two
print(total)
95

والمفاجأة أن علامة + تعمل مع النصوص أيضًا، لكنها لا تجمعها حسابيًا، بل تصلها ببعضها. انتبه إلى المسافة " " التي أضفناها بين الكلمتين:

first_name = "سارة"
last_name = "أحمد"
full_name = first_name + " " + last_name
print(full_name)
سارة أحمد

لكن ماذا لو حاولت وصل نص برقم؟ هنا يقع أشهر خطأ للمبتدئين. بايثون ترفض جمع نوعين مختلفين لأنها لا تعرف هل تريد الجمع الحسابي أم الوصل:

❌ هذا الكود يتوقف بخطأ
score = 95
print("نقاطك: " + score)

TypeError: can only concatenate str (not "int") to str

الحل أن تحوّل الرقم إلى نص أولًا باستخدام str():

# ✅ نحوّل الرقم إلى نص قبل الوصل
score = 95
print("نقاطك: " + str(score))
نقاطك: 95

وهناك طريقة أسهل: أعطِ print() القيم مفصولة بفاصلة ,. عندها تطبعها بايثون معًا وتضع بينها مسافة تلقائيًا، مهما كانت أنواعها:

score = 95
print("نقاطك:", score)
نقاطك: 95

الخطوة 5: عدة متغيّرات في سطر واحد

عندما تريد إنشاء متغيّرات صغيرة مرتبطة ببعضها، تسمح لك بايثون بكتابتها في سطر واحد. اكتب الأسماء مفصولة بفواصل، ثم =، ثم القيم بالترتيب نفسه:

# نتيجة مباراة: أهداف فريقنا ثم أهداف الفريق الآخر
our_goals, their_goals = 3, 1
print(our_goals)
print(their_goals)
3
1

القيمة الأولى تذهب إلى الاسم الأول، والثانية إلى الاسم الثاني. هذا اختصار مفيد، لكن لا تبالغ فيه، فالسطر الطويل صعب القراءة.

🚀 للمتقدمين: هذه الطريقة تسمح بتبديل قيمتي متغيّرين في سطر واحد بلا متغيّر مساعد: a, b = b, a. في لغات كثيرة تحتاج ثلاثة أسطر لفعل ذلك.

⚠️ أخطاء شائعة

الأخطاء جزء طبيعي من التعلّم، وكل مبرمج وقع فيها. إليك ثلاثة تقابلها كثيرًا:

1. نسيان علامات الاقتباس حول النص

❌
name = سالم
NameError: name 'سالم' is not defined

بايثون ظنت أن سالم اسم متغيّر آخر ولم تجده. الحل هو الاقتباس:

# ✅
name = "سالم"
print(name)
سالم

2. اسم متغيّر يبدأ برقم أو فيه مسافة

❌
1st_score = 50
SyntaxError: invalid decimal literal

my score = 50
SyntaxError: invalid syntax

اسم المتغيّر يجب أن يبدأ بحرف، ولا يحتوي مسافات. استخدم الشرطة السفلية _ بدل المسافة:

# ✅
first_score = 50
my_score = 50
print(first_score + my_score)
100

3. استخدام متغيّر قبل إنشائه

❌
print(level)
level = 5
NameError: name 'level' is not defined

بايثون تنفّذ الأسطر بالترتيب من الأعلى إلى الأسفل. أنشئ المتغيّر أولًا، ثم استخدمه:

# ✅
level = 5
print(level)
5

🧪 جرّب بنفسك

التحدي 1: بطاقة اللاعب

أنشئ ثلاثة متغيّرات: name فيه اسمك، age فيه عمرك كعدد صحيح، و height فيه طولك بالمتر كعدد عشري. ثم اطبع الثلاثة، كل واحد في سطر.

# غيّر القيم الثلاث ثم اطبعها كلها
name = "اكتب اسمك هنا"
age = 0
height = 0.0
print(name)
اكتب اسمك هنا
💡 اضغط لرؤية الحل
name = "ليلى"
age = 14
height = 1.58
print(name)
print(age)
print(height)
ليلى
14
1.58

التحدي 2: مجموع الدرجات

عندك درجات ثلاث مواد. اجمعها في متغيّر اسمه total واطبع جملة مثل: المجموع: 265. حاول بطريقتين: بـ str() وبالفاصلة داخل print().

math = 90
science = 85
arabic = 90
# احسب total واطبعه بطريقتين
print(math, science, arabic)
90 85 90
💡 اضغط لرؤية الحل
math = 90
science = 85
arabic = 90
total = math + science + arabic
print("المجموع: " + str(total))
print("المجموع:", total)
المجموع: 265
المجموع: 265

التحدي 3: تبديل الأماكن

اللاعبان تبادلا مكانيهما في الترتيب. المتغيّر first فيه “خالد” و second فيه “نورة”. بدّل القيمتين بينهما ثم اطبعهما. جرّب أولًا بمتغيّر مساعد، ثم بطريقة السطر الواحد من صندوق المتقدمين.

first = "خالد"
second = "نورة"
# بدّل القيمتين ثم اطبع first و second
print(first, second)
خالد نورة
💡 اضغط لرؤية الحل
first = "خالد"
second = "نورة"
# الطريقة الأولى: متغيّر مساعد
temp = first
first = second
second = temp
print(first, second)
# الطريقة الثانية: سطر واحد يعيدهما كما كانا
first, second = second, first
print(first, second)
نورة خالد
خالد نورة

✅ اختبر نفسك

  1. ما نوع القيمة 19.5؟

    • أ) int
    • ب) float
    • ج) str
  2. ماذا يطبع الكود print("5" + "5")؟

    • أ) 10
    • ب) 55
    • ج) خطأ
  3. صح أم خطأ: في بايثون يجب أن تكتب نوع المتغيّر قبل اسمه.

💡 اضغط لرؤية الإجابات
  1. ب) float، لأن فيه فاصلة عشرية.
  2. ب) 55، لأن الاثنين نصّان، وعلامة + تصل النصوص ولا تجمعها حسابيًا.
  3. خطأ. بايثون تحدّد النوع وحدها من القيمة التي تضعها في المتغيّر.

📝 الخلاصة

  • المتغيّر صندوق له اسم، تضع فيه قيمة بعلامة = وتغيّرها متى شئت.
  • الأعداد الصحيحة نوعها int، والعشرية float، والنصوص str.
  • علامة + تجمع الأرقام حسابيًا، وتصل النصوص ببعضها.
  • لا يمكن وصل نص برقم مباشرة. استخدم str() أو الفاصلة داخل print().
  • يمكنك إنشاء عدة متغيّرات في سطر واحد: a, b = 1, 2.

⏭️ الخطوة التالية

الآن صار عندك صناديق تحفظ المعلومات. الخطوة التالية أن تجعل برنامجك يتّخذ قرارات بناءً عليها باستخدام if. مثلًا: إذا كانت النقاط أكثر من 100 فاطبع “فزت!”. وإلى أن ننشر ذلك الدرس، افتح مترجم بايثون وجرّب كل الأمثلة هنا بقيم من عندك.