سنبني دفتر هاتف في Python باستخدام قاموس يربط الاسم برقم مسجل محليًا. البرنامج يبحث في البيانات التي تضعها أنت، ولا يجلب أرقام أشخاص من الإنترنت. نجرب أولًا الاسم الكامل، ثم البحث الجزئي، ونعرض رسالة واضحة عند غياب النتائج بدل طباعة الاسم على أنه رقم هاتف.
الكود الكامل باستخدام Python 3
contacts = {
"ali": "0100000",
"ahmed khaled": "0100001",
"ahmed maher": "0100002",
"أحمد محمود": "0100003",
}
def find_contacts(query, data):
query = " ".join(query.split()).casefold()
if not query:
return []
normalized = [(name, number, " ".join(name.split()).casefold())
for name, number in data.items()]
exact = [(name, number) for name, number, key in normalized if key == query]
if exact:
return exact
return [(name, number) for name, number, key in normalized if query in key]
if __name__ == "__main__":
query = input("Name: ")
results = find_contacts(query, contacts)
if results:
for name, number in results:
print(f"{name}: {number}")
else:
print("No matching contacts.")كيف يعمل البحث؟
يخزن القاموس الأرقام كنصوص حتى لا تضيع الأصفار التي تبدأ بها. تعيد split ثم join توحيد المسافات في الاستعلام والاسم المخزن، وتساعد casefold على المقارنة دون اختلاف حالة الأحرف اللاتينية. البحث الجزئي يرجع قائمة من النتائج، لأن أكثر من اسم قد يحتوي على الكلمة نفسها.
اختبارات عملية
إدخال ahmed يعرض نتيجتين، وإدخال ali يعرض المطابقة الكاملة، أما الاسم غير الموجود أو النص المكوّن من مسافات فقط فيعيد قائمة فارغة. لا نستخدم elif للاستعلام غير الموجود ثم نطبع أول كلمة منه؛ فذلك لا يمثل رقمًا ولا ينفذ بحثًا جزئيًا.
تطوير دفتر الهاتف
يمكن إضافة واجهة وإمكانية الحفظ في ملف لاحقًا. القاموس مناسب لهذا المثال الصغير، لكن الأسماء المتطابقة قد تحتاج معرّفًا مستقلًا في تطبيق أكبر. احتفظ فقط ببيانات مسموح لك باستخدامها؛ الأسماء والأرقام هنا تجريبية.






