# ورقة مرجعية لـ Python: الصياغة والأوامر والدوال المدمجة في جداول

URL: https://skillaria.top/ar/guides/python/python-cheat-sheet

صياغة Python تعتمد على المسافات البادئة بدلاً من الأقواس المعقوفة: الكتلة التي تلي النقطتين تُزاح بأربع مسافات. الأساس هو المتغيرات بلا تصريح بالنوع، وجمل if/elif/else، والحلقات for وwhile، والدوال def، إضافة إلى الدوال المدمجة مثل print وlen وrange وinput وtype، وطرق النصوص والقوائم والقواميس.

تجمع هذه الورقة المرجعية لـ Python في صفحة واحدة كل ما تحتاج إلى حفظه في الأشهر الأولى: صياغة Python، والحلقات، والدوال المدمجة، وطرق النصوص والقوائم والقواميس، وأوامر الطرفية. كل جدول مرجع قصير فيه أمثلة عملية يمكنك لصقها مباشرة في REPL.

## أساسيات صياغة Python

أهم ما يميز اللغة أن الكتل تُحدَّد بالمسافات البادئة لا بالأقواس. بعد السطر الذي ينتهي بنقطتين (`if` و`for` و`def` و`class`) تُزاح الأسطر التالية بأربع مسافات. ولا يجوز خلط الجدولة (Tab) بالمسافات، وإلا ستحصل على `IndentationError`.

| البناء | مثال | التوضيح |
| --- | --- | --- |

| تعليق | `# نص` | كل ما بعد # حتى نهاية السطر يُتجاهل |

| متغير | `age = 25` | لا يُصرَّح بالنوع، بل تحدده القيمة |

| تعيين متعدد | `a, b = 1, 2` | فك التغليف؛ وتبادل القيم: `a, b = b, a` |

| الإخراج | `print("مرحباً", name)` | المعاملات تُفصل بمسافة |

| الإدخال | `s = input("الاسم: ")` | يعيد دائماً نصاً |

| f-string | `f"{name}: {price:.2f}"` | إدراج التعابير مع التنسيق |

| تلميح النوع | `count: int = 0` | تلميح للمحرر وأدوات الفحص، لا يُتحقق منه عند التشغيل |

| كتلة فارغة | `pass` | عنصر نائب حين تتطلب الصياغة جسماً |

| الاستيراد | `from math import sqrt` | ربط وحدة أو اسم منها |

### أنواع البيانات

| النوع | القيمة الحرفية | قابل للتعديل |
| --- | --- | --- |

| `int` | `42`، `1_000_000` | لا |

| `float` | `3.14`، `1e-3` | لا |

| `bool` | `True`، `False` | لا |

| `str` | `"نص"`، `'نص'`، `"""عدة أسطر"""` | لا |

| `list` | `[1, 2, 3]` | نعم |

| `tuple` | `(1, 2)`، `(1,)` | لا |

| `dict` | `{"a": 1}` | نعم |

| `set` | `{1, 2}`، والفارغة `set()` | نعم |

| `NoneType` | `None` | — |

### العوامل

| المجموعة | العوامل | مثال ← النتيجة |
| --- | --- | --- |

| الحساب | `+ - * / // % **` | `7 // 2` ← 3، `7 % 2` ← 1، `2 ** 10` ← 1024 |

| المقارنة | `== != < > <= >=` | `1 < x < 10` — سلسلة مقارنات |

| المنطق | `and or not` | `x or "افتراضي"` |

| الانتماء | `in`، `not in` | `"a" in "abc"` ← True |

| الهوية | `is`، `is not` | `x is None` |

| التعيين | `+= -= *= /=`، `:=` | `if (n := len(s)) > 10: ...` |

## الشروط والمطابقة

```
if score >= 90:
    grade = "A"
elif score >= 70:
    grade = "B"
else:
    grade = "C"

status = "بالغ" if age >= 18 else "طفل"   # العامل الشرطي الثلاثي

match command:
    case "start":
        print("تشغيل")
    case "stop" | "exit":
        print("إيقاف")
    case _:
        print("أمر غير معروف")
```

القيم الخاطئة (False) هي `False` و`None` و`0` والنص الفارغ والمجموعات الفارغة، لذلك بدلاً من `if len(items) > 0` يُكتب ببساطة `if items`.

