Python: صياغة بايثون والمتغيرات

حان الوقت الآن لبدء كتابة كود حقيقي بلغة بايثون. دعونا نتناول القواعد الأساسية التالية: التبويب، التعليقات، والمتغيرات.

1. قواعد المسافة البادئة

أبرز ما يميز لغة بايثون هو أنها تستخدم التباعد لتحديد كتل الكود بدلاً من الأقواس المتعرجة {}.

TEXT 📖 للعرض فقط
# ✅ Correct: consistent indentation within a block
if 3 > 1:
    print("3 is greater than 1")
    print("This line is also inside the if block")

# ❌ Error: inconsistent indentation
if 3 > 1:
    print("3 is greater than 1")
  print("Wrong indentation!")  # IndentationError
⚠️ القاعدة الذهبية: استخدم دائمًا 4 مسافات للتبعيض، ولا تستخدم أبدًا علامات الجدولة. ستقوم معظم برامج التحرير (مثل VS Code وPyCharm) تلقائيًا بتحويل الضغط على مفتاح الجدولة إلى 4 مسافات.

لا يقتصر استخدام المسافة البادئة على عبارات if فحسب، بل يمتد ليشمل جميع كتل الكود — مثل الحلقات، والدوال، والفئات، وغيرها:

PYTHON
# Indentation in a for loop
for i in range(3):
    print(i)          # This line is inside the loop
    print("---")      # This line is also inside the loop
print("Done")         # This line is NOT inside the loop

2. التعليقات

التعليقات مخصصة للقراء البشريين — بلغة بايثون تتجاهلها تمامًا.

(1) التعليقات أحادية السطر: #

PYTHON
# This is a single-line comment
print("Hello")  # Comment after code

# Multi-line comments use multiple # symbols
# This is line two
# This is line three

(2) التعليقات النصية متعددة الأسطر: """ """ أو ''' '''

من الناحية الفنية، هذه سلاسل نصية، لكنها تُستخدم عادةً كتعليقات متعددة الأسطر:

PYTHON
"""
This is a multi-line comment
Useful for writing function descriptions
Or temporarily blocking out large blocks of code
"""
print("The multi-line string above won't execute")

3. المتغيرات

لا تحتاج متغيرات لغة بايثون إلى إعلانات الأنواع — ما عليك سوى تعيين قيمة لها وستكون جاهزًا للبدء:

PYTHON
name = "Alice"    # str
age = 25          # int
height = 1.75     # float
is_student = True  # bool

(1) قواعد تسمية المتغيرات

القاعدة صحيح ✅ غير صحيح ❌
أحرف وأرقام وشرطات سفلية فقط my_name my-name
لا يمكن أن يبدأ برقم var1 1var
يراعي التمييز بين الأحرف الكبيرة والصغيرة name وName مختلفان -
لا يمكن أن تكون كلمة رئيسية - if، for، class

(2) قواعد تسمية (PEP 8)

TEXT 📖 للعرض فقط
# ✅ Variables: lowercase with underscores (snake_case)
user_name = "Alice"
total_price = 99.9
max_value = 100

# ✅ Constants: ALL_CAPS with underscores
PI = 3.14159
MAX_SIZE = 1024

# ❌ Not recommended
userName = "Alice"     # CamelCase (Java style)
UserName = "Alice"     # Looks like a class name

(3) التعيين المتعدد للمتغيرات

تتيح لك لغة بايثون تعيين متغيرات متعددة في سطر واحد:

PYTHON
# Assign multiple values at once
a, b, c = 1, 2, 3
print(a, b, c)  # 1 2 3

# Swap two variables (other languages need a temporary variable)
x, y = 10, 20
x, y = y, x
print(x, y)  # 20 10

# Assign the same value to multiple variables
m = n = p = 0
print(m, n, p)  # 0 0 0

▶ مثال: أنواع المتغيرات والتبديل (مستوى الصعوبة ⭐)

