وصلنا لآخر درس — وهذا مو درس عادي، هذا تخرّج. راح نبني برنامجاً كاملاً يجمع كل ما تعلمناه بالدورة في قطعة وحدة:
• كلمة مرور محمية بالهاش (الأمان)
• حفظ واسترجاع بـ JSON (المهارات)
• التواريخ على كل مهمة (الوقت)
• الحماية من الأخطاء بـ try/except (الدرع)
البرنامج: خزنة مهام خاصة بك — مهامك الشخصية محفوظة بملف، ولا أحد يفتح الخزنة إلا بكلمة مرورك.
import json, hashlib
from datetime import datetime
DATA = "mytasks.json"
def load():
try:
with open(DATA, encoding="utf-8") as f:
return json.load(f)
except Exception:
return {"tasks": []} # أول مرة: ملف غير موجود
def save(d):
with open(DATA, "w", encoding="utf-8") as f:
json.dump(d, f, ensure_ascii=False)
data = load()
# أول تشغيل: نسوي كلمة مرور
if "pw" not in data:
data["pw"] = hashlib.sha256(
input("سوّ كلمة مرور للخزنة: ").encode()
).hexdigest()
save(data)
else:
guess = hashlib.sha256(input("كلمة المرور: ").encode()).hexdigest()
if guess != data["pw"]:
print("كلمة مرور غلط — الخزنة مقفلة")
raise SystemExit
while True:
cmd = input("[1] أضف مهمة [2] اعرض مهامي [3] خروج: ")
if cmd == "1":
t = input("وش المهمة؟ ")
when = datetime.now().strftime("%Y-%m-%d %H:%M")
data["tasks"].append({"t": t, "at": when})
save(data)
print("انحفظت!")
elif cmd == "2":
print("--- مهامي ---")
for task in data["tasks"]
print(task["at"], "→", task["t"])
elif cmd == "3":
print("مع السلامة!")
break
else:
print("اختر 1 أو 2 أو 3")امشي على الكود سطر سطر وشوف وش تعرف:
• load() تحاول تقرأ الملف، وإذا ما موجود ترجع قائمة فارغة — try/except درعنا من الانهيار أول مرة!
• كلمة المرور ما تنحفظ أبداً نصاً — نحفظ الهاش بس، ونقارن الهاشات عند كل دخول
• كل مهمة تنحفظ مع تاريخها الحقيقي بنفس لحظة إضافتها
• save() بعد كل إضافة — عشان لو طفى الجهاز، شغلك محفوظ
• الحلقة الرئيسية: قائمة خيارات ما تخرج إلا إذا اختار 3
هذا هو المبرمج الحقيقي: ما يحفظ أكواد — يفكر ويركّب. أنت الحين تقرأ برنامجاً فيه دوال وملفات وحماية وتواريخ وتفهم كل سطر فيه. مبروك وصولك لهنا. آخر خطوة: الاختبار، وبعده الشهادة بانتظارك.