مــــــشروع بايـــثون : ⛩️ منظم الانميـــــات - my anime list + الرسم التدفقي

احـــــب ان اشارك معكم احد مشاريع بايثون التي استمتعت جدا في تـــطويرها :star2:
تـعريف المشروع : برنامج لتنظيم و حفظ انمياتك المفضلة
.

import os

def clean():
  os.system ("cls" if os.name == 'nt' else "clear")

class Anime:
  def __init__(self, name, category, status, rate):
    self.name = name
    self.category = category
    self.status = status
    self.rate = rate

  def display(self):
    print(f"Anime Name : {self.name}")
    print(f"Category : {", ".join(self.category)}")
    print(f"Status : {self.status}")
    print(f"rate : {self.rate}")
    print("_" * 20)

anime_list = []

def find_menu():
  print("""
Search by :
1. Name
2. Category
3. Status
4. Rate
""") 

def rate_menu():
  print("""
Rates :
1. 4.5 - 5 ⭐️⭐️⭐️⭐️⭐️
2. 3.5 - 4.5 ⭐️⭐️⭐️⭐️
3. 2.5 - 3.5 ⭐️⭐️⭐️
4. 1.5 - 2.5 ⭐️⭐️
5. < 1.5  ⭐️
""") 

def change_menu():
  print("""
Anime Information To Change :
1. Name
2. Category
3. Status
4. Rate
""")  

def menu():
  print("""
____MENU____
1. Add anime
2. Display all anime
3. Find anime
4. Change anime information
5. Exit
""")

def status_menu():
  print("""
Anime Status :
1. I would like to watch it 👀
2. I watched it ✔️
3. I'm watching it now ⏳
4. I don't want to watch it ❌
""")

def display_all_anime():
  if anime_list:
    print("display all anime...\n")
    for anime in anime_list:
      anime.display()
  else:
    print("there are no anime to display.")

def create_anime():
  name = input("enter the name of anime : ")
  category = input("enter the category (by comma ',') : ").split(", ")
  while True:
    status_menu()
    status = input("enter the status of anime (1-4): ")
    if status == '1':
      status = "I would like to watch it"
      break
    elif status == '2':
      status = "I watched it"
      break
    elif status == '3':
      status = "I'm watching it now"
      break
    elif status == '4':
      status = "I don't want to watch it"
      break
    else:
      print("invalid choice !")
      input("press enter to return...")
  
  while True:
    rate = input("\nenter the rate of anime (0 - 5 ⭐️) : ")
    if float(rate) >= 0 and float(rate) <= 5:
      rate = float(rate)
      break
    else:
      print("invalid rate !")
      input("press enter to return...")     
  
  return Anime(name, category, status, rate)

def find_anime():
  while True:
    clean()
    find_menu()
    choice = input("enter your choice (1-4) : ")

    anime_found = []

    if choice == '1':
      clean()
      name = input("\nenter the name of anime : ")
      for anime in anime_list:
        if anime.name == name:
          anime_found.append(anime)
          break

    elif choice == '2':
      clean()
      category = input("\nenter the category of anime : ")
      for anime in anime_list:
        if category in anime.category:
          anime_found.append(anime)

    elif choice == '4':
      while True:
        clean()
        rate_menu()
        choice = input("enter your choice (1-3) : ")

        if choice == '1':
          for anime in anime_list:
            if anime.rate <= 5 and anime.rate >= 4.5:
              anime_found.append(anime)
            

        elif choice == '2':
          for anime in anime_list:
            if anime.rate < 4.5 and anime.rate >= 3.5:
              anime_found.append(anime)

        elif choice == '3':
          for anime in anime_list:
            if anime.rate < 3.5 and anime.rate >= 2.5:
              anime_found.append(anime)

        elif choice == '4':
          for anime in anime_list:
            if anime.rate < 2.5 and anime.rate >= 1.5:
              anime_found.append(anime)

        elif choice == '5':
          for anime in anime_list:
            if anime.rate < 1.5:
              anime_found.append(anime)

        else:
          print("invalid choice !")
          input("press enter to return...")
          continue

        break
    
    elif choice == '3':

      while True:
        status_menu()
        choice = input("enter the status of anime (1-4): ")
        if choice == '1':
          choice = "I would like to watch it"

        elif choice == '2':
          choice = "I watched it"

        elif choice == '3':
          choice = "I'm watching it now"

        elif choice == '4':
          choice = "I don't want to watch it"
  
        else:
          print("invalid choice !")
          input("press enter to return...")
          continue

        for anime in anime_list:
          if anime.status == choice:
            anime_found.append(anime)


        break


    else:
      print("invalid choice !")
      input("press enter to return...")
      continue
    
    if anime_found:
      print("\nAnime found : \n")
      for anime in anime_found:
        anime.display()
    else:
      print("\nAnime not found")
    
    break

