CLI pertama saya.

Patricia Arquette
Patricia Arquetteasal
2024-10-03 06:24:30382semak imbas

My first CLI.

Kredit Pembukaan

Ketika semuanya diklik, pertimbangkan keseronokan projek. Saya membina projek CLI mesra pelanggan untuk memahami cara kelas, kaedah dan sifat berfungsi.

Struktur direktori saya agak mudah:

└── lib
├── model
│ ├── __init__.py
│ └── pelakon.py
| └── movie.py
├── cli.py
├── debug.py
└── pembantu.py
├── Pipfile
├── Pipfile.lock
├── README.md

Seperti yang anda lihat dari struktur saya membina persatuan satu-ke-banyak di mana seorang pelakon mempunyai banyak filem. Daripada persatuan ini menu saya mula dimainkan.

  1. Senarai pelakon semasa
  2. Tambah Pelakon
  3. Padamkan Pelakon
  4. Keluar daripada program

Menu saya di atas telah ditakrifkan oleh fungsi yang dipanggil... menu() yang terletak dalam fail cli.py saya bersama-sama dengan main() yang menunjukkan kepada pengguna menu CLI:

def main():
    while True:
        welcome()
        menu()
        choice = input("> ").strip()
        if choice == "1":
            actor_list()
        elif choice == "2":
            add_actor()
        elif choice == "3":
            delete_actor()
        elif choice == "4":
            exit_program()
            break
        else:
            print("Invalid choice. Try again.\n")

Fungsi khusus ini adalah yang pertama di mana gelung sementara bersama-sama dengan pernyataan if/elif/else dilaksanakan untuk memberikan pengguna kami keupayaan untuk menavigasi menu kami dengan mudah.

Cli.py kemudiannya diakhiri dengan beberapa blok kod penting:

if __name__ == "__main__":
    main() 

Blok kod ini memberitahu jurubahasa kami (Python) untuk hanya menjalankan fail kami jika ia dipanggil daripada baris arahan.

Pelakon Sokongan

Terdapat juga fungsi pembantu yang terlibat dalam projek ini yang juga menggunakan gelung sementara bersama-sama dengan pernyataan if/elif/else. Satu khususnya menonjol dalam menunjukkan kemudahan navigasi apabila memilih contohnya senarai pelakon semasa kami:

def actor_list():

        actor_list = Actor.get_all()

        if actor_list:
            print("\n*** UPDATED LIST! ***")
            for i, actor in enumerate(actor_list, start=1):
                print(f"{i}. {actor.name}")  

            while True:
                choice = input("Press 'a' to add an actor\n"
                                "Press 'b' for actor profile\n"
                                "Press 'c' to return to the main menu.\n"
                                "Press 'd' delete an actor.\n").lower()
                if choice == 'a':
                    add_actor()
                    break
                elif choice == 'b':
                    actor_profile()
                    break
                elif choice == 'c':
                    return
                elif choice == 'd':
                    delete_actor()
                    break
                else:
                    print("Invalid choice. Please try again.") 
        else:
            print("List empty!")
            while True:
                choice = input("Press 'a' or to add an actor\n"
                        "Press 'b' for main menu.\n").lower()
                if choice == 'a':
                    add_actor()
                    break
                elif choice == 'b':
                    return
                else:
                    print("Invalid choice. Please try again.")

Di sini bukan sahaja saya membiasakan diri dengan penyataan gelung while dan if tetapi juga mendapat faedah penampilan dan susunan dengan menggunakan enumerate() dengan gelung for untuk berulang dengan indeks dalam python yang membenarkan semua senarai melalui projek menjadi senarai tersusun.

Tunjukkan Beberapa Kelas

Dua watak utama kami sudah tentu ialah Pelakon Kelas dan Filem. Kedua-duanya terdiri daripada kod yang serupa dari segi kaedah kelas semasa membuat, mengemas kini atau memadam contoh kelas tertentu itu, tetapi terdapat perbezaan:

Jom ambil kelas Filem kami sebagai contoh:

class Movie:

    all_movies = {}

    def __init__(self, movie, genre, actor_id, id=None):
        self.id = id
        self.movie = movie
        self.genre = genre
        self.actor_id = actor_id

Memandangkan kami mempunyai persediaan projek kami di mana seorang pelakon mempunyai banyak filem, kelas filem kami akan mempunyai parameter/atribut actor_id yang unik untuk mewujudkan pautan antara contoh filem dan pelakon tertentu, membolehkan rujukan mudah kepada maklumat pelakon.

Sekarang lihat blok kod ini dalam kelas Pelakon kami:

   def movies(self):
        from models.movie import Movie
        sql = """
            SELECT * FROM movie
            WHERE actor_id = ?
        """
        CURSOR.execute(sql, (self.id,),)

        rows = CURSOR.fetchall()
        return [
            Movie.instance_from_db(row) for row in rows
        ]

Di sini kami mempunyai kaedah movies() kami untuk mendapatkan semula semua filem yang dikaitkan dengan contoh Pelakon semasa dengan menanyakan jadual filem menggunakan ID pelakon. Ini kemudiannya akan mengembalikan senarai objek Filem, mewujudkan hubungan "mempunyai banyak" antara Pelakon dan Filem.

Blok kod yang dibincangkan adalah bidang utama projek yang saya fokuskan untuk memahami lebih banyak pemahaman. Secara keseluruhan projek ini berfungsi sebagai latihan yang baik untuk meningkatkan kemahiran saya dalam ular sawa.

Atas ialah kandungan terperinci CLI pertama saya.. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn