Python コーディング問題 第26回 『クラス総合問題①』

プログラミング上達のコツは学習初期段階でとにかく手を動かしてコーディングすることです。
本シリーズでは Python の初学者に向けたコーディング問題を出題します。
今回は Pythonのクラス機構 に関する総合演習を行います。コーディング指示に従ってコーディングしてみましょう!

今回は「映画管理システム」を作成します。

目次

学習の進め方

  1. プログラム説明および目的を確認し、どのようなプログラムで何を学ぶかイメージしましょう。
  2. コーディング指示に従ってコーディングをします。
    もし分からなければ、コード例を確認しても良いです。
  3. 自分の出力結果と出力結果例を比較してみましょう。
  4. コード例を確認し、自分のコードと比較してみましょう。
    コード例は「あくまでも例」なので完全に一致する必要はありません。
  5. 最終的にはコーディング指示だけでコーディングできるよう、繰り返し練習しましょう。

Python コーディング問題1: 映画クラスの作成

プログラム説明

映画のタイトルとジャンルを管理するクラスを作成します。

目的

クラスの基本、属性とメソッドの定義、インスタンスの作成を学びます。

コーディング指示

新しい Python ファイル movie_manager.py を作成する

  1. 任意のエディタを開き、新しいファイルを作成します。
  2. ファイル名を movie_manager.py として保存します。

クラス Movie を作成する

  1. コンストラクタ __init__(self, title, genre) を定義し、 titlegenre 属性を設定する
  2. メソッド display(self) を定義し、映画のタイトルとジャンルを表示する

メインプログラムで以下の操作を行う

  1. ユーザーから映画のタイトルとジャンルを入力し、映画を作成する
  2. 作成した映画を表示する

Python コーディング例

タップしてコード例を表示
# クラス Movie を定義
class Movie:
    def __init__(self, title, genre):
        # 映画のタイトルとジャンルの属性を設定
        self.title = title
        self.genre = genre

    def display(self):
        # 映画のタイトルとジャンルを表示するメソッド
        print(f"Title: {self.title}, Genre: {self.genre}")

# メインプログラム
# ユーザーから映画のタイトルとジャンルを入力させる
movie_title = input("映画のタイトルを入力してください: ")
movie_genre = input("映画のジャンルを入力してください: ")
# Movie クラスのインスタンスを作成
movie1 = Movie(movie_title, movie_genre)
# 映画を表示
movie1.display()

Python コーディング問題2: 映画リストの管理

プログラム説明

映画を複数管理できるようにし、映画をリストに追加・表示できるようにします。

目的

リストの操作、メソッドの拡張を学びます。

コーディング指示

前問で作成した Movie クラスを利用します。

クラス MovieCollection を定義する

  1. コンストラクタ __init__(self) を定義し、空のリスト movies を初期化する
  2. メソッド add_movie(self, movie) を定義し、映画をリストに追加する
  3. メソッド display_movies(self) を定義し、リスト内のすべての映画を表示する(for文を使用)

メインプログラムで映画を複数追加し、表示する

  1. ユーザーから映画のタイトルとジャンルを入力させ、複数の映画を作成する
  2. 作成した映画をリストに追加し、表示する

Python コーディング例

タップしてコード例を表示
# クラス Movie を定義
class Movie:
    def __init__(self, title, genre):
        self.title = title
        self.genre = genre

    def display(self):
        print(f"Title: {self.title}, Genre: {self.genre}")

# クラス MovieCollection を定義
class MovieCollection:
    def __init__(self):
        # 映画リストを初期化
        self.movies = []

    def add_movie(self, movie):
        # 映画をリストに追加
        self.movies.append(movie)

    def display_movies(self):
        # リスト内のすべての映画を表示
        for movie in self.movies:
            movie.display()

# メインプログラム
movie_collection = MovieCollection()
while True:
    # ユーザーから映画のタイトルとジャンルを入力させる
    movie_title = input("映画のタイトルを入力してください (終了するには 'exit' と入力): ")
    if movie_title.lower() == 'exit':
        break
    movie_genre = input("映画のジャンルを入力してください: ")
    # Movie クラスのインスタンスを作成し、リストに追加
    movie = Movie(movie_title, movie_genre)
    movie_collection.add_movie(movie)

# すべての映画を表示
movie_collection.display_movies()

Python コーディング問題3: 詳細映画クラスの作成

プログラム説明

