مرحباً بك في الدرس الخامس من دورتنا الشيقة لتعلم أساسيات بايثون! 🎉
📌 الدرس السابق: غصنا معاً في أعماق التعليقات (Comments) وتعلمنا أسرارها وكيف تجعل كودك موثقاً وواضحاً.
💻 تطبيق فوري: وكالعادة، لا تنسَ أن تجرب كل الأمثلة بنفسك على محرر بايثون العرب لتثبيت المعلومة عملياً.
اليوم سنبدأ رحلتنا مع أحد أهم الكنوز البرمجية: المتغيرات (Variables). إنها الحاويات السحرية التي تخزن بياناتك، ورفيقتك الدائمة في كل سطر كود ستكتبه من الآن فصاعداً. تخيلها كصناديق صغيرة تضع فيها أرقاماً، نصوصاً، قوائم، وكل ما يخطر ببالك، وتستدعيها باسمها متى شئت! 📦✨
🤔 ما هي المتغيرات؟
بكل بساطة، المتغير هو اسم يُشير إلى قيمة مخزنة في ذاكرة الكمبيوتر. مثل ملصق تضعه على صندوق لتتذكر ما بداخله. في بايثون، لا تحتاج لإعلان عن نوع المتغير مسبقاً (مثل لغات أخرى)، بل يتم إنشاؤه تلقائياً في لحظة إسناد قيمة إليه لأول مرة.
🌟 مميزات المتغيرات في بايثون:
- لا تحتاج لكلمة مفتاحية مثل int أو String لإنشائها.
- يمكن أن تتغير قيمتها ونوعها مع تقدم البرنامج.
- حساسة للأحرف الكبيرة والصغيرة (Case-Sensitive).
# مثال تمثيل البيانات حسب الرسمage = 25name = "Ahmed"# طباعة للتأكد print(age) # 25print(name) # Ahmed
🥚 1. إنشاء متغير – لحظة الميلاد
في بايثون، يولد المتغير عندما تُسند إليه قيمة لأول مرة. استخدم علامة = للإسناد.
المثال الأول:
x = 5 # x is an integery = "John" # y is a stringprint(x)print(y)
الناتج:
5John
لاحظ أننا لم نكتب int x = 5 كما في لغات أخرى. بايثون تفهم تلقائياً نوع القيمة التي وضعتها. هذا يُسمى Dynamic Typing. 😍
🧬 2. نوع البيانات ديناميكي – متغير بوجهين
المتغير ليس مقيداً بنوع واحد طوال حياته. يمكنك أن تجعله رقماً، ثم تعيد استخدامه كنص لاحقاً!
x = 4 # x is an integerx = "Sally" # Now x is a string!print(x) # Sally
بايثون لا يمانع! لكن استخدم هذه الميزة بحذر حتى لا تربك قارئ الكود (أو تربك نفسك لاحقاً). 🧐
🏗️ 3. Casting – فرض نوع البيانات
إذا كنت تريد أن تتحكم أنت بنوع المتغير بدلاً من ترك بايثون تخمنه، يمكنك استخدام Casting عبر دوال تحويل النوع.
x = str(3) # x will be '3' (string)y = int(3) # y will be 3 (integer)z = float(3) # z will be 3.0 (float)print(x, type(x))print(y, type(y))print(z, type(z))
الناتج:
3 <class 'str'>3 <class 'int'>3.0 <class 'float'>
استخدم ()str و ()int و ()float كلما أردت ضبط النوع بدقة، خصوصاً عند التعامل مع مدخلات المستخدم. 🛠️
🔍 4. Get the Type – استكشف نوع المتغير
لتعرف أي نوع يحمله متغير ما، استخدم دالة ()type العجيبة:
x = 5y = "John"print(type(x)) # <class 'int'>print(type(y)) # <class 'str'>
هذه الدالة مفيدة جداً عند تصحيح الأخطاء واستكشاف البيانات.
📜 5. Single or Double Quotes? – علامات الاقتباس
لإنشاء متغير نصي (String)، يمكنك استخدام علامات الاقتباس المفردة '...' أو المزدوجة "..."، والنتيجة متطابقة تماماً:
x = "John" # double quotesy = 'John' # single quotesprint(x == y) # True
اختر ما يعجبك، لكن حافظ على نمط موحد في مشروعك. إذا كان النص يحتوي على علامة اقتباس مفردة، فاستخدم المزدوجة لإحاطته، والعكس صحيح.
🔤 6. Case-Sensitive – حساسية حالة الأحرف
المتغيرات في بايثون حساسة جداً لحالة الأحرف. a و A متغيران مختلفان تماماً!
a = 4A = "Sally"print(a) # 4print(A) # Sally
انتبه لهذا الأمر، فهو من أكثر أسباب الأخطاء الخفية عند المبتدئين. 🕵️♀️
🏷️ 7. قواعد تسمية المتغيرات (Variable Names)
لتكتب كوداً مقروءاً واحترافياً، التزم بهذه القواعد البسيطة:
- ✅ يجب أن يبدأ بحرف (a-z, A-Z) أو شرطة سفلية _.
- ❌ لا يمكن أن يبدأ برقم.
- ✅ يحتوي على حروف وأرقام وشرطة سفلية فقط (لا مسافات ولا علامات خاصة).
- ✅ حساس للأحرف (age ≠ Age ≠ AGE).
- ❌ لا يمكن استخدام الكلمات المحجوزة (مثل if, for, class, True...).
أمثلة لأسماء قانونية:
myvar = "John"my_var = "John"_my_var = "John"myVar = "John"MYVAR = "John"myvar2 = "John"
أنماط تسمية المتغيرات متعددة الكلمات:
لجعل المتغيرات مثل my variable name مقروءة، استخدم أحد الأنماط التالية:
نصيحة: مجتمع بايثون يفضل بشدة نمط Snake Case للمتغيرات والدوال. 🐍
🎁 8. Assign Multiple Values – إسناد قيم متعددة في آن واحد
بايثون تحب الاختصار والأناقة. يمكنك إسناد قيم متعددة لمتغيرات متعددة في سطر واحد:
x, y, z = "Orange", "Banana", "Cherry"print(x) # Orangeprint(y) # Bananaprint(z) # Cherry
⚠️ تنبيه: تأكد أن عدد المتغيرات على اليسار يساوي تماماً عدد القيم على اليمين، وإلا ستحصل على خطأ. {alertInfo}
إسناد قيمة واحدة لمتغيرات متعددة:
x = y = z = "Orange" print(x) # Orange print(y) # Orange print(z) # Orange
Unpacking – فك مجموعة إلى متغيرات مستقلة:
إذا كان لديك قائمة (List) أو صف (Tuple)، يمكنك "تفكيكها" مباشرة إلى متغيرات:
fruits = ["Apple", "Banana", "Cherry"]x, y, z = fruitsprint(x) # Appleprint(y) # Bananaprint(z) # Cherry
هذا يسمى Unpacking، وهو سحر حقيقي يختصر الكثير من الأكواد. ✨
🖨️ 9. Output Variables – طباعة المتغيرات
دالة ()print هي أداة المبرمج الأساسية لرؤية ما بداخل المتغيرات. يمكنك دمج النصوص مع المتغيرات بطريقتين رئيسيتين:
الطريقة الأولى: استخدام + للدمج (Concatenation)
x = "awesome"print("Python is " + x) # Python is awesome
لكن انتبه: + تعمل فقط عندما يكون كلا الطرفين نصوصاً. إذا حاولت جمع نص مع رقم، ستحصل على خطأ!
x = 5# print("The number is " + x) # TypeError!
الحل: حول الرقم إلى نص باستخدام ()str:
x = 5print("The number is " + str(x)) # The number is 5
الطريقة الثانية (المفضلة): f-strings
وهي الأسهل والأوضح، وتستخدم حرف f قبل علامات التنصيص:
age = 25name = "Ahmed"print(f"My name is {name} and I am {age} years old.")
هذه الطريقة تتيح لك وضع المتغيرات وحتى التعبيرات الحسابية بداخل الأقواس {} مباشرة! 🔥
دمج متغيرين نصيين:
x = "Python is " y = "awesome" z = x + y print(z) # Python is awesome
لاحظ أن + مع النصوص تدمجهم، بينما مع الأرقام تجمعهم حسابياً. هذا يسمى Overloading. 🧮
🏋️ تمارين تطبيقية للعباقرة
طبق فوراً على محرر بايثون العرب وشغل الكود لتتأكد من فهمك!
✏️ تمرين 1: الإسناد المتعدد
📋 الحل (اضغط للإظهار)
name, age, city = "Mona", 22, "Cairo"
print(f"{name} is {age} years old and lives in {city}.")
✏️ تمرين 2: اكتشاف الخطأ
ما الخطأ في الكود التالي؟ أصلحه.
my score = 100print(my score)
🔎 الحل (اضغط للإظهار)
my_score = 100 print(my_score)
✏️ تمرين 3: فك مجموعة
لديك Tuple: info = ("Sara", 30, "Engineer"). استخدم Unpacking لتفكيكها إلى متغيرات name_info, age_info, job_info ثم اطبع الجملة: Sara works as Engineer.
📋 الحل (اضغط للإظهار)
info = ("Sara", 30, "Engineer") name_info, age_info, job_info = info print(f"{name_info} works as {job_info}.")
🎓 خلاصة الدرس الخامس
اليوم تعلمنا أن المتغيرات هي حاويات مرنة للبيانات. 🧃
- تُنشأ بمجرد إسناد قيمة x = 5.
- نوعها ديناميكي، ويمكن تغييره لاحقاً.
- يمكننا التحكم بنوعها عبر Casting واستكشافه بـ type().
- أسماؤها حساسة للأحرف، وتتبع قواعد واضحة (Snake Case هو المفضل).
- يمكننا إسناد قيم متعددة بأناقة وتفكيك المجموعات.
- نطبعها ونمزجها مع النصوص بسهولة عبر f-strings.
في الدرس القادم، سنغوص في أنواع البيانات الأساسية (Data Types) بشكل أعمق: الأرقام، النصوص، القوائم، والمزيد! 📊🔜 لا تفوته!