## الحلقات في Python: صياغة for وwhile

### حلقة for

صياغة حلقة for في Python: `for متغير in تسلسل:` ثم الجسم بالإزاحة. تمر الحلقة على أي كائن قابل للتكرار: نص أو قائمة أو قاموس أو ملف أو `range`.

```
for i in range(5):              # 0 1 2 3 4
    print(i)

for i in range(10, 0, -2):      # 10 8 6 4 2
    print(i)

for i, fruit in enumerate(["تفاحة", "كمثرى"], start=1):
    print(i, fruit)

for name, score in zip(names, scores):
    print(name, score)

for key, value in prices.items():
    print(key, value)
```

### حلقة while

```
attempts = 3
while attempts > 0:
    password = input("كلمة المرور: ")
    if password == "secret":
        print("تم تسجيل الدخول")
        break
    attempts -= 1
else:
    print("انتهت المحاولات")   # تُنفَّذ إذا لم يحدث break
```

| الأمر | ماذا يفعل |
| --- | --- |

| `break` | يخرج من الحلقة قبل الأوان |

| `continue` | ينتقل إلى التكرار التالي |

| `else` للحلقة | يُنفَّذ إذا انتهت الحلقة دون `break` |

| `range(stop)`، `range(start, stop, step)` | متتالية أرقام، و`stop` لا تُحسب |

### تعابير الإدراج (comprehensions)

```
squares = [x ** 2 for x in range(10)]
evens = [x for x in numbers if x % 2 == 0]
lengths = {word: len(word) for word in words}
unique = {c.lower() for c in text}
total = sum(x * x for x in range(100))   # تعبير مولّد
```

## الدوال

```
def greet(name: str, greeting: str = "مرحباً") -> str:
    """تعيد عبارة الترحيب."""
    return f"{greeting}، {name}!"

def total(*args, **kwargs):
    return sum(args), kwargs

square = lambda x: x * x
print(greet("سارة"))                 # مرحباً، سارة!
print(greet("سارة", greeting="أهلاً"))  # أهلاً، سارة!
```

| العنصر | المعنى |
| --- | --- |

| `def f(a, b=1)` | معامل بقيمة افتراضية |

| `*args` | أي عدد من المعاملات الموضعية (في صف) |

| `**kwargs` | أي عدد من المعاملات المسماة (في قاموس) |

| `return` | إعادة قيمة؛ بدونها تعيد الدالة `None` |

| `lambda x: ...` | دالة مجهولة قصيرة في تعبير واحد |

| `global`، `nonlocal` | تعديل متغير من نطاق خارجي |

لا تستخدم قيمة افتراضية قابلة للتعديل مثل `def f(items=[])`: فالقائمة تُنشأ مرة واحدة وتتراكم بين الاستدعاءات. الصواب هو `items=None` ثم داخل الدالة `if items is None: items = []`.

## الدوال المدمجة في Python

الدوال المدمجة في Python متاحة دون استيراد. وهذه أهم الدوال التي تظهر في تقريباً كل سكربت.

| الدالة | ماذا تفعل | مثال ← النتيجة |
| --- | --- | --- |

| `print()` | تعرض القيم | `print(1, 2, sep="-")` ← 1-2 |

| `input()` | تقرأ نصاً من لوحة المفاتيح | `int(input())` |

| `len()` | طول مجموعة أو نص | `len("abc")` ← 3 |

| `type()` | نوع الكائن | `type(3.0)` ← <class 'float'> |

| `isinstance()` | التحقق من النوع | `isinstance(5, int)` ← True |

| `int() float() str() bool()` | تحويل الأنواع | `int("42")` ← 42 |

| `list() tuple() set() dict()` | إنشاء المجموعات | `list("ab")` ← ['a', 'b'] |

| `range()` | مجال من الأرقام | `list(range(3))` ← [0, 1, 2] |

| `enumerate()` | أزواج (الفهرس، العنصر) | `list(enumerate("ab"))` ← [(0, 'a'), (1, 'b')] |

| `zip()` | يدمج التسلسلات زوجاً زوجاً | `list(zip([1, 2], "ab"))` ← [(1, 'a'), (2, 'b')] |

| `sum() min() max()` | المجموع والأصغر والأكبر | `max([3, 7, 1])` ← 7 |

