مرحبًا بك في الدرس الخامس من سلسلة أساسيات بايثون على موقع بايثون العرب. في الدرس السابق تعلمنا شرح التعليقات Comments في بايثون، وكيف نستخدم علامة # لكتابة ملاحظات داخل الكود أو تعطيل بعض الأسطر مؤقتًا.
في هذا الدرس سننتقل إلى مفهوم مهم جدًا في أي لغة برمجة، وهو المتغيرات في بايثون Python Variables. المتغيرات هي الطريقة التي نخزن بها القيم داخل البرنامج، مثل الاسم، العمر، السعر، النتيجة، أو أي بيانات نريد استخدامها لاحقًا.
وإذا أردت تجربة الأمثلة مباشرة، يمكنك استخدام محرر بايثون العرب وتشغيل الأكواد خطوة بخطوة.
{getToc} $title={محتوى المقال}
{alertInfo} المتغير في بايثون هو اسم يشير إلى قيمة مخزنة في الذاكرة، ويمكن استخدامه لاحقًا بدل كتابة القيمة نفسها كل مرة.
ما هي المتغيرات في بايثون؟
المتغير هو اسم نستخدمه لتخزين قيمة داخل البرنامج. تخيل أن لديك صندوقًا، وتضع عليه اسمًا، ثم تضع داخله شيئًا معينًا. في البرمجة، اسم الصندوق هو المتغير، والشيء الموجود داخله هو القيمة.
مثال بسيط:
age = 25
name = "Ahmed"
print(age)
print(name)
في المثال السابق أنشأنا متغيرين:
ageيحتوي على الرقم25.nameيحتوي على النص"Ahmed".
وعند طباعة المتغيرين ستكون النتيجة:
25
Ahmed
إنشاء متغير في بايثون
في بايثون لا تحتاج إلى كتابة نوع المتغير قبل إنشائه. يكفي أن تكتب اسم المتغير، ثم علامة الإسناد =، ثم القيمة التي تريد تخزينها.
x = 5
y = "John"
print(x)
print(y)
لاحظ أننا لم نكتب مثلًا int x أو string y. بايثون تفهم نوع القيمة تلقائيًا، وهذا من الأشياء التي تجعلها سهلة للمبتدئين.
{alertSuccess} في بايثون، يتم إنشاء المتغير بمجرد إسناد قيمة إليه لأول مرة.
ما معنى علامة = في المتغيرات؟
علامة = في بايثون لا تعني المساواة الحسابية فقط، بل تُستخدم هنا للإسناد. أي أننا نقول لبايثون: خزّن هذه القيمة داخل هذا الاسم.
score = 90
المعنى هنا: خزّن الرقم 90 داخل المتغير score.
تغيير قيمة المتغير
يمكنك تغيير قيمة المتغير في أي وقت بإسناد قيمة جديدة له.
x = 4
print(x)
x = "Sally"
print(x)
الناتج:
4
Sally
في البداية كان x رقمًا، ثم أصبح نصًا. هذه المرونة تسمى غالبًا Dynamic Typing، أي أن نوع المتغير يتحدد حسب القيمة التي يحملها.
{alertWarning} رغم أن بايثون تسمح بتغيير نوع المتغير، حاول ألا تغيّر نوع المتغير كثيرًا بدون سبب، حتى لا يصبح الكود مربكًا.
معرفة نوع المتغير باستخدام type
أحيانًا تريد معرفة نوع القيمة الموجودة داخل المتغير. هل هي رقم؟ نص؟ قائمة؟ في هذه الحالة نستخدم الدالة type().
x = 5
y = "John"
print(type(x))
print(type(y))
الناتج:
<class 'int'>
<class 'str'>
هذا يعني أن x من نوع int أي رقم صحيح، وأن y من نوع str أي نص.
تحويل نوع المتغير Casting
في بعض الحالات تحتاج إلى تحويل القيمة من نوع إلى نوع آخر. مثلًا قد يكون لديك الرقم 3 وتريد تحويله إلى نص، أو لديك نص يحتوي على رقم وتريد تحويله إلى عدد.
نستخدم دوال مثل:
str()لتحويل القيمة إلى نص.int()لتحويل القيمة إلى رقم صحيح.float()لتحويل القيمة إلى رقم عشري.
x = str(3)
y = int(3)
z = float(3)
print(x, type(x))
print(y, type(y))
print(z, type(z))
الناتج:
3 <class 'str'>
3 <class 'int'>
3.0 <class 'float'>
{alertInfo} التحويل بين الأنواع مهم جدًا عند التعامل مع مدخلات المستخدم، لأن input غالبًا ترجع البيانات كنص.
النصوص في المتغيرات: علامات مفردة أم مزدوجة؟
عند تخزين نص داخل متغير، يمكنك استخدام علامات اقتباس مزدوجة أو مفردة. الطريقتان صحيحتان:
x = "John"
y = 'John'
print(x == y)
الناتج:
True
المهم أن تفتح علامة الاقتباس وتغلقها بنفس النوع. إذا بدأت بعلامة مزدوجة، أغلق بمزدوجة، وإذا بدأت بمفردة، أغلق بمفردة.
هل أسماء المتغيرات حساسة لحالة الأحرف؟
نعم. في بايثون، المتغيرات حساسة لحالة الأحرف. هذا يعني أن a و A متغيران مختلفان.
a = 4
A = "Sally"
print(a)
print(A)
الناتج:
4
Sally
{alertWarning} انتبه جيدًا لحالة الأحرف. المتغيرnameيختلف عنNameوNAME.
قواعد تسمية المتغيرات في بايثون
حتى يكون اسم المتغير صحيحًا في بايثون، يجب أن يتبع قواعد محددة:
- يجب أن يبدأ بحرف أو شرطة سفلية
_. - لا يمكن أن يبدأ برقم.
- يمكن أن يحتوي على حروف وأرقام وشرطة سفلية فقط.
- لا يحتوي على مسافات.
- لا تستخدم الكلمات المحجوزة في بايثون مثل
ifوforوclass. - الأسماء حساسة لحالة الأحرف.
أمثلة على أسماء صحيحة
myvar = "John"
my_var = "John"
_my_var = "John"
myVar = "John"
MYVAR = "John"
myvar2 = "John"
أمثلة على أسماء خاطئة
# أمثلة خاطئة
2myvar = "John"
my-var = "John"
my var = "John"
الأخطاء في المثال السابق سببها أن الاسم يبدأ برقم، أو يحتوي على شرطة عادية، أو يحتوي على مسافة.
أفضل طريقة لتسمية المتغيرات
عندما يتكون اسم المتغير من أكثر من كلمة، يفضل في بايثون استخدام أسلوب snake_case، وهو كتابة الكلمات بحروف صغيرة وفصلها بشرطة سفلية.
user_name = "Ahmed"
total_price = 150
student_age = 20
هذه الطريقة تجعل الكود أوضح وأسهل قراءة، خصوصًا عندما يكبر المشروع.
{alertSuccess} استخدم أسماء واضحة مثلstudent_nameبدل أسماء غامضة مثلx، إلا إذا كان المثال بسيطًا جدًا.
إسناد قيم متعددة لمتغيرات متعددة
تسمح بايثون بإسناد أكثر من قيمة لأكثر من متغير في سطر واحد.
x, y, z = "Orange", "Banana", "Cherry"
print(x)
print(y)
print(z)
الناتج:
Orange
Banana
Cherry
{alertWarning} عند إسناد قيم متعددة، يجب أن يكون عدد المتغيرات مساويًا لعدد القيم، وإلا سيظهر خطأ.
إسناد قيمة واحدة لعدة متغيرات
يمكنك أيضًا إسناد نفس القيمة لأكثر من متغير في سطر واحد:
x = y = z = "Orange"
print(x)
print(y)
print(z)
الناتج:
Orange
Orange
Orange
فك القيم من قائمة أو Tuple إلى متغيرات
إذا كانت لديك قائمة أو Tuple تحتوي على عدة قيم، يمكنك توزيع هذه القيم على متغيرات مباشرة. هذه العملية تسمى Unpacking.
fruits = ["Apple", "Banana", "Cherry"]
x, y, z = fruits
print(x)
print(y)
print(z)
الناتج:
Apple
Banana
Cherry
هذه الطريقة مفيدة عندما تكون لديك بيانات مرتبة وتريد تخزين كل جزء منها في متغير مستقل.
طباعة المتغيرات باستخدام print
أكثر طريقة ستستخدمها في البداية لعرض قيمة المتغير هي دالة print().
name = "Ahmed"
age = 25
print(name)
print(age)
ويمكنك دمج النصوص مع المتغيرات بأكثر من طريقة.
دمج النصوص مع المتغيرات باستخدام +
يمكن استخدام علامة + لدمج النصوص مع بعضها:
x = "awesome"
print("Python is " + x)
الناتج:
Python is awesome
لكن انتبه، إذا حاولت دمج نص مع رقم باستخدام + مباشرة، سيظهر خطأ.
x = 5
# هذا السطر يسبب خطأ
# print("The number is " + x)
الحل هو تحويل الرقم إلى نص باستخدام str():
x = 5
print("The number is " + str(x))
استخدام f-string مع المتغيرات
من أفضل وأسهل الطرق لدمج المتغيرات داخل النصوص في بايثون استخدام f-string. نكتب حرف f قبل النص، ثم نضع المتغيرات داخل أقواس معقوفة {}.
name = "Ahmed"
age = 25
print(f"My name is {name} and I am {age} years old.")
الناتج:
My name is Ahmed and I am 25 years old.
{alertSuccess} للمبتدئين، استخدام f-string غالبًا أسهل وأوضح من الدمج بعلامة +، خصوصًا عند وجود أرقام داخل النص.
الفرق بين استخدام + مع النصوص والأرقام
علامة + لها معنى مختلف حسب نوع البيانات:
| المثال | المعنى | الناتج |
|---|---|---|
5 + 3 |
جمع حسابي | 8 |
"Py" + "thon" |
دمج نصوص | Python |
"Age: " + 25 |
خطأ لأنك تدمج نصًا مع رقم مباشرة | TypeError |
أخطاء شائعة عند استخدام المتغيرات
| الخطأ | سبب المشكلة | التصحيح |
|---|---|---|
my score = 100 |
اسم المتغير يحتوي على مسافة | my_score = 100 |
2name = "Ali" |
اسم المتغير يبدأ برقم | name2 = "Ali" |
print(Name) |
المتغير مختلف عن name بسبب حالة الأحرف |
اكتب نفس الاسم تمامًا |
"Age: " + age |
دمج نص مع رقم مباشرة | استخدم f-string أو str(age) |
تمارين بسيطة على المتغيرات
تمرين 1: إنشاء متغيرات
أنشئ ثلاثة متغيرات: name و age و city، ثم اطبع جملة تحتوي عليها.
name = "Mona"
age = 22
city = "Cairo"
print(f"{name} is {age} years old and lives in {city}.")
تمرين 2: اكتشاف الخطأ
ما الخطأ في الكود التالي؟
my score = 100
print(my score)
الخطأ أن اسم المتغير يحتوي على مسافة. التصحيح:
my_score = 100
print(my_score)
تمرين 3: فك القيم
استخدم Unpacking لتفكيك البيانات التالية إلى متغيرات مستقلة:
info = ("Sara", 30, "Engineer")
name_info, age_info, job_info = info
print(f"{name_info} works as {job_info}.")
ماذا تعلمنا في هذا الدرس؟
- تعلمنا أن المتغيرات تستخدم لتخزين القيم داخل البرنامج.
- عرفنا أن بايثون لا تحتاج إلى تحديد نوع المتغير مسبقًا.
- استخدمنا
type()لمعرفة نوع المتغير. - تعلمنا تحويل الأنواع باستخدام
str()وint()وfloat(). - تعرفنا على قواعد تسمية المتغيرات في Python.
- تعلمنا الإسناد المتعدد وفك القيم من القوائم أو Tuples.
- استخدمنا
print()وf-stringلطباعة المتغيرات داخل النصوص.
روابط مفيدة من بايثون العرب
- أساسيات بايثون 4: شرح التعليقات Comments
- أساسيات بايثون 6: شرح أنواع البيانات Data Types
- حل خطأ can only concatenate str not int to str في بايثون
- محرر بايثون العرب لتجربة الأكواد أون لاين
- جميع دروس كورس أساسيات بايثون
الخلاصة
المتغيرات في بايثون من أهم الأساسيات التي ستستخدمها في كل برنامج تقريبًا. فهي تساعدك على تخزين البيانات، إعادة استخدامها، تعديلها، وطباعتها داخل النصوص. وبمجرد أن تفهم المتغيرات جيدًا، يصبح فهم أنواع البيانات، العمليات الحسابية، الشروط، والدوال أسهل بكثير.
احرص على اختيار أسماء واضحة للمتغيرات، واستخدم snake_case عندما يتكون الاسم من أكثر من كلمة، ولا تنسَ أن بايثون حساسة لحالة الأحرف.
{alertSuccess} الخلاصة السريعة: المتغير هو اسم يخزن قيمة. اكتب اسمًا واضحًا، استخدم = للإسناد، واستعمل print و f-string لعرض القيم بسهولة.