def change_anime_info():
  while True:
    anime_to_change = input("\nenter the name of anime : ")

    for anime in anime_list:
      if anime.name == anime_to_change:
        anime_to_change = anime
        break
      else:
        anime_to_change = "not found"

    if anime_to_change == "not found":
      print("Anime not found !")
      break

    while True:
      change_menu()
      choice = input("enter your choice (1-4) : ")
      if choice == '1':
        new_info = input("enter the new name : ")
        anime_to_change.name = new_info

      elif choice == '2':
        new_info = input("enter the new category : ").split(", ")
        anime_to_change.category = new_info

      elif choice == '3':
        while True:
          status_menu()
          status = input("enter the new status of anime (1-4): ")
          if status == '1':
            status = "I would like to watch it"
            break
          elif status == '2':
            status = "I watched it"
            break
          elif status == '3':
            status = "I'm watching it now"
            break
          elif status == '4':
            status = "I don't want to watch it"
            break
          else:
            print("invalid choice !")
            input("press enter to return...")
        anime_to_change.status = status
      
      elif choice == '4':
        while True:
          new_info = input("\nenter the new rate of anime (0 - 5 ⭐️) : ")
          if float(new_info) >= 0 and float(new_info) <= 5:
            new_info = float(new_info)
            break
          else:
            print("invalid rate !")
            input("press enter to return...") 
        anime_to_change.rate = new_info    
      
      else:
        print("invalid choice !")
        continue 

      print("The information has been updated successfully.")
      break
    break
           

while True:
  clean()
  menu()
  user_choice = input("enter your choice (1-5) : ")

  if user_choice == '1':
    clean()
    anime_list.append(create_anime())
    print("\nAnime Added Successufully ✅")

  elif user_choice == '2':
    clean()
    display_all_anime()

  elif user_choice == '3':
    clean()
    if anime_list:
      find_anime()
    else:
      print("There are no anime in the anime list !")

  elif user_choice == '4':
    clean()
    if anime_list:
      change_anime_info()
    else:
      print("There is no anime in the list.")

  elif user_choice == '5':
    print("Exiting...")
    break

  else:
    print("\ninvaid choice !")

  input("\npress enter to return...")

.

  • مـــزايا المشروع :star_struck: :

  • إدارة الأنمي بشكل منظم:

  • يمكنك إضافة تفاصيل حول الأنمي مثل الاسم، الفئة، الحالة، والتقييم. هذا يوفر طريقة منظمة لتتبع الأنمي الذي تشاهده أو ترغب في مشاهدته.

  • واجهة مستخدم بسيطة وسهلة الاستخدام:

  • استخدام القوائم والنظام البسيط للتنقل بين الخيارات يجعل التطبيق سهل الاستخدام حتى للمستخدمين غير المتمرسين في التكنولوجيا.

  • البحث والتصنيف:

  • يمكن للمستخدمين البحث عن الأنمي بناءً على الاسم، الفئة، الحالة، أو التقييم. هذا يوفر مرونة كبيرة في العثور على الأنمي المناسب بسرعة.

  • تحديث المعلومات:

  • يتيح للمستخدمين تغيير معلومات الأنمي مثل الاسم، الفئة، الحالة، أو التقييم بعد إضافته. هذه الميزة مهمة للحفاظ على البيانات محدثة.

  • التفاعل مع المستخدم:

  • التطبيق يتفاعل مع المستخدم عبر رسائل توضيحية وإشعارات (مثل “Anime Added Successfully” و “Invalid Choice”). هذا يحسن من تجربة المستخدم ويجعل التفاعل مع التطبيق أكثر سلاسة.

  • المرونة في التقييم:

  • إضافة نظام تقييم مرن يسمح بتحديد تقييم الأنمي من 0 إلى 5 نجوم، مما يساعد على تصنيف الأنمي بشكل أكثر دقة.

  • التحقق من الإدخال:

  • الكود يحتوي على نظام للتحقق من صحة الإدخال، مما يقلل من الأخطاء ويضمن أن البيانات التي يتم إدخالها صحيحة ومناسبة.