映画に監督の情報を追加し、詳細な映画クラスを作成します。

目的

クラスの継承、メソッドのオーバーライドを学びます。

コーディング指示

前問で作成した Movie クラスを利用します。

クラス MovieCollection を定義し、 Movie クラスを継承する

  1. コンストラクタ __init__(self, title, genre, director) を定義し、 titlegenredirector 属性を設定する
  2. メソッド display(self) をオーバーライドし、映画のタイトル、ジャンル、監督を表示する

メインプログラムで映画と監督情報を追加し、表示する

コーディング例

タップしてコード例を表示
# クラス Movie を定義
class Movie:
    def __init__(self, title, genre):
        self.title = title
        self.genre = genre

    def display(self):
        print(f"Title: {self.title}, Genre: {self.genre}")

# クラス DetailedMovie を定義し、Movie を継承
class DetailedMovie(Movie):
    def __init__(self, title, genre, director):
        super().__init__(title, genre)
        self.director = director

    def display(self):
        # メソッドをオーバーライドして映画の詳細を表示
        print(f"Title: {self.title}, Genre: {self.genre}, Director: {self.director}")

# クラス MovieCollection を定義
class MovieCollection:
    def __init__(self):
        self.movies = []

    def add_movie(self, movie):
        self.movies.append(movie)

    def display_movies(self):
        for movie in self.movies:
            movie.display()

# メインプログラム
movie_collection = MovieCollection()
while True:
    movie_title = input("映画のタイトルを入力してください (終了するには 'exit' と入力): ")
    if movie_title.lower() == 'exit':
        break
    movie_genre = input("映画のジャンルを入力してください: ")
    director_name = input("監督の名前を入力してください: ")
    # DetailedMovie クラスのインスタンスを作成し、リストに追加
    detailed_movie = DetailedMovie(movie_title, movie_genre, director_name)
    movie_collection.add_movie(detailed_movie)

movie_collection.display_movies()

Python コーディング問題4: 映画の削除機能の追加

プログラム説明

映画を削除できる機能を追加し、映画管理システムを完成させます。

目的

リストの操作(削除)とユーザー入力の処理を学びます。

コーディング指示

前問で作成した Movie クラス、DetailedMovie クラス、MovieCollection クラスを利用します。

クラス MovieCollection にメソッド remove_movie(self, movie_title) を追加する

リスト内包表記を使用して映画を削除します。

メインプログラムで映画を削除し、表示する

ユーザーから削除する映画のタイトルを入力させ、リストから削除します。

コーディング例

タップしてコード例を表示
# クラス Movie を定義
class Movie:
    def __init__(self, title, genre):
        self.title = title
        self.genre = genre

    def display(self):
        print(f"Title: {self.title}, Genre: {self.genre}")

# クラス DetailedMovie を定義し、Movie を継承
class DetailedMovie(Movie):
    def __init__(self, title, genre, director):
        super().__init__(title, genre)
        self.director = director

    def display(self):
        print(f"Title: {self.title}, Genre: {self.genre}, Director: {self.director}")

# クラス MovieCollection を定義
class MovieCollection:
    def __init__(self):
        self.movies = []

    def add_movie(self, movie):
        self.movies.append(movie)

    def remove_movie(self, movie_title):
        # リスト内包表記を使用して映画を削除
        self.movies = [movie for movie in self.movies if movie.title != movie_title]

    def display_movies(self):
        for movie in self.movies:
            movie.display()

# メインプログラム
movie_collection = MovieCollection()
while True:
    movie_title = input("映画のタイトルを入力してください (終了するには 'exit' と入力): ")
    if movie_title.lower() == 'exit':
        break
    movie_genre = input("映画のジャンルを入力してください: ")
    director_name = input("監督の名前を入力してください: ")
    detailed_movie = DetailedMovie(movie_title, movie_genre, director_name)
    movie_collection.add_movie(detailed_movie)

while True:
    remove_title = input("削除する映画のタイトルを入力してください (終了するには 'exit' と入力): ")
    if remove_title.lower() == 'exit':
        break
    movie_collection.remove_movie(remove_title)

movie_collection.display_movies()
(Visited 5 times, 1 visits today)
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

職業訓練校 エヌ・キャリア・アカデミー 講師の田中です。
主にPythonやC言語を担当しています。
人気の言語であるPythonの多様な活用方法と、その魅力をお伝えする記事を中心に発信していきます。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次