PYTHON
# Define variables of different types
name = "Alice"
age = 25
height = 1.68
is_student = True

# Print variable info
print(f"{name} is {age} years old, {height}m tall")
print(f"Student status: {is_student}")

# Swap two variables
a, b = 10, 20
print(f"Before: a={a}, b={b}")
a, b = b, a
print(f"After: a={a}, b={b}")

# Check types
print(f"name type: {type(name)}")
print(f"age type: {type(age)}")
print(f"height type: {type(height)}")
▶ جرّب الكود

الناتج:

TEXT 📖 للعرض فقط
Alice is 25 years old, 1.68m tall
Student status: True
Before: a=10, b=20
After: a=20, b=10
name type: <class 'str'>
age type: <class 'int'>
height type: <class 'float'>

▶ مثال: استكشاف أنواع المتغيرات (مستوى الصعوبة ⭐)

PYTHON
x = 42
y = 3.14
z = "Hello"
w = True

print(f"x = {x}, type = {type(x).__name__}")
print(f"y = {y}, type = {type(y).__name__}")
print(f"z = {z}, type = {type(z).__name__}")
print(f"w = {w}, type = {type(w).__name__}")

print(f"\nint(y) = {int(y)}")
print(f"float(x) = {float(x)}")
print(f"str(x) = {str(x)}")
print(f"bool(0) = {bool(0)}, bool(1) = {bool(1)}")

var = 100
print(f"\nvar = {var}, type = {type(var).__name__}")
var = "now a string"
print(f"var = {var}, type = {type(var).__name__}")
▶ جرّب الكود

المخرجات:

TEXT 📖 للعرض فقط
x = 42, type = int
y = 3.14, type = float
z = Hello, type = str
w = True, type = bool

int(y) = 3
float(x) = 42.0
str(x) = 42
bool(0) = False, bool(1) = True

var = 100, type = int
var = now a string, type = str

▶ مثال: حيل تعيين المتغيرات (مستوى الصعوبة ⭐)

PYTHON
a, b, c = 10, 20, 30
print(f"a={a}, b={b}, c={c}")

x, y = 100, 200
print(f"Before swap: x={x}, y={y}")
x, y = y, x
print(f"After swap: x={x}, y={y}")

p = q = r = 0
print(f"p={p}, q={q}, r={r}")

colors = ["red", "green", "blue"]
first, second, third = colors
print(f"First: {first}, Second: {second}, Third: {third}")
▶ جرّب الكود

المخرجات:

TEXT 📖 للعرض فقط
a=10, b=20, c=30
Before swap: x=100, y=200
After swap: x=200, y=100
p=0, q=0, r=0
First: red, Second: green, Third: blue

4. الدالة type()

استخدم type() للتحقق من نوع المتغير:

PYTHON
print(type(10))       # <class 'int'>
print(type(3.14))     # <class 'float'>
print(type("Hello"))  # <class 'str'>
print(type(True))     # <class 'bool'>

# Variables can change type when reassigned (dynamic typing)
x = 10
print(type(x))  # <class 'int'>
x = "Hello"
print(type(x))  # <class 'str'>  ← type changed

5. الأخطاء الشائعة

TEXT 📖 للعرض فقط
# IndentationError: wrong indentation
print("Too much indentation")
  print("This line has an extra space")  # ❌

# NameError: variable not defined
print(z)  # ❌ z was never assigned