7 إعجابات

عمل رائع وجيد ويقيس مدة شغفك في البرمجة
مبارك لك هذا المشروع الجميل صراحة
واستمر في عمل مشاريع رائعة ومبدعة

4 إعجابات

amazing work bro :+1: :+1: :+1: :clap: :clap: :clap: :clap: :star_struck: :star_struck: :star_struck: :star_struck:

4 إعجابات

سؤال لو سمحت هو البرنامج اللي استخدمته للرسم التدفقي هو البرنامج اللي قال عليه الاستاذ اثناء الشرح و كمان هو بيشتغل بنت و لا من غير نت لانه نقطة مهمة بالنسبة لي

3 إعجابات

هو بالطبع يعمل على النت
ولكن يمكن لم تنزيل برامج اخرى تعمل بدون نت على الجهاز هذا برنامج ينزل على الحاسوب يعمل بدون نت

https://clickcharts-flowchart-software.softonic-ar.com/

ويمكنك عمل رسم تدفقي عبر برنامج بوربوينت ضمن برامج مايكروسوفت اذا كان متوفر على حاسوبك

3 إعجابات

لنا جهاز كمبيوتر شخصي و عليه ويندوز 10 اين اجد برنامج رسم تدفقي يعمل كتطبيق علي جهاز الكمبيوتر و يكون من غير نت لنظرا لمشاكل الشبكة عندي

3 إعجابات

حمل هذا البرنامج

https://clickcharts-flowchart-software.softonic-ar.com/

إعجابَين (2)

شـــخصيا انا استخدم canva لكن ابراهيم عادل رشح لنا موقع اخر و صدقا لم اجد راحتي فيه و اكتفيت بكانفا و بيشتغل بالنت
و انصحك تختار البرنامج الي تلقى راحتك به

3 إعجابات

تمام شكرا جذيلا لك سوف اجد برنامج الرسم التدفقي الخاص بي

3 إعجابات

جميل جربت الكود يعمل بشكل جيد

إعجابَين (2)

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

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

  2. تحسين المهارات البرمجية: العمل على هذا المشروع سيساعدك على تحسين مهارات البرمجة لديك. ستتعلم كيف تتعامل مع الكائنات (Objects) في Python وتطوير منطق برمجي يمكن أن ينمو ليصبح أكثر تعقيدًا مستقبلاً.

  3. إضافة ميزات جديدة: يمكنك استكشاف طرق لتطوير البرنامج أكثر مثل:

    • دمج API من مواقع مثل MyAnimeList لجلب معلومات الأنميات تلقائيًا.
    • إضافة واجهة مستخدم رسومية (GUI) باستخدام مكتبات مثل Tkinter أو PyQt لجعل البرنامج أكثر جاذبية وسهولة في الاستخدام.
    • إضافة تنبيهات لمتابعة إصدار الحلقات الجديدة من الأنميات التي تتابعها.
  4. الرسم التدفقي: اعتماد الـFlowchart كجزء من المشروع يجعلك ترى هيكل البرنامج بالكامل، مما يساعدك على فهم نقاط القوة والضعف في منطق البرنامج ويعطيك الفرصة للتوسع بطريقة منظمة.

  5. المجتمع: مشاركة مشروعك مع مجتمع البرمجة قد يساعد في الحصول على تعليقات واقتراحات لتطويره أكثر. يمكن أن يصبح هذا المشروع قاعدة لإنشاء تطبيق أكبر أو منصة لإدارة الأنميات بطريقة أكثر احترافية!

استمر في الإبداع، ولا تتوقف عن تطوير أفكارك! كل مشروع جديد هو خطوة نحو تحقيق أهدافك المهنية أو هواياتك الشخصية! :rocket:

4 إعجابات

شكرا لكلماتك الطيبة :heart_decoration: عندما نصل لهذه المواضيع المتقدمة ( API و GUI و غيرها) سأدمجها و أطور بها جميع مشاريعي السابقة

4 إعجابات