Python(3) Class 구현 연습문제

hyeeun·2025년 2월 9일

bootcamp

목록 보기
6/22
post-thumbnail

1. 영화정보 class

  • 클래스명 : Moive
  • 속성
    • title : 영화제목
    • director : 감독
    • genre : 영화장르
    • rating : 영화 평점 목록
  • 메서드
    • get_movie_info : 영화정보 출력
    • add_rating : 평점 추가
    • get_average_rating : 영화의 평점의 평균 출력
class Movie:
    def __init__(self, title, director, genre):
        self.title = title
        self.director = director
        self.genre = genre
        self.ratings = []  # 평점 리스트 초기화

    def get_movie_info(self):
        # 영화의 정보를 출력하는 메소드
        return f"Title: {self.title}\nDirector: {self.director}\nGenre: {self.genre}"

    def add_rating(self, rating):
        # 평점을 추가하는 메소드 (0 ~ 10 사이의 값)
        if 0 <= rating <= 10:
            self.ratings.append(rating)
        else:
            print("Rating should be between 0 and 10.")

    def get_average_rating(self):
        # 평균 평점을 계산하는 메소드
        if self.ratings:
            return sum(self.ratings) / len(self.ratings)
        else:
            return "No ratings yet."

movie = Movie("Inception", "Christopher Nolan", "Sci-Fi")
print(movie.get_movie_info())

# 평점 추가
movie.add_rating(9)
movie.add_rating(8.5)
movie.add_rating(9.5)

# 평균 평점 출력
print(f"Average Rating of {movie.title}: {movie.get_average_rating()}")


2. 게시판 class

  • 클래스명 : Board
  • 속성
    • title : 게시글의 제목
    • content : 게시글의 내용
    • author : 게시글의 작성자
  • 메서드
    • create_post : 게시글 추가
    • delete_post : 게시글 삭제
    • update_post : 게시글의 내용 수정
class Board:
    def __init__(self):
        self.posts = []

    def create_post(self, title, content, author):
        post = {
            'title': title,
            'content': content,
            'author': author
        }
        self.posts.append(post)
        print(f"게시글 '{title}'이(가) 추가되었습니다.")

    def delete_post(self, title):
        for post in self.posts:
            if post['title'] == title:
                self.posts.remove(post)
                print(f"게시글 '{title}'이(가) 삭제되었습니다.")
                return
        print(f"'{title}' 제목의 게시글을 찾을 수 없습니다.")

    def update_post(self, title, new_content):
        for post in self.posts:
            if post['title'] == title:
                post['content'] = new_content
                print(f"게시글 '{title}'이(가) 수정되었습니다.")
                return
        print(f"'{title}' 제목의 게시글을 찾을 수 없습니다.")

board = Board()

# 게시글 추가
board.create_post("첫 번째 게시글", "이것은 첫 번째 게시글입니다.", "홍길동")
board.create_post("두 번째 게시글", "이것은 두 번째 게시글입니다.", "김철수")

# 게시글 출력
board.display_posts()

# 게시글 수정
board.update_post("첫 번째 게시글", "수정된 첫 번째 게시글 내용입니다.")

# 게시글 삭제
board.delete_post("두 번째 게시글")

# 게시글 출력
board.display_posts()


3. 상영관 class

  • 클래스명 : Cinema
  • 속성
    • title : 영화제목
    • number : 영화상영관 번호
    • seats : 상영관 자리 번호 (1부터 50)
  • 메서드
    • add_movie(title,number) : 상영영화 추가
    • reserve_seat(title) : 좌석예약을 하면 seats에서 할당, 자리가 없을 경우 "매진"이라고 출력
class Cinema:
    def __init__(self):
        self.movies = {}

    def add_movie(self, title, number):
        """
        상영 영화를 추가하는 메서드.
        title: 영화 제목
        number: 영화 상영관 번호
        """
        # 상영관 번호에 해당하는 영화 제목과 50개의 좌석 리스트를 초기화
        if title not in self.movies:
            self.movies[title] = {
                'number': number,
                'seats': [False] * 50  # 50개의 좌석, False는 비어있음을 의미
            }
            print(f"영화 '{title}'이(가) 상영관 {number}번에 추가되었습니다.")
        else:
            print(f"영화 '{title}'은(는) 이미 상영 중입니다.")

    def reserve_seat(self, title):
        """
        영화 제목을 기준으로 좌석 예약을 진행.
        좌석이 없으면 '매진'이라고 출력.
        """
        if title not in self.movies:
            print(f"'{title}' 영화는 상영되지 않습니다.")
            return

        movie = self.movies[title]
        for i in range(len(movie['seats'])):
            if not movie['seats'][i]:  # 좌석이 비어있으면
                movie['seats'][i] = True  # 해당 좌석을 예약 처리
                print(f"'{title}' 영화의 {i+1}번 좌석이 예약되었습니다.")
                return

        # 만약 좌석이 모두 예약되었으면
        print(f"'{title}' 영화는 매진되었습니다.")

cinema = Cinema()

# 영화 추가
cinema.add_movie("Avatar", 1)
cinema.add_movie("Titanic", 2)

# 좌석 예약
cinema.reserve_seat("Avatar")  # 첫 번째 좌석 예약
cinema.reserve_seat("Avatar")  # 두 번째 좌석 예약
cinema.reserve_seat("Titanic")  # Titanic 영화 첫 번째 좌석 예약
cinema.reserve_seat("Avatar")  # Avatar 영화 세 번째 좌석 예약

# 매진 테스트 (모든 좌석을 예약한 후 다시 시도)
for _ in range(48):  # 48번 좌석까지 예약
    cinema.reserve_seat("Avatar")
cinema.reserve_seat("Avatar")  # 더 이상 좌석이 없을 때
profile
hyeeun-techlog

0개의 댓글