القواعد النحوية الأساسية
المفاهيم الأساسية للبدء في كتابة الشيفرة
أساسيات بايثون: القواعد النحوية والمفاهيم الأساسية
بعد تثبيت بايثون، حان الوقت للتعرّف على قواعدها النحوية ومفاهيمها الأساسية. سيرشدك هذا الدرس عبر الأساسيات الضرورية في بايثون: المتغيرات، وأنواع البيانات، والعوامل، وهياكل التحكم في سير التنفيذ.
تشتهر بايثون بقواعدها النحوية الواضحة والمقروءة، التي تركّز على البساطة والاتساق. وهذا أحد الأسباب التي تجعلها لغة برمجة أولى ممتازة.
القواعد النحوية في بايثون
أول ما ينبغي فهمه في بايثون هو قواعدها النحوية الخاصة.
المسافة البادئة وكتل الشيفرة
على خلاف كثير من اللغات التي تستخدم الأقواس المعقوفة {} لتحديد كتل الشيفرة، تستخدم بايثون المسافة البادئة (indentation)، وهي عادةً 4 مسافات:
# مثال على المسافة البادئة في بايثون
if condition:
# هذه الكتلة مزاحة بـ 4 مسافات
instruction1
instruction2
if autre_condition:
# كتلة متداخلة - 8 مسافات
instruction3
# العودة إلى المستوى الرئيسي - بدون مسافة بادئة
instruction_suivante
يجعل هذا الأسلوب الشيفرة أكثر مقروئية بشكل طبيعي، لكنه يعني أيضًا أن المسافات مهمة في بايثون!
التعليقات
تتيح التعليقات إضافة ملاحظات توضيحية داخل الشيفرة:
# هذا تعليق على سطر واحد
"""
هذا تعليق
على عدة أسطر (docstring)
"""
المتغيرات وأنواع البيانات
في بايثون، لا تحتاج إلى التصريح بنوع المتغير قبل استخدامه. يُحدَّد النوع تلقائيًا عند الإسناد.
إسناد المتغيرات
# إسناد بسيط
nom = "Alice"
age = 30
# إسنادات متعددة
x, y, z = 1, 2, 3
# إسناد القيمة نفسها إلى عدة متغيرات
a = b = c = 0
اصطلاحات التسمية
- أسماء المتغيرات حساسة لحالة الأحرف (
nomوNomمختلفان) - يجب أن تبدأ بحرف أو بشرطة سفلية (underscore)
- يمكن أن تحتوي على حروف وأرقام وشرطات سفلية
- بحسب الاصطلاح، يُستخدم نمط
snake_caseللمتغيرات في بايثون
# تسمية جيدة
user_name = "Alice"
age_utilisateur = 30
_variable_privee = "secret"
# تسمية سيئة (يجب تجنبها)
UserName = "Alice" # نمط CamelCase (مخصص للأصناف)
1variable = 10 # يبدأ برقم (خطأ في القواعد النحوية)
nom-utilisateur = "Bob" # يحتوي على شرطة (خطأ في القواعد النحوية)
أنواع البيانات الأساسية
تحتوي بايثون على عدة أنواع بيانات مدمجة:
1. الأعداد
# الأعداد الصحيحة (int)
age = 30
code_postal = 75000
# الأعداد ذات الفاصلة العائمة (float)
prix = 19.99
pi = 3.14159
# الأعداد المركبة
complexe = 3 + 4j
2. السلاسل النصية (str)
# سلاسل بسيطة
prenom = "Marie"
nom = 'Dupont'
# سلاسل متعددة الأسطر
description = """Ceci est une chaîne
qui s'étend sur plusieurs
lignes."""
# تنسيق السلاسل (f-strings - بايثون 3.6+)
message = f"Bonjour {prenom} {nom}, vous avez {age} ans."
# دوال مفيدة للسلاسل
print(prenom.upper()) # MARIE
print(nom.lower()) # dupont
print(" texte ".strip()) # "texte"
print(",".join(["a", "b"])) # "a,b"
print("abc,def".split(",")) # ["abc", "def"]
3. القيم المنطقية (bool)
# القيم المنطقية
est_majeur = True
est_inscrit = False
# تعبيرات شرطية تنتج قيمًا منطقية
a = 5
b = 10
print(a < b) # True
print(a == b) # False
print(a >= 5) # True
4. القيمة None
None تكافئ null في لغات أخرى، وتمثّل غياب القيمة:
resultat = None
# التحقق مما إذا كان المتغير يساوي None
if resultat is None:
print("Aucun résultat disponible")
التحقق من الأنواع
لمعرفة نوع متغير ما، استخدم الدالة type():
x = 10
print(type(x)) # <class 'int'>
y = "bonjour"
print(type(y)) # <class 'str'>
تحويل الأنواع (casting)
# التحويل إلى عدد صحيح
age_str = "30"
age = int(age_str) # 30 (عدد صحيح)
# التحويل إلى سلسلة نصية
nombre = 42
nombre_str = str(nombre) # "42" (سلسلة نصية)
# التحويل إلى عدد عائم
prix = float("19.99") # 19.99 (عدد عائم)
# التحويل إلى قيمة منطقية
valeur = bool(0) # False (القيم 0 و"" و[] و{} و None تُقيَّم على أنها False)
العوامل
العوامل الحسابية
a = 10
b = 3
addition = a + b # 13
soustraction = a - b # 7
multiplication = a * b # 30
division = a / b # 3.3333... (تعيد دائمًا float)
division_entiere = a // b # 3 (القسمة الصحيحة)
modulo = a % b # 1 (باقي القسمة)
puissance = a ** b # 1000 (a مرفوعًا إلى القوة b)
عوامل المقارنة
a = 10
b = 5
egal = a == b # False
different = a != b # True
superieur = a > b # True
inferieur = a < b # False
superieur_ou_egal = a >= b # True
inferieur_ou_egal = a <= b # False
العوامل المنطقية
x = True
y = False
et = x and y # False (يجب أن تكون القيمتان True)
ou = x or y # True (يجب أن تكون إحداهما على الأقل True)
non = not x # False (يعكس القيمة)
عوامل الإسناد
x = 10
x += 5 # x = x + 5 (قيمة x الآن 15)
x -= 3 # x = x - 3 (قيمة x الآن 12)
x *= 2 # x = x * 2 (قيمة x الآن 24)
x /= 4 # x = x / 4 (قيمة x الآن 6.0)
x //= 2 # x = x // 2 (قيمة x الآن 3.0)
x %= 2 # x = x % 2 (قيمة x الآن 1.0)
x **= 3 # x = x ** 3 (قيمة x الآن 1.0)
عوامل الانتماء
liste = [1, 2, 3, 4, 5]
print(3 in liste) # True (3 موجود في القائمة)
print(6 not in liste) # True (6 غير موجود في القائمة)
عوامل الهوية
a = [1, 2, 3]
b = [1, 2, 3]
c = a
print(a is c) # True (a و c يشيران إلى الكائن نفسه)
print(a is b) # False (a و b كائنان مختلفان)
print(a == b) # True (a و b لهما القيمة نفسها)
هياكل التحكم
تتيح لك هياكل التحكم توجيه مسار تنفيذ برنامجك.
الهياكل الشرطية (if وelif وelse)
age = 18
if age < 18:
print("Mineur")
elif age == 18:
print("Tout juste majeur")
else:
print("Majeur")
التعبير الشرطي (العامل الثلاثي)
# البنية: valeur_si_vrai if condition else valeur_si_faux
statut = "majeur" if age >= 18 else "mineur"
الحلقات التكرارية
حلقة for
حلقة for في بايثون هي حلقة «لكل عنصر» تتكرر على متتالية:
# التكرار على قائمة
fruits = ["pomme", "banane", "cerise"]
for fruit in fruits:
print(fruit)
# التكرار على نطاق من الأعداد
for i in range(5): # 0, 1, 2, 3, 4
print(i)
# range مع بداية ونهاية
for i in range(2, 6): # 2, 3, 4, 5
print(i)
# range مع خطوة
for i in range(0, 10, 2): # 0, 2, 4, 6, 8
print(i)
# الترقيم (الفهرس والقيمة)
for index, fruit in enumerate(fruits):
print(f"Index {index}: {fruit}")
حلقة while
تستمر حلقة while ما دام الشرط صحيحًا:
compteur = 0
while compteur < 5:
print(compteur)
compteur += 1
التحكم في الحلقات
# break - الخروج من الحلقة
for i in range(10):
if i == 5:
break # الخروج من الحلقة عندما تصل i إلى 5
print(i) # يعرض 0, 1, 2, 3, 4
# continue - الانتقال إلى التكرار التالي
for i in range(10):
if i % 2 == 0:
continue # تخطي الأعداد الزوجية
print(i) # يعرض 1, 3, 5, 7, 9
# else في الحلقات - تُنفَّذ إذا انتهت الحلقة بشكل طبيعي (بدون break)
for i in range(5):
print(i)
else:
print("Boucle terminée sans break")
المدخلات والمخرجات الأساسية
العرض (المخرج القياسي)
# عرض بسيط
print("Bonjour, monde!")
# عرض مع متغيرات
nom = "Alice"
print("Bonjour,", nom)
# التنسيق باستخدام f-strings (بايثون 3.6+)
age = 30
print(f"{nom} a {age} ans.")
# عدة معاملات
print("Nom:", nom, "Age:", age)
# التحكم في الفاصل ونهاية السطر
print("a", "b", "c", sep="-", end="!\n") # يعرض "a-b-c!"
قراءة مدخلات المستخدم
# قراءة مدخل المستخدم (تعيد دائمًا سلسلة نصية)
nom = input("Entrez votre nom: ")
print(f"Bonjour, {nom}!")
# تحويل المدخل إلى عدد
age_str = input("Entrez votre âge: ")
age = int(age_str) # التحويل إلى عدد صحيح
مثال كامل
إليك مثالًا يستخدم عدة مفاهيم تعلمناها:
# برنامج يحسب المتوسط الحسابي لقائمة من الأعداد
def calculer_moyenne(nombres):
"""Calcule la moyenne d'une liste de nombres."""
if not nombres: # إذا كانت القائمة فارغة
return 0
return sum(nombres) / len(nombres)
# طلب عدد القيم
try:
n = int(input("Combien de nombres voulez-vous entrer? "))
# جمع الأعداد
nombres = []
for i in range(n):
valeur = float(input(f"Entrez le nombre {i+1}: "))
nombres.append(valeur)
# حساب المتوسط وعرضه
moyenne = calculer_moyenne(nombres)
print(f"La moyenne des nombres entrés est: {moyenne:.2f}")
# عرض ما إذا كان كل عدد أكبر من المتوسط أو أصغر منه
print("\nComparaison avec la moyenne:")
for i, nombre in enumerate(nombres):
if nombre > moyenne:
relation = "supérieur à"
elif nombre < moyenne:
relation = "inférieur à"
else:
relation = "égal à"
print(f"Nombre {i+1} ({nombre}) est {relation} la moyenne.")
except ValueError:
print("Erreur: Veuillez entrer un nombre valide.")
يقوم هذا البرنامج بما يلي:
- يعرّف دالة لحساب المتوسط
- يسأل المستخدم عن عدد الأعداد التي يرغب في إدخالها
- يجمع هذه الأعداد
- يحسب متوسطها ويعرضه
- يقارن كل عدد بالمتوسط
أفضل الممارسات ونصائح
لكتابة شيفرة بايثون نظيفة ومقروءة، اتبع هذه الإرشادات:
-
مسافة بادئة متسقة: استخدم دائمًا 4 مسافات للمسافة البادئة (دون علامات جدولة).
-
تسمية وصفية: اختر أسماءً توضّح بجلاء الغرض من متغيراتك.
-
Docstrings: وثّق دوالك بسلاسل التوثيق.
-
DRY (Don’t Repeat Yourself): تجنّب التكرار باستخدام الدوال والحلقات.
-
KISS (Keep It Simple, Stupid): فضّل البساطة والوضوح على الحيلة.
-
سطر واحد، تعليمة واحدة: تجنّب وضع عدة تعليمات في سطر واحد.
-
معالجة الأخطاء: استخدم try/except للتعامل مع الأخطاء المحتملة.
-
PEP 8: اتبع اصطلاحات أسلوب بايثون (PEP 8) لضمان الاتساق.
تمارين عملية
لترسيخ معارفك، جرّب هذه التمارين:
-
اكتب برنامجًا يحوّل درجة الحرارة من مئوية إلى فهرنهايت (الصيغة: F = C * 9/5 + 32).
-
أنشئ برنامجًا يحدد ما إذا كان العدد الذي أدخله المستخدم زوجيًا أم فرديًا.
-
اكتب برنامجًا يعرض جدول الضرب لعدد أدخله المستخدم.
-
أنشئ برنامجًا يعدّ تنازليًا من 10 إلى 1، ثم يعرض “Décollage !”.
-
اكتب برنامجًا يسأل عن عمر المستخدم ويعرض رسالة مختلفة بحسب الفئة العمرية.
الخلاصة
في هذا الدرس، غطّينا الأساسيات الجوهرية للغة بايثون:
- القواعد النحوية والمسافة البادئة
- المتغيرات وأنواع البيانات
- العوامل (الحسابية والمقارنة والمنطقية)
- هياكل التحكم (if/elif/else وfor وwhile)
- المدخلات والمخرجات الأساسية
تشكّل هذه المفاهيم الأسس التي ستبني عليها فهمك لبايثون. وكلما تقدمت، ستكتشف كيف تتكامل هذه العناصر لإنشاء برامج أكثر تعقيدًا وقوة.
في الدرس القادم، سنستكشف هياكل البيانات في بايثون: القوائم والصفوف (tuples) والقواميس والمجموعات، التي ستتيح لك تنظيم بياناتك ومعالجتها بكفاءة.
هل تحتاج إلى مراجعة تثبيت بايثون؟ اطّلع على دليل التثبيت.
التعليقات
التعليقات مدعومة عبر GitHub Discussions
سجّل الدخول باستخدام GitHub للمشاركة في النقاش