-1-
-2-
خطة بايثون المكثّفة: من الأساس للذكاء الاصطناعي في 20 أسبوعاً
خطة بمعدل 6 ساعات يومياً، 5 أيام في الأسبوع (30 ساعة أسبوعياً)، وهدفها النهائي بناء برنامج صيدلية أو سوبر ماركت فيه تحليل وتقارير وذكاء اصطناعي.
قواعد الخطة
1. المدة: 30 ساعة في الأسبوع تقريباً ثلاثة أضعاف الخطة الأولى، فاختصرنا المدة من حوالي سنة لحوالي 20 أسبوعاً (5 شهور). الاحتراف الحقيقي بيكمل بعدها مع المشاريع الحقيقية، لكن في آخر الخطة هتبقى قادر تبني النظام بنفسك.
2. يومين راحة ثابتين (مثلاً الجمعة ويوم تاني). مراجعة خفيفة نص ساعة لو حبيت، وغير كده راحة كاملة. المعلومة بتثبت وقت النوم والراحة، فهم جزء من الخطة مش رفاهية.
3. الكود الأساسي تكتبه بإيدك. استخدم الذكاء الاصطناعي ليشرحلك ويراجع كودك ويكشف أخطاءك، مش يكتبه بدالك. لو نسخت كود مش فاهمه هتسرّع الشكل وتبطّأ التعلّم.
4. كل يوم ينتهي بـ commit على Git وسطرين ملاحظات عن اللي اتعلمته.
5. لو اتأخرت: ما تلغيش المشروع الأسبوعي، شيل الأقل أهمية من القراءة. المشروع هو اللي بيثبّت المعلومة.
6. اختبار الأسبوع: في آخر كل مرحلة اسأل نفسك: أقدر أعيد بناء ده من غير مساعدة؟ لو لأ، خد يوم تكرار قبل المرحلة اللي بعدها.
الجدول اليومي (6 ساعات)
• الفترة 1 (90 دقيقة): تعلّم من الكتاب أو الكورس (قراءة + تجربة الأمثلة).
• استراحة 15 دقيقة: قوم وامشي.
• الفترة 2 (90 دقيقة): تمارين على اللي اتعلمته.
• استراحة 30 دقيقة: أكل ومشي.
• الفترة 3 (90 دقيقة): المشروع الأسبوعي.
• استراحة 15 دقيقة.
• الفترة 4 (90 دقيقة): المشروع، وآخر 30 دقيقة: مراجعة وGit وملاحظات.
ملحوظة: 6 ساعات تركيز عالي كتير على المخ. لو حسيت إن آخر فترة بقت ضعيفة، خليها قراءة خفيفة أو مراجعة بدل كود جديد.
الضهر
القعدة الطويلة هي أكبر خطر في الخطة دي. اضبط مذكّر القيام على 45 دقيقة عمل ثم قيام ومشي، وبدّل وضع الجلوس والوقوف لو عندك مكتب مناسب. لو ظهر ألم أو تنميل مستمر، وقّف وكلّم دكتور قبل ما تكمل.
الأسبوع 1: مراجعة الأساسيات
القراءة: Python Crash Course الجزء الأول (الأساسيات) بسرعة، وAutomate the Boring Stuff للملفات والـ regex.
• اليوم 1:
المتغيرات والأنواع والنصوص والـ lists والـ dicts والحلقات (تمارين كتير).
المتغيرات والأنواع والنصوص والـ lists والـ dicts والحلقات
الأسبوع 1: مراجعة الأساسيات — الدرس 1
الخطوات بالترتيب
- (90 د) اتعلّم: المتغيرات والأنواع والنصوص والـ lists والـ dicts والحلقات — المصدر: Python Crash Course (الجزء الأول) + Automate the Boring Stuff
- (90 د) حلّ التمرين بإيدك من غير ما تنسخ (التمرين تحت)
- (90 د) مشروع الأسبوع: أداة سطر أوامر لإدارة مخزون (إضافة/حذف/بحث وحفظ في JSON)
- (60 د) كمّل المشروع + (30 د) مراجعة وGit commit وسطرين ملاحظات
التمرين
اكتب برنامج يقرأ قائمة أسماء أصناف ويطبع كل صنف برقمه، ثم يعدّ كم صنف يبدأ بنفس الحرف (استخدم dict).
تلميح
dict مفتاحه الحرف الأول، وكل مرة زوّد العدّاد بـ get(key, 0) + 1.
مراجع للبحث
الحل
import json
# Global list to store all items (each item is a dictionary)
inventory = []
def load_data():
"""Loads inventory from a JSON file if it exists."""
global inventory # ضرورية هنا فقط لأننا بنعمل assignment (=) للستة
try:
with open("inventory.json", "r") as file:
inventory = json.load(file)
except (FileNotFoundError, json.JSONDecodeError):
inventory = []
def save_data():
"""Saves the current inventory list to a JSON file."""
# مش محتاجين global هنا لأننا بنقرا محتوى الـ inventory بس من غير (=)
try:
with open("inventory.json", "w") as file:
json.dump(inventory, file, indent=4)
except Exception as e:
print(f"Error saving data: {e}")
def add_item():
"""Adds a new item (dictionary) to the inventory list[cite: 1]."""
print("\n--- Add New Item ---")
item_id = input("Enter Item ID: ")
name = input("Enter Item Name: ")
try:
quantity = int(input("Enter Quantity: "))
price = float(input("Enter Price: "))
except ValueError:
print("Invalid input for quantity or price! Please enter numbers.\n")
return
item = {"id": item_id, "name": name, "quantity": quantity, "price": price}
inventory.append(item) # بنعدل محتويات اللستة بـ append من غير (=)
save_data()
print("Item added successfully!\n")
def search_item():
"""Searches for an item by its ID in the inventory list[cite: 1]."""
# مش محتاجين global هنا، اللستة معروفة وتقدر تقرأها مباشرة
if not inventory:
print("\nInventory is empty. Nothing to search.\n")
return
search_id = input("\nEnter Item ID to search: ")
for item in inventory:
if item["id"] == search_id:
print("\n--- Item Found ---")
print(f"ID: {item['id']}")
print(f"Name: {item['name']}")
print(f"Quantity: {item['quantity']}")
print(f"Price: {item['price']}\n")
return
print("Item not found!\n")
def delete_item():
"""Deletes an item from the inventory list by its ID[cite: 1]."""
if not inventory:
print("\nInventory is empty. Nothing to delete.\n")
return
delete_id = input("\nEnter Item ID to delete: ")
for item in inventory:
if item["id"] == delete_id:
inventory.remove(item) # تعديل محتويات بـ remove من غير (=)
save_data()
print("Item deleted successfully!\n")
return
print("Item not found!\n")
def view_inventory():
"""Displays all items currently in the inventory list[cite: 1]."""
if not inventory:
print("\nInventory is empty.\n")
return
print("\n--- Current Inventory ---")
for item in inventory:
print(
f"ID: {item['id']} | Name: {item['name']} | Qty: {item['quantity']} |"
f" Price: {item['price']}"
)
print()
def item_statistics():
"""Counts and displays how many items start with each letter."""
if not inventory:
print("\nInventory is empty. No statistics to show.\n")
return
stats = {}
for item in inventory:
name = item["name"]
if name:
# بناخد أول حرف ونحوله لـ Capital عشان التوحيد
first_letter = name[0].upper()
# لو الحرف متسجل قبل كده بنزود 1، لو لأ بنبدأ بـ 1
if first_letter in stats:
stats[first_letter] += 1
else:
stats[first_letter] = 1
print("\n--- Inventory Statistics (Starting Letters) ---")
# بنعرض النتائج مرتبة حسب الحرف
for letter in sorted(stats.keys()):
print(f"Letter '{letter}': {stats[letter]} items")
print()
def main():
load_data()
while True:
print("=== Inventory Management System ===")
print("1. Add Item")
print("2. Search Item")
print("3. Delete Item")
print("4. View All Items")
print("5. View Statistics (Letter Count)") # الخيار الجديد
print("6. Exit")
choice = input("Enter your choice (1-6): ")
if choice == "1":
add_item()
elif choice == "2":
search_item()
elif choice == "3":
delete_item()
elif choice == "4":
view_inventory()
elif choice == "5":
item_statistics() # استدعاء دالة الإحصائيات
elif choice == "6":
print("Exiting program. Goodbye!")
break
else:
print("Invalid choice. Please try again.\n")
if __name__ == "__main__":
main()
-3-
-4-

