من الصفرمجاني
بايثون
تعلّم بايثون خطوة بخطوة عبر كتابة الكود على جهازك الخاص، من التثبيت حتى التحكم في المسار البرمجي، مع اختبار من عشرة أسئلة متدرجة في نهاية كل فصل.
الخطوات الست في كل فصل
- 1المشكلة
- 2الفهم
- 3أمثلة محلولة
- 4التوقع
- 5التطبيق
- 6التحدي
- 01تثبيت بايثون وتشغيل برنامجك الأولتثبيت بايثون على ويندوز، والتحقق عبر الطرفية من عمله بشكل سليم، وكتابة وتشغيل أول ملف بايثون على جهازك الخاص.25 دقيقة١٠ أسئلة
- 02الطرفية، المجلدات، ومشروعك الأولتنقل بين المجلدات عبر الطرفية، وأنشئ مجلد مشروعك، وشغّل الملفات، وتعلم متى تكون بيئة بايثون التفاعلية (REPL) الأداة الأنسب.25 دقيقة١٠ أسئلة
- 03الرؤية عبر print، والتوضيح عبر التعليقاتكيف تطبع دالة print عدة قيم معاً، وكيف يغيرها sep و end، ولماذا توجد التعليقات — أداتك الأولى لاستكشاف ما يجري داخل البرنامج.20 دقيقة١٠ أسئلة
- 04المتغيرات والأنواع — كيف يتذكر البرنامج البياناتتخزين القيم داخل المتغيرات، وقواعد التسمية، والأنواع الأربعة الأساسية — int و float و str و bool — مع أكثر الأخطاء شيوعاً لدى المبتدئين.30 دقيقة١٠ أسئلة
- 05العمليات الحسابية — القسمة، البواقي، وفخ الأعداد العشريةالمعاملات الحسابية السبعة، أولوية التنفيذ، استخدامات القسمة الصحيحة وباقي القسمة، ولماذا تظهر الكسور أحياناً بدقة غير متوقعة.30 دقيقة١٠ أسئلة
- 06التعامل مع النصوص — الفهرسة، التقطيع، ونصوص التنسيق (f-strings)استخراج أجزاء من النصوص، وتنظيفها، وتعديلها، وبناء رسائل واضحة باستخدام f-strings — مع قاعدة أن النصوص غير قابلة للتعديل المباشر في مكانها.35 دقيقة١٠ أسئلة
- 07استقبال المدخلات من مستخدم البرنامجقراءة ما يكتبه المستخدم عبر input()، ولماذا تكون المدخلات دائماً نصوصاً str، والأخطاء التي تظهر عند التحويل عبر int() و float().30 دقيقة١٠ أسئلة
- 08True و False — تعلّم طرح الأسئلةمعاملات المقارنة، and / or / not، المقارنات المتسلسلة، والقيم التي يعتبرها بايثون خاطئة — الأساس المطلوب قبل كتابة الشروط.30 دقيقة١٠ أسئلة
- 09اتخاذ القرارات — if و elif و elseسلوك مسارات مختلفة بناءً على الشروط، لماذا يُعد التنسيق والمسافات البادئة ذا معنى في بايثون، والخطأ الخفي الذي يحدث عند ترتيب الشروط بشكل خاطئ.35 دقيقة١٠ أسئلة
- 10حلقات while — التكرار طالما تحقق الشرطتكرار العمل، كيف تحدث الحلقات اللانهائية وكيفية إيقافها، أوامر break و continue، وإعادة السؤال حتى إدخال قيمة صحيحة.35 دقيقة١٠ أسئلة
- 11حلقات for ودالة range — التكرار لعدد محدد من المراتعندما تعرف عدد مرات التكرار، فإن حلقة for هي الخيار المثالي. الأشكال الثلاثة لدالة range، ولماذا يُستثنى الحد الأخير، وكيف تختار بين for و while.35 دقيقة١٠ أسئلة
- 12القوائم — قيم متعددة تحت اسم واحدالاحتفاظ بأي عدد تريده من القيم تحت اسم واحد، والوصول إليها عبر الفهارس والشرائح، ودوال تعديل القوائم — مع تجنب فخ ربط اسمين بنفس القائمة.30 دقيقة١٠ أسئلة
- 13ترتيب القوائم ودوالها المدمجةالفرق بين sorted() و .sort()، والنتائج التي تقدمها max و min و sum و count و index، وتغيير معايير الترتيب باستخدام key=، وتحويل القائمة لنص قابل للقراءة بواسطة join().30 دقيقة١٠ أسئلة
- 14الصفوف وفك الحزم — Tuples and Unpackingقائمة غير قابلة للتعديل — متى تحتاج إليها، واستخدام فك الحزم للتعامل مع الأسماء بدلاً من الفهارس، والتبديل في سطر واحد، وفخ الفرق بين (5) و (5,).30 دقيقة١٠ أسئلة
- 15القواميس — أزواج المفاتيح والقيمتخزين القيم وجلبها بالاسم، تجنب KeyError باستخدام .get()، إضافة المفاتيح وتعديلها وحذفها، التكرار باستخدام .items()، ولماذا لا يمكن للقائمة أن تكون مفتاحاً.32 دقيقة١٠ أسئلة
- 16المجموعات — تجميع العناصر دون تكرارإزالة التكرارات، الرموز الأربعة لمقارنة مجموعتين، لماذا لا يمثل {} مجموعة فارغة، وما يعنيه عدم وجود ترتيب في المجموعات عملياً.28 دقيقة١٠ أسئلة
- 17البيانات المتداخلة — قوائم القواميسالشكل الحقيقي للبيانات: قواميس داخل قوائم، وقوائم داخل قواميس. الوصول للبيانات وتجميعها، ولماذا لا تكفي copy() هنا.35 دقيقة١٠ أسئلة
- 18اشتقاق المجموعات والقوائم — Comprehensionsاشتقاق القوائم والقواميس والمجموعات، الفرق بين if للتصفية و if/else للاختيار، ومتى يكون اشتقاق القوائم خياراً خاطئاً.30 دقيقة١٠ أسئلة
- 19الدوال — قرار واحد باسم واحدكتابة الدوال باستخدام def، الفرق الجوهري بين return و print، معالجة الحالات الخاصة والاستثنائية بالحراس (guards) في المقدمة، وسلاسل التوثيق (docstrings).35 دقيقة١٠ أسئلة
- 20وسائط الدوال — الأسماء والقيم الافتراضية والنجومتمرير الوسائط بالاسم، القيم الافتراضية وقواعد ترتيبها، *args و **kwargs، وفك حزم القوائم أو القواميس عند استدعاء الدوال.32 دقيقة١٠ أسئلة
- 21نطاق المتغيرات والقيم الافتراضية القابلة للتعديلأين يعيش الاسم ومن يمكنه رؤيته، الفرق بين قراءة اسم خارجي وتعديله، وخطأ UnboundLocalError، وأشهر فخاخ بايثون — القائمة الفارغة كقيمة افتراضية.34 دقيقة١٠ أسئلة
- 22الوحدات النمطية والاستيراداستخدام ملف كتبته من داخل ملف آخر، ما يحدث فعلياً عند الاستيراد، لماذا نحتاج `if __name__ == "__main__"`، المكتبة القياسية، وفخ حجب الوحدات النمطية بملفاتك الخاصة.33 دقيقة١٠ أسئلة
- 23قراءة الملفات وكتابتهاقراءة الملفات وكتابتها باستخدام with open، الفروق بين أوضاع r و w و a و x، السطر الجديد في نهاية كل سطر، لماذا نكتب encoding دائماً، واستخدام pathlib للمهام السريعة.35 دقيقة١٠ أسئلة
- 24الاستثناءات — التعامل مع الأخطاء والانهياراتالتقاط خطأ محدد باستخدام try/except، لماذا يُعد except Exception: pass خطأ في كل الحالات تقريباً، كتلتا else و finally، إطلاق الاستثناءات باستخدام raise، واختيار الخطأ المناسب من شجرة الاستثناءات.36 دقيقة١٠ أسئلة
- 25ملفات JSON و CSVقراءة الجداول المحاطة بعلامات اقتباس وكتابتها باستخدام وحدة csv، لماذا نحتاج `newline=""`، حفظ البيانات المهيكلة باستخدام json، وأي الأنواع البرمجية تتغير أثناء التحويل.34 دقيقة١٠ أسئلة
- 26الأصناف والكائنات — جمع البيانات والسلوك معاًالكلمة المفتاحية `class` والدالة `__init__` والمعامل `self`، التوابع، التنسيق النصي عبر `__repr__`، المقارنة باستخدام `__eq__`، سمات الصنف مقابل سمات الكائن، ومتى نتجنب استخدام الأصناف.38 دقيقة١٠ أسئلة
- 27فئات البيانات وتلميحات الأنواعما يكتبه المزخرف `@dataclass` نيابة عنك، لماذا نحتاج `field(default_factory=...)`، ميزات `frozen=True`، تلميحات الأنواع في الدوال، ولماذا لا تفعل التلميحات شيئاً وقت التشغيل بينما تفعل كل شيء مع الفاحص.36 دقيقة١٠ أسئلة
- 28كتابة الاختبارات باستخدام pytestمن عبارة `assert` إلى إطار pytest، قراءة تقارير الفشل، واختبار الأخطاء عبر `pytest.raises`، و `parametrize`، واستخدام `tmp_path` والتجهيزات (fixtures) — وبنية الكود القابل للاختبار.37 دقيقة١٠ أسئلة
- 29تنقيح الأخطاء والتسجيلقراءة تتبع الأخطاء (traceback) بالترتيب الصحيح، استخدام logging بدلاً من print، المستويات و getLogger(__name__)، تسجيل كامل تفاصيل الأخطاء الملتقطة عبر log.exception، واستكشاف الكود داخلياً عبر breakpoint().34 دقيقة١٠ أسئلة