البرمجة

تطوير دليل الهاتف بلغة Python

مرحبًا، يبدو أنك تتعلم برمجة بلغة Python وتحاول العمل على إنشاء قاموس (dictionary) يستند إلى ملف CSV. إليك بعض التوجيهات لمساعدتك في تصحيح الأخطاء وتحسين الكود:

  1. مشكلة في قراءة الملف CSV:
    في قسم القراءة من الملف، يوجد خطأ في الطريقة التي تقرأ بها الملف. يمكن استخدام csv.reader لقراءة الملف النصي كملف CSV، لكن يجب فتح الملف باستخدام open قبل ذلك. بعد فتح الملف، يمكنك استخدام csv.reader لقراءة المحتوى كقائمة من الصفوف.

  2. مشكلة في البحث بواسطة الاسم الأول:
    عند البحث باستخدام الاسم الأول، يبدو أن القاموس phonebook لم يتم ملؤه بعد. يجب عليك قراءة الملف CSV وملء القاموس phonebook بالبيانات من الملف قبل البحث.

إليك الكود المعدل مع التوجيهات:

python
import csv import os phonebook = {} def print_menu(): print('1. Print phone book') print('2. Add to phone book') print('3. Look up number using first name only') print('4. Look up by last name') print('5. Exit') print() menu_selection = 0 while menu_selection != 5: if os.path.isfile('my_phonebook.csv'): with open('my_phonebook.csv', 'r') as csv_file: reader = csv.reader(csv_file) phonebook = {rows[0]: (rows[1], rows[2]) for rows in reader} else: open('my_phonebook.csv', 'w').close() print_menu() menu_selection = int(input('Type menu selection number: ')) if menu_selection == 2: # Add entry to phone book first_name = input("Enter first name: ") last_name = input("Enter last name: ") phone_number = input("Enter phone number: ") with open('my_phonebook.csv', 'a', newline='') as csv_file: writer = csv.writer(csv_file) writer.writerow([first_name, last_name, phone_number]) elif menu_selection == 1: # Print phone book print("Phone book:") for name, details in phonebook.items(): print(f"{name}: {details[0]} {details[1]}") elif menu_selection == 3: # Look up number using first name only print('Look up number') first_name = input('First name: ') if first_name in phonebook: print('The number is', phonebook[first_name][1]) else: print('Name not found') elif menu_selection == 4: # Look up by last name print('Search by last name') last_name = input('Please enter last name: ') found = False for name, details in phonebook.items(): if details[0] == last_name: print(f"{name}: {details[1]}") found = True if not found: print('No entries found for the last name')

هذا الكود يقوم بقراءة الملف CSV في بداية البرنامج ويملأ القاموس phonebook بالبيانات. ثم يقدم قائمة من الخيارات للمستخدم، بما في ذلك إضافة مدخلات جديدة وطباعة دليل الهاتف والبحث عن أرقام الهواتف باستخدام الأسماء.

المزيد من المعلومات

بالطبع، إليك بعض المعلومات الإضافية التي قد تكون مفيدة لك ولتطوير مشروعك:

  1. تنظيم الكود: يمكنك تنظيم الكود بشكل أفضل من خلال تقسيمه إلى وظائف (functions) صغيرة تنفذ المهام المحددة. على سبيل المثال، يمكنك إنشاء وظائف لقراءة الملف CSV، إضافة مدخلات جديدة، والبحث في دليل الهاتف.

  2. التحقق من البيانات المدخلة: يجب عليك دائمًا التحقق من صحة البيانات المدخلة من قبل المستخدم. يمكنك استخدام التحقق من النطاق (range checking) والتحقق من الأنواع (type checking) للتأكد من أن المدخلات تتوافق مع التوقعات.

  3. التعامل مع البحث في القاموس: عند البحث عن أسماء أو أرقام هواتف في القاموس، يمكنك تحسين الكفاءة عن طريق استخدام هياكل بيانات مثل القاموس (dictionary) بدلاً من البحث الخطي. هذا يمكن أن يسرّع العملية خصوصاً إذا كان لديك عدد كبير من البيانات.

  4. إدارة الأخطاء: يجب أن تضيف تعليقات ورسائل الخطأ في الكود لتسهيل فهم الأخطاء عند حدوثها. على سبيل المثال، يمكنك إضافة تعليقات تشرح ما يحدث في كل جزء من الكود وما هي الأخطاء المحتملة.

  5. استخدام مكتبات ووحدات خارجية: في بعض الأحيان، يمكن استخدام مكتبات جاهزة لتبسيط المهام مثل التعامل مع الملفات CSV أو تنسيق الإدخال والإخراج. يمكنك استكشاف مكتبات مثل Pandas لمعالجة البيانات بشكل أكثر فعالية.

  6. التوثيق: يمكنك كتابة تعليقات وثائق توضيحية للكود لتوضيح كيفية عمل البرنامج وكيفية استخدامه للمستخدمين الآخرين أو لنفسك في المستقبل.

باستخدام هذه الأفكار، يمكنك تحسين وتطوير مشروعك بشكل أفضل وجعل تجربة البرمجة أكثر فاعلية ومتعة.

زر الذهاب إلى الأعلى