Python コーディング練習問題 第27回 『クラス総合問題②』

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

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

目次

学習の進め方

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

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

プログラム説明

曲のタイトルとアーティストを管理するクラスを作成し、曲の情報をディクショナリに追加します。

目的

クラスの基本、属性とメソッドの定義、インスタンスの作成、ディクショナリの操作を学びます。

コーディング指示

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

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

クラス Song を定義する

  1. コンストラクタ __init__(self, title, artist) を定義し、 titleartist 属性を設定する
  2. メソッド display(self) を定義し、曲のタイトルとアーティストを表示する

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

  1. ユーザーから曲のタイトルとアーティストを入力し、曲を作成する
  2. 作成した曲をディクショナリに追加し、表示する

Python コーディング例

タップしてコード例を表示
# クラス Song を定義
class Song:
    def __init__(self, title, artist):
        # 曲のタイトルとアーティストの属性を設定
        self.title = title
        self.artist = artist

    def display(self):
        # 曲のタイトルとアーティストを表示するメソッド
        print(f"Title: {self.title}, Artist: {self.artist}")

# メインプログラム
# 空のディクショナリを作成
songs = {}

# ユーザーから曲のタイトルとアーティストを入力させる
song_title = input("曲のタイトルを入力してください: ")
song_artist = input("アーティストを入力してください: ")
# Song クラスのインスタンスを作成
song1 = Song(song_title, song_artist)
# 曲をディクショナリに追加
songs[song_title] = song1
# 曲を表示
songs[song_title].display()

Python コーディング問題2: 曲ディクショナリの管理

プログラム説明

曲を複数管理できるようにし、曲をディクショナリに追加・表示できるようにします。

目的

ディクショナリの操作、メソッドの拡張を学びます。

コーディング指示

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

クラス MusicLibrary を定義する

  1. コンストラクタ __init__(self) を定義し、空のディクショナリ library を初期化する
  2. メソッド add_song(self, song) を定義し、曲をディクショナリに追加する
  3. メソッド display_songs(self) を定義し、ディクショナリ内のすべての曲を表示する(for文を使用)

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

  1. ユーザーから曲のタイトルとアーティストを入力させ、複数の曲を作成する
  2. 作成した曲をディクショナリに追加し、表示する

Python コーディング例

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

    def display(self):
        print(f"Title: {self.title}, Artist: {self.artist}")

# クラス MusicLibrary を定義
class MusicLibrary:
    def __init__(self):
        # 曲ディクショナリを初期化
        self.library = {}

    def add_song(self, song):
        # 曲をディクショナリに追加
        self.library[song.title] = song

    def display_songs(self):
        # ディクショナリ内のすべての曲を表示
        for song in self.library.values():
            song.display()

# メインプログラム
music_library = MusicLibrary()
while True:
    # ユーザーから曲のタイトルとアーティストを入力させる
    song_title = input("曲のタイトルを入力してください (終了するには 'exit' と入力): ")
    if song_title.lower() == 'exit':
        break
    song_artist = input("アーティストを入力してください: ")
    # Song クラスのインスタンスを作成し、ディクショナリに追加
    song = Song(song_title, song_artist)
    music_library.add_song(song)

# すべての曲を表示
music_library.display_songs()

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

プログラム説明

曲にアルバムの情報を追加し、詳細な曲クラスを作成します。

目的

クラスの継承、メソッドのオーバーライド、ディクショナリの操作を学びます。

コーディング指示

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

クラス DetailedSong を定義し、Song クラスを継承する

  1. コンストラクタ __init__(self, title, artist, album) を定義し、 titleartistalbum 属性を設定する
  2. メソッド display(self) をオーバーライドし、曲のタイトル、アーティスト、アルバムを表示する

メインプログラムで曲とアルバム情報を追加し、表示する

Python コーディング例

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

    def display(self):
        print(f"Title: {self.title}, Artist: {self.artist}")

# クラス DetailedSong を定義し、Song を継承
class DetailedSong(Song):
    def __init__(self, title, artist, album):
        super().__init__(title, artist)
        self.album = album

    def display(self):
        # メソッドをオーバーライドして曲の詳細を表示
        print(f"Title: {self.title}, Artist: {self.artist}, Album: {self.album}")

# クラス MusicLibrary を定義
class MusicLibrary:
    def __init__(self):
        self.library = {}

    def add_song(self, song):
        self.library[song.title] = song

    def display_songs(self):
        for song in self.library.values():
            song.display()

# メインプログラム
music_library = MusicLibrary()
while True:
    song_title = input("曲のタイトルを入力してください (終了するには 'exit' と入力): ")
    if song_title.lower() == 'exit':
        break
    song_artist = input("アーティストを入力してください: ")
    album_name = input("アルバム名を入力してください: ")
    # DetailedSong クラスのインスタンスを作成し、ディクショナリに追加
    detailed_song = DetailedSong(song_title, song_artist, album_name)
    music_library.add_song(detailed_song)

music_library.display_songs()

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

プログラム説明

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

目的

ディクショナリの操作(削除)とユーザー入力の処理を学びます。

コーディング指示

前問で作成した Song クラス、DetailedSong クラス、MusicLibrary クラスを利用します。

クラス MusicLibrary にメソッド remove_song(self, song_title) を追加する

ディクショナリの del キーワードを使用して曲を削除する

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

ユーザーから削除する曲のタイトルを入力させ、ディクショナリから削除する

Python コーディング例

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

    def display(self):
        print(f"Title: {self.title}, Artist: {self.artist}")

# クラス DetailedSong を定義し、Song を継承
class DetailedSong(Song):
    def __init__(self, title, artist, album):
        super().__init__(title, artist)
        self.album = album

    def display(self):
     print(f"Title: {self.title}, Artist: {self.artist}, Album: {self.album}")

# クラス MusicLibrary を定義
class MusicLibrary:
    def __init__(self):
        self.library = {}

    def add_song(self, song):
        self.library[song.title] = song

    def remove_song(self, song_title):
        # ディクショナリから曲を削除
        if song_title in self.library:
            del self.library[song_title]

    def display_songs(self):
        for song in self.library.values():
            song.display()

# メインプログラム
music_library = MusicLibrary()
while True:
    song_title = input("曲のタイトルを入力してください (終了するには 'exit' と入力): ")
    if song_title.lower() == 'exit':
        break
    song_artist = input("アーティストを入力してください: ")
    album_name = input("アルバム名を入力してください: ")
    detailed_song = DetailedSong(song_title, song_artist, album_name)
    music_library.add_song(detailed_song)

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

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

この記事を書いた人

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

コメント

コメントする

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

目次