البرمجة

5 مشاريع Python للمبتدئين — ابنِ أول أعمالك

📅 2026-09-24⏱ 14 دقائق قراءة
قرأت عن Python، تعلمت الأساسيات، وفهمت المفاهيم. لكن السؤال الحقيقي: **هل تستطيع بناء شيء حقيقي؟** الطريقة الوحيدة لإتقان البرمجة هي **البناء**. في هذا المقال، سنبني 5 مشاريع عملية من الصفر — كل مشروع يعلمك مهارة جديدة، وكل مشروع يمكنك إضافته إلى معرض أعمالك. بنهاية هذا المقال، سيكون لديك: - 5 مشاريع حقيقية في معرض أعمالك - فهم عملي لكل مفاهيم Python - ثقة لبناء مشاريع أكبر - أساس لمشاريع احترافية ## لماذا المشاريع أفضل من القراءة؟ <table> <thead> <tr> <th>القراءة فقط</th> <th>البناء العملي</th> </tr> </thead> <tbody> <tr> <td>فهم سطحي</td> <td>فهم عميق</td> </tr> <tr> <td>نسيان سريع</td> <td>تذكر دائم</td> </tr> <tr> <td>لا معرض أعمال</td> <td>مشاريع ملموسة</td> </tr> <tr> <td>خوف من التطبيق</td> <td>ثقة في البناء</td> </tr> <tr> <td>ملل</td> <td>متعة</td> </tr> </tbody> </table> **القاعدة الذهبية:** لكل ساعة قراءة، خصص 3 ساعات للبناء. ## المشروع 1: لعبة تخمين الرقم 🎮 ### الفكرة الكمبيوتر يختار رقماً عشوائياً، والمستخدم يحاول تخمينه. بعد كل محاولة، يخبره الكمبيوتر إذا كان تخمينه أعلى أم أقل. ### المهارات المكتسبة - `random` — توليد أرقام عشوائية - `while` — التكرار حتى تحقيق شرط - `if/elif/else` — اتخاذ القرارات - `input()` — التفاعل مع المستخدم ### الكود الكامل ```python import random def play_game(): """لعبة تخمين الرقم""" print("=" * 45) print("🎮 لعبة تخمين الرقم") print("=" * 45) print("فكرت في رقم بين 1 و 100") print("حاول تخمينه في أقل عدد من المحاولات!") print() secret = random.randint(1, 100) attempts = 0 max_attempts = 10 while attempts < max_attempts: try: guess = int(input(f"محاولة {attempts + 1}/{max_attempts} - تخمينك: ")) except ValueError: print("❌ يرجى إدخال رقم صحيح") continue attempts += 1 if guess < 1 or guess > 100: print("⚠️ الرقم يجب أن يكون بين 1 و 100") continue if guess == secret: print(f"\n🎉 مبروك! خمنت الرقم {secret} في {attempts} محاولات!") return elif guess < secret: remaining = max_attempts - attempts print(f"⬆️ الرقم أكبر من {guess} (متبقي {remaining} محاولات)") else: remaining = max_attempts - attempts print(f"⬇️ الرقم أصغر من {guess} (متبقي {remaining} محاولات)") print(f"\n😔 انتهت المحاولات! الرقم كان: {secret}") def main(): """الدالة الرئيسية""" while True: play_game() again = input("\nهل تريد اللعب مرة أخرى؟ (نعم/لا): ").strip() if again != "نعم": print("👋 شكراً للعب!") break # تشغيل اللعبة main() ``` ### شرح الكود <table> <thead> <tr> <th>السطر</th> <th>الشرح</th> </tr> </thead> <tbody> <tr> <td><code>import random</code></td> <td>استيراد مكتبة الأرقام العشوائية</td> </tr> <tr> <td><code>random.randint(1, 100)</code></td> <td>توليد رقم عشوائي بين 1 و 100</td> </tr> <tr> <td><code>try / except</code></td> <td>التعامل مع الأخطاء عند إدخال نص بدلاً من رقم</td> </tr> <tr> <td><code>attempts += 1</code></td> <td>زيادة عداد المحاولات</td> </tr> <tr> <td><code>return</code></td> <td>إنهاء الدالة عند الفوز</td> </tr> </tbody> </table> ### تحديات إضافية - أضف مستويات صعوبة (سهل: 1-50، صعب: 1-500) - احفظ أفضل نتيجة (أقل محاولات) في ملف - أضف مؤقت زمني لكل محاولة ## المشروع 2: آلة حاسبة بسيطة 🧮 ### الفكرة برنامج يطلب من المستخدم رقمين وعملية حسابية، ثم يطبع النتيجة. مع معالجة الأخطاء (مثل القسمة على صفر). ### المهارات المكتسبة - الدوال (Functions) - `if/elif/else` متعددة - معالجة الأخطاء (`try/except`) - المدخلات والمخرجات ### الكود الكامل ```python def add(a, b): """جمع رقمين""" return a + b def subtract(a, b): """طرح رقمين""" return a - b def multiply(a, b): """ضرب رقمين""" return a * b def divide(a, b): """قسمة رقمين""" if b == 0: raise ValueError("لا يمكن القسمة على صفر") return a / b def power(a, b): """رفع رقم لقوة""" return a ** b def show_menu(): """عرض قائمة العمليات""" print("\n" + "=" * 35) print("🧮 آلة حاسبة Python") print("=" * 35) print("1. جمع") print("2. طرح") print("3. ضرب") print("4. قسمة") print("5. قوة") print("6. خروج") print("=" * 35) def get_numbers(): """قراءة رقمين من المستخدم""" try: a = float(input("الرقم الأول: ")) b = float(input("الرقم الثاني: ")) return a, b except ValueError: print("❌ يرجى إدخال أرقام صحيحة") return None, None def calculator(): """الدالة الرئيسية للآلة الحاسبة""" operations = { "1": ("الجمع", add), "2": ("الطرح", subtract), "3": ("الضرب", multiply), "4": ("القسمة", divide), "5": ("القوة", power), } history = [] while True: show_menu() choice = input("اختر العملية (1-6): ").strip() if choice == "6": print("\n📋 سجل العمليات:") if history: for i, op in enumerate(history, 1): print(f" {i}. {op}") else: print(" لا توجد عمليات") print("\n👋 وداعاً!") break if choice not in operations: print("❌ اختيار غير صحيح") continue op_name, op_func = operations[choice] print(f"\n📌 اخترت: {op_name}") a, b = get_numbers() if a is None: continue try: result = op_func(a, b) print(f"\n✅ النتيجة: {a} {get_symbol(choice)} {b} = {result}") history.append(f"{a} {get_symbol(choice)} {b} = {result}") except ValueError as e: print(f"\n❌ خطأ: {e}") def get_symbol(choice): """إرجاع رمز العملية""" symbols = { "1": "+", "2": "-", "3": "×", "4": "÷", "5": "^", } return symbols.get(choice, "?") # تشغيل الآلة الحاسبة calculator() ``` ### شرح الكود <table> <thead> <tr> <th>العنصر</th> <th>الشرح</th> </tr> </thead> <tbody> <tr> <td><code>raise ValueError</code></td> <td>إطلاق خطأ مخصص عند القسمة على صفر</td> </tr> <tr> <td><code>operations = {...}</code></td> <td>قاموس يربط كل اختيار بدالته</td> </tr> <tr> <td><code>history = []</code></td> <td>قائمة لحفظ سجل العمليات</td> </tr> <tr> <td><code>enumerate(history, 1)</code></td> <td>ترقيم العمليات بدءاً من 1</td> </tr> </tbody> </table> ### تحديات إضافية - أضف عمليات: الجذر التربيعي، اللوغاريتم - احفظ السجل في ملف نصي - أضف واجهة رسومية بسيطة بـ Tkinter ## المشروع 3: تطبيق قائمة مهام ✅ ### الفكرة تطبيق لإدارة المهام اليومية: إضافة، عرض، إكمال، حذف. مع تخزين البيانات في ملف JSON. ### المهارات المكتسبة - القوائم والقواميس - قراءة/كتابة الملفات (JSON) - الدوال المتعددة - التعامل مع البيانات ### الكود الكامل ```python import json import os from datetime import datetime DATA_FILE = "tasks.json" def load_tasks(): """تحميل المهام من الملف""" if os.path.exists(DATA_FILE): with open(DATA_FILE, "r", encoding="utf-8") as f: return json.load(f) return [] def save_tasks(tasks): """حفظ المهام في الملف""" with open(DATA_FILE, "w", encoding="utf-8") as f: json.dump(tasks, f, ensure_ascii=False, indent=2) def add_task(tasks, title): """إضافة مهمة جديدة""" task = { "id": len(tasks) + 1, "title": title, "done": False, "created": datetime.now().strftime("%Y-%m-%d %H:%M"), } tasks.append(task) save_tasks(tasks) print(f"✅ تمت إضافة: {title}") def list_tasks(tasks): """عرض جميع المهام""" if not tasks: print("📭 لا توجد مهام") return print("\n" + "=" * 55) print(f"📋 قائمة المهام ({len(tasks)} مهمة)") print("=" * 55) for task in tasks: status = "✅" if task["done"] else "⏳" print(f" {status} [{task['id']}] {task['title']}") print(f" 📅 {task['created']}") print("=" * 55) def complete_task(tasks, task_id): """إكمال مهمة""" for task in tasks: if task["id"] == task_id: task["done"] = True save_tasks(tasks) print(f"🎉 تم إكمال: {task['title']}") return print("❌ المهمة غير موجودة") def delete_task(tasks, task_id): """حذف مهمة""" for i, task in enumerate(tasks): if task["id"] == task_id: removed = tasks.pop(i) save_tasks(tasks) print(f"🗑️ تم حذف: {removed['title']}") return print("❌ المهمة غير موجودة") def show_menu(): """عرض القائمة الرئيسية""" print("\n" + "=" * 35) print("📝 مدير المهام") print("=" * 35) print("1. إضافة مهمة") print("2. عرض المهام") print("3. إكمال مهمة") print("4. حذف مهمة") print("5. خروج") print("=" * 35) def main(): """الدالة الرئيسية""" tasks = load_tasks() print("👋 مرحباً بك في مدير المهام!") while True: show_menu() choice = input("اختر (1-5): ").strip() if choice == "1": title = input("عنوان المهمة: ").strip() if title: add_task(tasks, title) else: print("❌ العنوان لا يمكن أن يكون فارغاً") elif choice == "2": list_tasks(tasks) elif choice == "3": list_tasks(tasks) try: task_id = int(input("رقم المهمة المكتملة: ")) complete_task(tasks, task_id) except ValueError: print("❌ رقم غير صحيح") elif choice == "4": list_tasks(tasks) try: task_id = int(input("رقم المهمة المراد حذفها: ")) delete_task(tasks, task_id) except ValueError: print("❌ رقم غير صحيح") elif choice == "5": print("👋 وداعاً!") break else: print("❌ اختيار غير صحيح") # تشغيل التطبيق if __name__ == "__main__": main() ``` ### شرح الكود <table> <thead> <tr> <th>العنصر</th> <th>الشرح</th> </tr> </thead> <tbody> <tr> <td><code>json.load()</code></td> <td>قراءة بيانات JSON من ملف</td> </tr> <tr> <td><code>json.dump()</code></td> <td>كتابة بيانات بصيغة JSON</td> </tr> <tr> <td><code>ensure_ascii=False</code></td> <td>الحفاظ على الأحرف العربية</td> </tr> <tr> <td><code>os.path.exists()</code></td> <td>التحقق من وجود ملف</td> </tr> <tr> <td><code>datetime.now()</code></td> <td>الحصول على التاريخ والوقت الحالي</td> </tr> </tbody> </table> ### تحديات إضافية - أضف أولويات للمهام (عالية، متوسطة، منخفضة) - أضف مواعيد نهائية - أضف تصنيفات (عمل، شخصي، دراسة) ## المشروع 4: مدير كلمات المرور 🔐 ### الفكرة تطبيق آمن لتخزين كلمات المرور محلياً. يحفظ كلمات المرور مشفرة، ويسمح بالبحث والنسخ. ### المهارات المكتسبة - التشفير (Hashlib) - قاعدة بيانات SQLite - توليد كلمات مرور قوية - التعامل مع الأخطاء ### الكود الكامل ```python import sqlite3 import hashlib import secrets import string import os DB_FILE = "passwords.db" def init_db(): """تهيئة قاعدة البيانات""" conn = sqlite3.connect(DB_FILE) cursor = conn.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS passwords ( id INTEGER PRIMARY KEY AUTOINCREMENT, service TEXT NOT NULL, username TEXT NOT NULL, password_hash TEXT NOT NULL, created TEXT NOT NULL ) """) conn.commit() conn.close() def generate_password(length=16): """توليد كلمة مرور قوية""" chars = string.ascii_letters + string.digits + "!@#$%^&*" return "".join(secrets.choice(chars) for _ in range(length)) def hash_password(password): """تشفير كلمة المرور""" return hashlib.sha256(password.encode()).hexdigest() def add_password(service, username, password): """إضافة كلمة مرور جديدة""" conn = sqlite3.connect(DB_FILE) cursor = conn.cursor() cursor.execute( "INSERT INTO passwords (service, username, password_hash, created) VALUES (?, ?, ?, datetime('now'))", (service, username, hash_password(password)) ) conn.commit() conn.close() print(f"✅ تم حفظ كلمة مرور {service}") def list_services(): """عرض جميع الخدمات المحفوظة""" conn = sqlite3.connect(DB_FILE) cursor = conn.cursor() cursor.execute("SELECT id, service, username, created FROM passwords ORDER BY service") rows = cursor.fetchall() conn.close() if not rows: print("📭 لا توجد كلمات مرور محفوظة") return print("\n" + "=" * 55) print(f"🔐 كلمات المرور المحفوظة ({len(rows)})") print("=" * 55) for row in rows: print(f" [{row[0]}] {row[1]}") print(f" 👤 {row[2]}") print(f" 📅 {row[3]}") print("=" * 55) def check_password(service, password): """التحقق من كلمة مرور""" conn = sqlite3.connect(DB_FILE) cursor = conn.cursor() cursor.execute( "SELECT password_hash FROM passwords WHERE service = ?", (service,) ) row = cursor.fetchone() conn.close() if not row: print(f"❌ لا توجد خدمة باسم {service}") return if row[0] == hash_password(password): print("✅ كلمة المرور صحيحة") else: print("❌ كلمة المرور خاطئة") def delete_password(service): """حذف كلمة مرور""" conn = sqlite3.connect(DB_FILE) cursor = conn.cursor() cursor.execute("DELETE FROM passwords WHERE service = ?", (service,)) conn.commit() affected = cursor.rowcount conn.close() if affected: print(f"🗑️ تم حذف {service}") else: print(f"❌ لا توجد خدمة باسم {service}") def show_menu(): """عرض القائمة""" print("\n" + "=" * 35) print("🔐 مدير كلمات المرور") print("=" * 35) print("1. إضافة كلمة مرور") print("2. عرض الخدمات") print("3. التحقق من كلمة مرور") print("4. حذف كلمة مرور") print("5. توليد كلمة مرور قوية") print("6. خروج") print("=" * 35) def main(): """الدالة الرئيسية""" init_db() print("👋 مرحباً بك في مدير كلمات المرور الآمن!") while True: show_menu() choice = input("اختر (1-6): ").strip() if choice == "1": service = input("اسم الخدمة (مثل: Gmail): ").strip() username = input("اسم المستخدم: ").strip() password = input("كلمة المرور (أو 'توليد' لتوليدها): ").strip() if password == "توليد": password = generate_password() print(f"🔑 كلمة المرور المولدة: {password}") print("⚠️ احفظها في مكان آمن!") add_password(service, username, password) elif choice == "2": list_services() elif choice == "3": service = input("اسم الخدمة: ").strip() password = input("كلمة المرور: ").strip() check_password(service, password) elif choice == "4": service = input("اسم الخدمة المراد حذفها: ").strip() confirm = input(f"هل أنت متأكد من حذف {service}؟ (نعم/لا): ").strip() if confirm == "نعم": delete_password(service) elif choice == "5": length = input("طول كلمة المرور (افتراضي 16): ").strip() length = int(length) if length.isdigit() else 16 print(f"🔑 كلمة المرور المولدة: {generate_password(length)}") elif choice == "6": print("👋 وداعاً!") break else: print("❌ اختيار غير صحيح") if __name__ == "__main__": main() ``` ### شرح الكود <table> <thead> <tr> <th>العنصر</th> <th>الشرح</th> </tr> </thead> <tbody> <tr> <td><code>sqlite3</code></td> <td>قاعدة بيانات خفيفة مدمجة في Python</td> </tr> <tr> <td><code>hashlib.sha256()</code></td> <td>تشفير كلمة المرور — لا يمكن فكها</td> </tr> <tr> <td><code>secrets.choice()</code></td> <td>توليد أحرف عشوائية آمنة</td> </tr> <tr> <td><code>cursor.execute()</code></td> <td>تنفيذ أوامر SQL</td> </tr> <tr> <td><code>?</code> في SQL</td> <td>حماية من هجمات SQL Injection</td> </tr> </tbody> </table> ### تحديات إضافية - أضف تشفيراً حقيقياً (Fernet من cryptography) - أضف كلمة مرور رئيسية للبرنامج - صدّر إلى ملف CSV ## المشروع 5: حاسبة العمر 📅 ### الفكرة برنامج يحسب عمرك بالسنوات والأشهر والأيام والساعات، ويخبرك ببعض المعلومات الممتعة عن حياتك. ### المهارات المكتسبة - وحدة `datetime` - حسابات التواريخ - التنسيق والإخراج الجميل ### الكود الكامل ```python from datetime import datetime def get_birthdate(): """قراءة تاريخ الميلاد من المستخدم""" while True: date_str = input("أدخل تاريخ ميلادك (يوم/شهر/سنة - مثال: 15/06/1995): ").strip() try: birthdate = datetime.strptime(date_str, "%d/%m/%Y") if birthdate > datetime.now(): print("❌ التاريخ في المستقبل! يرجى التحقق") continue return birthdate except ValueError: print("❌ صيغة خاطئة. استخدم: يوم/شهر/سنة") def calculate_age(birthdate): """حساب العمر بالتفصيل""" now = datetime.now() # حساب السنوات years = now.year - birthdate.year months = now.month - birthdate.month days = now.day - birthdate.day # تصحيح الحسابات if days < 0: months -= 1 # عدد أيام الشهر السابق prev_month = now.month - 1 if now.month > 1 else 12 prev_year = now.year if now.month > 1 else now.year - 1 days_in_prev = (datetime(prev_year, prev_month % 12 + 1, 1) - datetime(prev_year, prev_month, 1)).days days += days_in_prev if months < 0: years -= 1 months += 12 return years, months, days def calculate_extras(birthdate): """حسابات إضافية ممتعة""" now = datetime.now() delta = now - birthdate total_days = delta.days total_hours = total_days * 24 total_minutes = total_hours * 60 total_seconds = total_minutes * 60 total_weeks = total_days // 7 # معلومات ممتعة heartbeats = total_minutes * 70 # ~70 نبضة/دقيقة breaths = total_minutes * 16 # ~16 نفس/دقيقة sleep_hours = total_hours // 3 # ثلث الحياة نوم return { "total_days": total_days, "total_weeks": total_weeks, "total_hours": total_hours, "total_minutes": total_minutes, "total_seconds": total_seconds, "heartbeats": heartbeats, "breaths": breaths, "sleep_hours": sleep_hours, } def days_to_next_birthday(birthdate): """كم يوماً حتى عيد الميلاد القادم؟""" now = datetime.now() next_birthday = birthdate.replace(year=now.year) if next_birthday < now: next_birthday = next_birthday.replace(year=now.year + 1) delta = next_birthday - now return delta.days, next_birthday def show_results(birthdate): """عرض النتائج بشكل جميل""" years, months, days = calculate_age(birthdate) extras = calculate_extras(birthdate) days_left, next_bday = days_to_next_birthday(birthdate) print("\n" + "=" * 50) print("📅 نتائج حاسبة العمر") print("=" * 50) print(f"\n🎂 عمرك:") print(f" {years} سنة، {months} شهر، {days} يوم") print(f"\n📊 إحصائيات حياتك:") print(f" 📆 الأيام: {extras['total_days']:,}") print(f" 📅 الأسابيع: {extras['total_weeks']:,}") print(f" ⏰ الساعات: {extras['total_hours']:,}") print(f" ⏱ الدقائق: {extras['total_minutes']:,}") print(f" 💓 نبضات قلبك: ~{extras['heartbeats']:,}") print(f" 💨 أنفاسك: ~{extras['breaths']:,}") print(f" 😴 ساعات نومك: ~{extras['sleep_hours']:,}") print(f"\n🎉 عيد ميلادك القادم:") print(f" 📅 {next_bday.strftime('%d/%m/%Y')}") print(f" ⏳ بعد {days_left} يوماً") # معلومات ممتعة print(f"\n💡 هل تعلم؟") print(f" • يوم ميلادك: {birthdate.strftime('%A')}") print("=" * 50) def main(): """الدالة الرئيسية""" print("🎂 مرحباً بك في حاسبة العمر!") print() birthdate = get_birthdate() show_results(birthdate) print("\n👋 شكراً لاستخدامك حاسبة العمر!") if __name__ == "__main__": main() ``` ### شرح الكود <table> <thead> <tr> <th>العنصر</th> <th>الشرح</th> </tr> </thead> <tbody> <tr> <td><code>datetime.strptime()</code></td> <td>تحويل نص إلى تاريخ</td> </tr> <tr> <td><code>datetime.now()</code></td> <td>التاريخ والوقت الحالي</td> </tr> <tr> <td><code>delta.days</code></td> <td>عدد الأيام في الفترة</td> </tr> <tr> <td><code>{:,}</code></td> <td>فصل الآلاف بفواصل (1,000,000)</td> </tr> <tr> <td><code>strftime('%A')</code></td> <td>اسم اليوم (الأحد، الاثنين...)</td> </tr> </tbody> </table> ### تحديات إضافية - احسب العمر على كواكب أخرى (المريخ، المشتري) - أضف حساب البرج الفلكي - أنشئ رسوماً بيانية (باستخدام matplotlib) ## نصائح لبناء معرض أعمالك ### 1. ارفع مشاريعك على GitHub ```bash # لكل مشروع mkdir my-project cd my-project git init git add . git commit -m "Initial commit" # ثم ارفعه على GitHub ``` ### 2. اكتب README احترافي ```markdown # اسم المشروع ## الوصف ماذا يفعل المشروع؟ ## المميزات - ميزة 1 - ميزة 2 ## كيفية التشغيل ```bash python main.py ``` ## التقنيات المستخدمة - Python 3.12 ``` ### 3. حسّن مشاريعك - **أضف تعليقات** — اشرح كودك - **نظّم الملفات** — لا تجعل كل شيء في ملف واحد - **اختبر المشروع** — تأكد من عدم وجود أخطاء ## خطة التطوير لكل مشروع <table> <thead> <tr> <th>المشروع</th> <th>المستوى الحالي</th> <th>التطوير التالي</th> </tr> </thead> <tbody> <tr> <td><strong>لعبة التخمين</strong></td> <td>أساسي</td> <td>إضافة مستويات + قاعدة بيانات</td> </tr> <tr> <td><strong>الآلة الحاسبة</strong></td> <td>أساسي</td> <td>واجهة رسومية Tkinter</td> </tr> <tr> <td><strong>قائمة المهام</strong></td> <td>متوسط</td> <td>واجهة ويب باستخدام Flask</td> </tr> <tr> <td><strong>مدير كلمات المرور</strong></td> <td>متقدم</td> <td>تشفير حقيقي + نسخ احتياطي</td> </tr> <tr> <td><strong>حاسبة العمر</strong></td> <td>أساسي</td> <td>رسوم بيانية + حفظ السجل</td> </tr> </tbody> </table> ## قائمة تحقق — هل بنيت مشاريعك؟ <table> <thead> <tr> <th>المشروع</th> <th>الحالة</th> </tr> </thead> <tbody> <tr> <td>لعبة تخمين الرقم</td> <td>⬜</td> </tr> <tr> <td>آلة حاسبة</td> <td>⬜</td> </tr> <tr> <td>تطبيق قائمة مهام</td> <td>⬜</td> </tr> <tr> <td>مدير كلمات مرور</td> <td>⬜</td> </tr> <tr> <td>حاسبة العمر</td> <td>⬜</td> </tr> </tbody> </table> ## الخلاصة في هذا المقال، بنيت 5 مشاريع Python حقيقية: 1. 🎮 **لعبة تخمين الرقم** — الحلقات والشروط 2. 🧮 **آلة حاسبة** — الدوال والعمليات 3. ✅ **تطبيق مهام** — الملفات والبيانات 4. 🔐 **مدير كلمات مرور** — قاعدة بيانات وتشفير 5. 📅 **حاسبة العمر** — التواريخ والحسابات **الآن لديك معرض أعمال حقيقي!** **الخطوة التالية:** - ارفع المشاريع على GitHub - أضفها إلى سيرتك الذاتية - شاركها على X و LinkedIn - ابنِ مشاريع أكبر **في المقال القادم:** سنتعلم **Git و GitHub** — كيف تحفظ كودك وتشاركه مع العالم! **ما المشروع الذي أعجبك أكثر؟ شاركنا في التعليقات!**