내일배움캠프/TIL

[TIL]250110_코드카타, 파이썬 개인과제 6번

dydatablog 2025. 1. 10. 21:14

FACTS :

  •  오전 SQL 코드카타 3문
  • 오전 통계학 VOD 5주차
  •  오후 통계학 VOD 6주차
  •  오후 파이썬 개인과제 6번
  • [ ] 오후 기초 프로젝트 정리

FEELINGS : QCC 3화차를 했는데 난이도가 높아서 멘탈이 갈릴뻔했다. 3문제 만점자는 단 1명밖에 없었다고 한다...

다음주에 다시 처음부터 풀어봐야지. 풀어보면서 느낀 나의 약점은 문제를 읽고 단계별 task를 쪼개서 쿼리를 짜는 연습이 부족하다고 느꼈다.

CLASS 개념이 아직 확실하게 잡하지 않은것 같아서 교재나 추가 자료를 보면서 한번 더 복습해야겠다.

- FINDINGS : LENGTH함수와 CHAR_LENGTH함수의 차이, class

 

79. Big Countries

SELECT name, population, area
FROM WORLD
WHERE area >= 3000000 or population >= 25000000

 

 

80. Article Views I

SELECT author_id as 'id'
FROM Views
WHERE author_id = viewer_id
GROUP BY author_id
ORDER BY author_id

 

 

81.Invalid Tweets

SELECT tweet_id
FROM Tweets
WHERE CHAR_LENGTH(content) > 15

 

LENGTH함수는 BYTE길이를 가져오기 때문에 CHAR_LENGTH을 사용해야 한다.

++ 영문자(1BYTE) 한글은(3BYTE) [ DB캐릭터 셋 방식에 따라 한글의 바이트수는 다를 수 있음 ]

CHAR_LENGTH( 문자/칼럼 )  -  문자/칼럼의 문자 개수를 출력


파이썬 개인과제 문제6 : 파이썬 실시간 세션 3회차 복습

문제6. 고객 데이터 관리 시스템

  1. 출제의도
    • 클래스와 인스턴스에 대한 개념을 이해한다.
    • 클래스의 속성, 메소드를 이해하고 직접 구현할 수 있다.
  2. 배경
  • 당신은 데이터를 관리하는 시스템을 구축하려고 합니다. 각 고객의 이름, 이메일, 포인트 점수를 관리하고, 포인트 점수를 추가하거나 감소 시킬 수 있는 기능이 필요합니다. 각 고객의 이름, 이메일, 포인트 점수를 관리하고, 포인트 점수를 추가하거나 감소 시키는 메소드를 구현하세요.
  1. 요구사항
  • Customer 클래스는 고객의 고객의 이름, ② 이메일, ③ 포인트 점수를 속성으로 가집니다.
  • Customer 클래스를 정의합니다.
  • join_customer , add_points, reduce_points 메소드를 구현합니다.
    • join_customer: 고객의 이름, 이메일, 포인트를 설정합니다. 첫 포인트는 100점을 상수로 받습니다.
    • add_points(amount): 주어진 양만큼 포인트 점수를 추가합니다.
    • reduce_points(amount): 주어진 양만큼 포인트 점수를 감소시킵니다. 단, 포인트 점수가 감소될 때, 포인트 점수가 음수가 되지 않도록 합니다.

4. 실행코드

#확인코드
customer1 = Customer()
customer1.join_customer("Alice", "alice@example.com", 100)
customer1.add_points(50)
customer1.reduce_points(20)
customer1.reduce_points(150)  # 포인트 부족 상황 테스트

 

[중간 과정]

1. 문제의 조건별 task정리

  • Customer 클래스는 고객의 고객의 이름, ② 이메일, ③ 포인트 점수를 속성으로 가집니다.
  • Customer 클래스를 정의합니다.
    • class Customer :
  • join_customer , add_points, reduce_points 메소드를 구현합니다.
    • join_customer: 고객의 이름, 이메일, 포인트를 설정합니다. 첫 포인트는 100점을 상수로 받습니다.
      • def join_customer(self, name, email, point):
                self.name = name
                self.email = email
                self.points = point
    • add_points(amount): 주어진 양만큼 포인트 점수를 추가합니다.
      • def add_point(amount):
                point += amount
                print(f'정상적으로 추가되었습니다. 현재 포인트는 {point}')
    • reduce_points(amount): 주어진 양만큼 포인트 점수를 감소시킵니다. 단, 포인트 점수가 감소될 때, 포인트 점수가 음수가 되지 않도록 합니다.
      • def reduce_point(amount):
                point -= amount
                if point <= 0:
                    print(f'포인트를 모두 사용하였습니다. 현재 포인트는 0')
                elif point > 0:
                    print(f'정상적으로 차감되었습니다. 현재 포인트는 {point}')

-> 위 내용을 class 형식에 맞게 작성

#중간 과정
class Customer :    #class 이름을 Customer로 지정
    def __init__(self): #__init__는 클래스의 인스턴스를 생성될 때 호출되어 초기 속성을 설정. self를 통해 인스턴스 변수를 정의하고, 객체의 상태를 관리
        self.name = ''  
        self.email = ''
        self.points = 0

 

 

__init__ 메서드:

  • 인스턴스가 생성될 때 self.name, self.email, self.points를 초기화합니다.
  • 각 name, email, points를 입력받을 '틀'을 준비
#각 조건에 맞는 함수 작성
def join_customer(self, name, email, point): #고객의 이름, 이메일, 포인트 입력받기
    self.name = name
    self.email = email
    self.points = point

def add_points(self, amount): #포인트 더하기
    self.points += amount
    print(f'정상적으로 추가되었습니다. 현재 포인트는 {self.points}')

def reduce_points(self, amount): #포인트 빼기
    if amount > self.points:
        self.points = 0
        print(f'포인트를 모두 사용하였습니다. 현재 포인트는 {self.points}')
    else:
        self.points -= amount
        print(f'정상적으로 차감되었습니다. 현재 포인트는 {self.points}')
# 실행 코드
customer1 = Customer()
customer1.join_customer("Alice", "alice@example.com", 100)

매개변수 맨 앞에 self가 들어가는 이유: 

예시)

join_customer 메서드가 호출될 때, Python은 customer1 객체를 self로 전달.

그래서 self.name을 통해 customer1의 name 속성에 접근할 수 있다.

#최종 코드
class Customer :
    def __init__(self):
        self.name = ''  
        self.email = ''
        self.points = 0
    
    def join_customer(self, name, email, point):
        self.name = name
        self.email = email
        self.points = point

    def add_points(self, amount):
        self.points += amount
        print(f'정상적으로 추가되었습니다. 현재 포인트는 {self.points}')

    def reduce_points(self, amount):
        if amount > self.points:
            self.points = 0
            print(f'포인트를 모두 사용하였습니다. 현재 포인트는 {self.points}')
        else:
            self.points -= amount
            print(f'정상적으로 차감되었습니다. 현재 포인트는 {self.points}')

https://wikidocs.net/192016

 

__init__과 self

`__init__`은 파이썬에서 클래스의 생성자(constructor) 메소드입니다. 클래스의 인스턴스를 생성할 때 자동으로 호출되며, 인스턴스가 생성될 때 초기화 작업을 수행하…

wikidocs.net