# SyntaxError: invalid syntax
print("Hello)  # ❌ quotes not closed

❓ أسئلة شائعة

س لماذا تستخدم لغة بايثون المسافات البادئة بدلاً من الأقواس {} مثل اللغات الأخرى؟
ج كان مبتكر لغة بايثون، غويدو فان روسوم، يؤمن بأن الكود يجب أن يكون قابلاً للقراءة من قبل البشر أولاً. تمثل المسافات البادئة بنية الكود بصريًّا — فعينك ترى ذلك بالفعل، فلماذا نحتاج إلى رموز إضافية؟ وهذا يفرض تنسيقًا متسقًا ويقضي على فئات كاملة من الأخطاء (الأقواس المفقودة، والأقواس غير المتطابقة). إنها فلسفة تصميمية: «الجمال أفضل من القبح.»
س لقد خلطت بين علامات التبويب والمسافات — يبدو الكود الخاص بي سليمًا لكنه يُظهر خطأ IndentationError. لماذا؟
ج تعامل لغة Python علامات التبويب والمسافات كأحرف مختلفة. قد يبدو السطر الذي تم تباعد أحرفه باستخدام علامة تبويب مماثلاً للسطر الذي تم تباعد أحرفه باستخدام 4 مسافات من وجهة نظرك، لكن لغة Python ترى الأمر بشكل مختلف. الحل: قم بضبط محرر النصوص الخاص بك لتحويل علامات التبويب إلى مسافات (يقوم VS Code بذلك بشكل افتراضي). استخدم python -m tabnanny myfile.py للبحث عن التباعد المختلط.
س ما الفرق بين الكتابة الديناميكية في لغة بايثون والكتابة الثابتة في لغات مثل جافا؟ وهل لهذا الفرق أهمية؟
ج في اللغات ذات الكتابة الثابتة، تُعلن نوع المتغير مسبقًا (int x = 5;) ولا يمكن تغييره. أما في لغة Python، فيتم تحديد الأنواع أثناء وقت التشغيل ويمكن أن تتغير (x = 5; x = "hello" تعمل). يعد الكتابة الديناميكية أكثر مرونة وأسرع في الكتابة، لكن أخطاء الأنواع لا تظهر إلا أثناء وقت التشغيل. بالنسبة للمبتدئين، تعني الكتابة الديناميكية تقليل الكود النمطي؛ أما بالنسبة للمشاريع الكبيرة، فإن الكتابة الثابتة تكتشف الأخطاء في وقت أبكر.
س تظهر لي باستمرار رسالة الخطأ NameError: name 'xxx' is not defined. كيف يمكنني حل هذه المشكلة؟
ج تعني رسالة الخطأ NameError أن لغة Python لا تستطيع العثور على متغير بهذا الاسم. الأسباب الشائعة: ① خطأ إملائي في اسم المتغير (تراعي لغة Python التمييز بين الأحرف الكبيرة والصغيرة — Namename)؛ ② استخدام متغير قبل تعيين قيمته؛ ③ تم تعريف المتغير داخل دالة أو حلقة، لكنك تحاول الوصول إليه من خارجها. حل سريع: أضف print() قبل سطر الخطأ للتحقق من المتغيرات الموجودة فعليًا في تلك النقطة.
س ما الفرق بين = و==؟ فأنا أخلط بينهما دائمًا.
ج = هي عملية التعيين — فهي تُعيّن قيمة لمتغير (x = 5 تعني «x تحتوي الآن على 5»). أما == فهي مقارنة — تسأل «هل هذان متساويان؟» (x == 5 تُرجع True أو False). تخيل = كسهم يشير إلى اليسار (x ← 5) و== كميزان يوازن بين الجانبين. هذا أحد الأخطاء الأكثر شيوعًا بين المبتدئين — كتابة if x = 5: بدلاً من if x == 5:.

📖 ملخص

📝 تمارين

  1. اكتب كودًا يحدد ثلاثة متغيرات: city (اسم المدينة)، year (السنة)، score (الدرجة 88.5)، ثم اعرضها باستخدام print()
  2. قم بتبديل المتغيرين a = 5 وb = 10 بحيث يصبح a يساوي 10 وb يساوي 5
  3. استخدم type() للتحقق من أنواع True و"123" و3.0
  4. اكتب عمدًا شفرة تحتوي على خطأ في المسافة البادئة، واطلع على الخطأ الذي تظهره لغة Python، ثم التقط لقطة شاشة لرسالة الخطأ
Web-Tutorial.com

فريق Web-Tutorial التقني

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

100%