| `abs() round()` | القيمة المطلقة والتقريب | `round(3.14159, 2)` ← 3.14 |

| `sorted()` | قائمة جديدة مرتبة | `sorted(words, key=len, reverse=True)` |

| `reversed()` | مكرِّر بالترتيب العكسي | `list(reversed([1, 2]))` ← [2, 1] |

| `map() filter()` | تطبيق دالة / تصفية | `list(map(str, [1, 2]))` ← ['1', '2'] |

| `any() all()` | واحد على الأقل / كلها صحيحة | `all(x > 0 for x in nums)` |

| `open()` | يفتح ملفاً | `open("a.txt", encoding="utf-8")` |

| `help() dir()` | المساعدة وقائمة الخصائص | `help(str.split)`، `dir(list)` |

| `id() hash()` | معرّف الكائن وقيمة التجزئة | `hash("a")` |

أفضل مرجع دائماً في متناولك هو الدالة `help()` في REPL: فـ `help(dict)` تعرض كل طرق القاموس مع وصف، و`dir(obj)` تعرض قائمة الأسماء المتاحة.

## طرق النصوص

صياغة النصوص في Python: النص غير قابل للتعديل، وكل طريقة تعيد نصاً جديداً. والتقطيع يعمل كما في القوائم: `s[1:4]`، و`s[::-1]` لعكس النص.

| الطريقة | مثال ← النتيجة |
| --- | --- |

| `upper() lower()` | `"Py".upper()` ← 'PY' |

| `capitalize() title()` | `"hello world".title()` ← 'Hello World' |

| `strip() lstrip() rstrip()` | `" hi \n".strip()` ← 'hi' |

| `split(sep)` | `"a,b,c".split(",")` ← ['a', 'b', 'c'] |

| `join(iterable)` | `"-".join(["a", "b"])` ← 'a-b' |

| `replace(old, new)` | `"قلم".replace("ق", "ب")` ← 'بلم' |

| `find() index()` | `"hello".find("l")` ← 2؛ وإذا لم يوجد — -1 (أما `index` فيرفع خطأ) |

| `count()` | `"banana".count("a")` ← 3 |

| `startswith() endswith()` | `"file.py".endswith(".py")` ← True |

| `isdigit() isalpha() isspace()` | `"123".isdigit()` ← True |

| `removeprefix() removesuffix()` | `"test_a".removeprefix("test_")` ← 'a' |

| `zfill() center() ljust()` | `"7".zfill(3)` ← '007' |

| `format()` | `"{} + {}".format(1, 2)` ← '1 + 2' |

## أوامر القائمة في Python

القائمة مجموعة مرتبة قابلة للتعديل. معظم طرقها تغيّر القائمة في مكانها وتعيد `None`، لذلك فـ `a = a.sort()` خطأ شائع.

| العملية | ماذا تفعل | مثال |
| --- | --- | --- |

| `append(x)` | تضيف في النهاية | `a.append(4)` |

| `extend(iter)` | تضيف كل العناصر | `a.extend([5, 6])` |

| `insert(i, x)` | تدرج عند الفهرس | `a.insert(0, "أولاً")` |

| `remove(x)` | تحذف أول ظهور للقيمة | `a.remove(3)` |

| `pop(i)` | تحذف وتعيد العنصر (الافتراضي الأخير) | `last = a.pop()` |

| `clear()` | تفرغ القائمة | `a.clear()` |

| `index(x)` | فهرس أول ظهور | `a.index("b")` |

| `count(x)` | عدد مرات الظهور | `a.count(1)` |

| `sort()` | ترتيب في المكان | `a.sort(key=str.lower)` |

| `reverse()` | عكس في المكان | `a.reverse()` |

| `copy()` | نسخة سطحية | `b = a.copy()` |

| `del a[i]` | حذف بالفهرس أو بالتقطيع | `del a[1:3]` |

| التقطيع | `a[start:stop:step]` | `a[-1]` — الأخير، و`a[:3]` — أول ثلاثة |

## أوامر القاموس في Python

| العملية | ماذا تفعل | مثال |
| --- | --- | --- |

| `d[key]` | القيمة بالمفتاح، وإذا لم يوجد المفتاح — `KeyError` | `d["name"]` |

| `get(key, default)` | القيمة أو البديل | `d.get("age", 0)` |

