مرحبًا، يبدو أنك تتعلم برمجة بلغة Python وتحاول العمل على إنشاء قاموس (dictionary) يستند إلى ملف CSV. إليك بعض التوجيهات لمساعدتك في تصحيح الأخطاء وتحسين الكود:
-
مشكلة في قراءة الملف CSV:
في قسم القراءة من الملف، يوجد خطأ في الطريقة التي تقرأ بها الملف. يمكن استخدامcsv.reader
لقراءة الملف النصي كملف CSV، لكن يجب فتح الملف باستخدامopen
قبل ذلك. بعد فتح الملف، يمكنك استخدامcsv.reader
لقراءة المحتوى كقائمة من الصفوف. -
مشكلة في البحث بواسطة الاسم الأول:
عند البحث باستخدام الاسم الأول، يبدو أن القاموسphonebook
لم يتم ملؤه بعد. يجب عليك قراءة الملف CSV وملء القاموسphonebook
بالبيانات من الملف قبل البحث.
إليك الكود المعدل مع التوجيهات:
pythonimport 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
بالبيانات. ثم يقدم قائمة من الخيارات للمستخدم، بما في ذلك إضافة مدخلات جديدة وطباعة دليل الهاتف والبحث عن أرقام الهواتف باستخدام الأسماء.
المزيد من المعلومات
بالطبع، إليك بعض المعلومات الإضافية التي قد تكون مفيدة لك ولتطوير مشروعك:
-
تنظيم الكود: يمكنك تنظيم الكود بشكل أفضل من خلال تقسيمه إلى وظائف (functions) صغيرة تنفذ المهام المحددة. على سبيل المثال، يمكنك إنشاء وظائف لقراءة الملف CSV، إضافة مدخلات جديدة، والبحث في دليل الهاتف.
-
التحقق من البيانات المدخلة: يجب عليك دائمًا التحقق من صحة البيانات المدخلة من قبل المستخدم. يمكنك استخدام التحقق من النطاق (range checking) والتحقق من الأنواع (type checking) للتأكد من أن المدخلات تتوافق مع التوقعات.
-
التعامل مع البحث في القاموس: عند البحث عن أسماء أو أرقام هواتف في القاموس، يمكنك تحسين الكفاءة عن طريق استخدام هياكل بيانات مثل القاموس (dictionary) بدلاً من البحث الخطي. هذا يمكن أن يسرّع العملية خصوصاً إذا كان لديك عدد كبير من البيانات.
-
إدارة الأخطاء: يجب أن تضيف تعليقات ورسائل الخطأ في الكود لتسهيل فهم الأخطاء عند حدوثها. على سبيل المثال، يمكنك إضافة تعليقات تشرح ما يحدث في كل جزء من الكود وما هي الأخطاء المحتملة.
-
استخدام مكتبات ووحدات خارجية: في بعض الأحيان، يمكن استخدام مكتبات جاهزة لتبسيط المهام مثل التعامل مع الملفات CSV أو تنسيق الإدخال والإخراج. يمكنك استكشاف مكتبات مثل Pandas لمعالجة البيانات بشكل أكثر فعالية.
-
التوثيق: يمكنك كتابة تعليقات وثائق توضيحية للكود لتوضيح كيفية عمل البرنامج وكيفية استخدامه للمستخدمين الآخرين أو لنفسك في المستقبل.
باستخدام هذه الأفكار، يمكنك تحسين وتطوير مشروعك بشكل أفضل وجعل تجربة البرمجة أكثر فاعلية ومتعة.