| `d[key] = value` | إضافة أو تعديل | `d["city"] = "الرياض"` |

| `keys() values() items()` | المفاتيح والقيم والأزواج | `for k, v in d.items():` |

| `update()` | دمج مع قاموس آخر | `d.update({"a": 1})` |

| `d1 | d2` | قاموس جديد مدموج | `merged = defaults | user` |

| `pop(key, default)` | حذف وإعادة القيمة | `d.pop("tmp", None)` |

| `popitem()` | حذف آخر زوج أُضيف | `d.popitem()` |

| `setdefault(key, value)` | إعادة القيمة، وإذا لم يوجد المفتاح تُنشأ | `d.setdefault("tags", []).append("py")` |

| `key in d` | التحقق من وجود المفتاح | `if "name" in d:` |

| `dict.fromkeys()` | قاموس من مفاتيح بقيمة واحدة | `dict.fromkeys("abc", 0)` |

| `len(d)`، `del d[key]` | الحجم والحذف | `del d["old"]` |

### الصفوف والمجموعات (sets)

| العملية | مثال ← النتيجة |
| --- | --- |

| فك تغليف الصف | `x, y = (3, 4)` |

| إضافة إلى مجموعة | `s.add(5)`، والحذف — `s.discard(5)` |

| الاتحاد / التقاطع | `{1, 2} | {2, 3}` ← {1, 2, 3}؛ `{1, 2} & {2, 3}` ← {2} |

| الفرق | `{1, 2} - {2}` ← {1} |

| إزالة التكرار من قائمة | `list(dict.fromkeys(items))` — مع الحفاظ على الترتيب |

## الاستثناءات والملفات

```
try:
    number = int(input("رقم: "))
except ValueError as err:
    print("هذا ليس رقماً:", err)
else:
    print("نجاح")
finally:
    print("يُنفَّذ دائماً")

with open("data.txt", "w", encoding="utf-8") as f:
    f.write("سطر\n")

with open("data.txt", encoding="utf-8") as f:
    for line in f:
        print(line.rstrip())
```

| الاستثناء | متى يظهر |
| --- | --- |

| `SyntaxError`، `IndentationError` | خطأ في الصياغة أو المسافات البادئة |

| `NameError` | اسم غير معرّف (خطأ مطبعي) |

| `TypeError` | عملية مع نوع غير مناسب: `"1" + 1` |

| `ValueError` | النوع صحيح لكن القيمة خاطئة: `int("abc")` |

| `IndexError`، `KeyError` | لا يوجد هذا الفهرس أو المفتاح |

| `FileNotFoundError` | الملف غير موجود |

| `ZeroDivisionError` | القسمة على صفر |

## الأصناف

```
from dataclasses import dataclass

class Dog:
    def __init__(self, name: str):
        self.name = name

    def bark(self) -> str:
        return f"{self.name}: هاو!"

@dataclass
class Point:
    x: float
    y: float

print(Dog("ريكس").bark())   # ريكس: هاو!
print(Point(1, 2))           # Point(x=1, y=2)
```

## الوحدات المدمجة في Python

تأتي المكتبة القياسية مع المفسِّر، ويكفي `import` لاستخدامها.

| الوحدة | لماذا تُستخدم | مثال |
| --- | --- | --- |

| `math` | الرياضيات | `math.sqrt(16)` ← 4.0 |

| `random` | الأعداد العشوائية | `random.randint(1, 6)`، `random.choice(items)` |

| `datetime` | التاريخ والوقت | `datetime.date.today()` |

| `pathlib` | المسارات والملفات | `Path("data").glob("*.csv")` |

| `os`، `sys` | النظام، ومتغيرات البيئة، والوسائط | `os.environ.get("HOME")`، `sys.argv` |

| `json` | قراءة وكتابة JSON | `json.loads(text)`، `json.dumps(obj, ensure_ascii=False)` |

| `csv` | جداول CSV | `csv.DictReader(f)` |

| `collections` | Counter وdefaultdict وdeque | `Counter("banana").most_common(1)` ← [('a', 3)] |

| `itertools` | التوافيق وسلاسل المكررات | `itertools.chain(a, b)` |

| `re` | التعابير النمطية | `re.findall(r"\d+", s)` |

| `time` | التوقف وقياس الزمن | `time.sleep(1)`، `time.perf_counter()` |

| `asyncio` | الكود غير المتزامن | `asyncio.run(main())` |

ظهر في Python 3.15 الاستيراد الكسول (PEP 810): فالأمر `lazy import pandas as pd` يؤجل تحميل الوحدة حتى أول استخدام لها، فيبدأ السكربت الذي فيه مكتبات ثقيلة أسرع بوضوح.

## أوامر Python في الطرفية

مجموعة من الأوامر تُطلب كثيراً بعبارة «أوامر python»: وهي أوامر تشغيل المفسِّر وتثبيت المكتبات. وعلى Windows يُكتب عادةً `python` أو `py` بدلاً من `python3`.

| الأمر | ماذا يفعل |
| --- | --- |

| `python3 --version` | يعرض الإصدار |

| `python3` | يفتح وحدة REPL التفاعلية (للخروج — `exit()`) |

| `python3 script.py` | يشغّل ملفاً |

| `python3 -c "print(2 + 2)"` | يُنفّذ سطراً واحداً |

| `python3 -m venv .venv` | ينشئ بيئة افتراضية |

| `source .venv/bin/activate` / `.venv\Scripts\activate` | تفعيل البيئة (Linux وmacOS / Windows) |

| `python3 -m pip install requests` | تثبيت حزمة |

| `pip list`، `pip freeze > requirements.txt` | قائمة الحزم وحفظها |

| `pip install -r requirements.txt` | تثبيت الاعتماديات من ملف |

| `python3 -m http.server 8000` | خادم ويب بسيط في المجلد الحالي |

| `uv init`، `uv add requests`، `uv run main.py` | إنشاء مشروع، وإضافة اعتمادية، والتشغيل عبر مدير uv |

## أخطاء شائعة للمبتدئين

- **المقارنة بـ `=`** — في الشرط يلزم `==`؛ أما الرمز المفرد `=` فهو تعيين.
- **نسيان النقطتين** بعد `if` و`for` و`def` يسبب `SyntaxError`.
- **جمع نص مع رقم**: `"العمر: " + 25` خطأ، اكتب `f"العمر: {25}"`.
- **تعديل القائمة أثناء المرور عليها** — مرّ على نسخة `for x in a[:]` أو اجمع قائمة جديدة.
- **`input()` يعيد نصاً** — لإجراء حساب لفّه بـ `int()` أو `float()`.

## الخلاصة

صياغة Python تقوم على المسافات البادئة والنقطتين ومجموعة صغيرة من البنى: الشروط، والحلقات for وwhile، والدوال، والأصناف. أضف إليها عشرين دالة مدمجة وطرق النصوص والقوائم والقواميس، فتغطي معظم المهام اليومية. احفظ الورقة، وحين تصبح الجداول مألوفة انتقل إلى الوحدات وغير المتزامن؛ وكل ذلك مشروح خطوة بخطوة عملياً في دورة «Python 3.15: من المبتدئ إلى المحترف».

## FAQ

**كم مسافة يجب أن أترك للإزاحة في Python؟**

حسب معيار PEP 8 تُستخدم أربع مسافات لكل مستوى. الأهم أن تكون متساوية داخل الكتلة نفسها وألا تخلط المسافات بالجدولة (Tab).

**ما الفرق بين القائمة والصف (tuple)؟**

القائمة قابلة للتعديل فيمكن إضافة عناصر إليها وترتيبها في مكانها؛ أما الصف فغير قابل للتعديل، لذلك يصلح مفتاحاً في القاموس ولمجموعات قيم ثابتة.

**كيف أعرض كل طرق كائن مباشرة في Python؟**

استدعِ dir(obj) لقائمة الأسماء وhelp(obj) للوصف؛ فمثلاً help(str) تعرض كل طرق النصوص.

**ما الفرق بين sort() وsorted()؟**

الطريقة list.sort() ترتّب القائمة نفسها وتعيد None، أما الدالة sorted() فتعيد قائمة جديدة وتعمل مع أي مجموعة قابلة للتكرار.

**هل أحتاج إلى فاصلة منقوطة في نهاية السطر؟**

لا. الفاصلة المنقوطة مسموحة للفصل بين عدة أوامر في سطر واحد، لكن في الكود العادي تُكتب كل تعليمة في سطر مستقل.


---
Source: Skillaria.Top (https://skillaria.top)
