객체 지향 프로그래밍 시작하기

객체란?

객체란? 속성과 행동으로 이뤄진 존재입니다. 다시 말해서, 이 세상에 존재하는 모든 것들, 모든 것들이 객체가 될 수 있다.

객체지향 프로그래밍이란?

정의: 프로그램을 여러 개의 독립된 객체들과 그 객체들 간의 상호작용으로 파악하는 프로그래밍 접근법이다.
요약: 프로그램을 객체들과 객체들 간 소통으로 바라보는 것

객체지향적으로 설계했다 -> 모델링했다.
객체지향프로그래밍으로 프로그램을 만들려면

  1. 프로그램에 어떤 객체들이 필요한지 정한다.
  2. 객체들의 속성과 행동을 정한다.
  3. 객체들이 서로 어떻게 소통할지 정한다.

객체를 만드는 법

클래스와 인스턴스

객체의 틀을 만들어서 객체를 만든다.
객체의 틀 = 클래스 / 결과물 = 객체
클래스로 객체를 만든다. 클래스로 인스턴스를 만든다. (객체 = 인스턴스)

class User:
    pass

# 서로 다른 인스턴스
user1 = User()
user2 = User()
user3 = User() 
인스턴스 변수
# 인스턴스 변수 정의하기
# 인스턴스이름.속성이름 = '속성에 넣을 값'

user1.name = '김대위'
user1.email = 'captain@codeit.kr'
user1.password = '12345'

user2.name = '강영훈'
user2.email = 'younghoon@codeit.kr'
user2.password = '98765'

user3.name = 'jake'
user3.email = 'jake@codeit.kr'
user3.password = '78965'
# 인스턴스 변수 사용하기 # 인스턴스이름.인스턴스변수이름 print(user1.email) print(user2.password)
인스턴스 메소드
인스턴스 메소드의 특별한 규칙
self사용하기
인스턴스 변수와 같은 이름을 갖는 파라미터
int메소드
str메소드
클래스변수
클래스메소드

미리 알아야 할 것들

객체 만들기 연습

객체 지향 프로그래밍 직접 해보기


파이썬 모듈 맛보기

모듈
# 같은 폴더 안에 있는 파일만 불러올 수 있음. 이를 모듈이라고 지칭한다.
# calculator 라는 모듈을 calc라 지칭해서 사용하겠다.
import calculator as calc 

# 모듈 사용 법
print(calc.add(2, 5))
print(calc.multiple(3, 4))


# 칼큘레이터 모듈에서 저 함수만 가져와서 사용한다는 뜻
from calculator import add, multiple 
print(add(2,5))
print(multiple(3,4))
스탠다드 라이브러리
# standard library

# 수학 관련 기능들을 모아 놓은 라이브러리
import math

print(math.log10(100))
print(math.cos(0))
print(math.pi)

# 랜덤 값을 만들고 싶을 때 사용하는 라이브러리
import random
print(random.random())

# Operating System (운영체제)
import os

print(os.getlogin())
print(os.getcwd())

사용자 입력 받기

input

사용자의 입력을 받기 위해서는 input()함수를 사용하면 됩니다.

name = input("이름을 입력하세요: ")
print(name)

파일 읽고 쓰기

파일 읽기
파일 쓰기
strip

화이트스페이스를 제거하는 함수

split
#split
full_name = "Kim, Yuna"
print(full_name.split(', '))

프로젝트 : 로또 시뮬레이션

프로젝트 : 숫자 야구

 

리스트

리스트

리스트에서 요소의 위치를 인덱스라고 하며, 인덱스를 통해 요소를 받아 오는걸 '인덱싱'이라고 합니다.
리스트의 인덱스는 0번부터 시작합니다. *추가로 인덱스는 -를 사용하여서 인덱싱할 수 있습니다.

# List (리스트)
numbers = [2,3,4,5,6,7,11]
names = ['jake','성재','KIM']

print(numbers)
print(names)

# Indexing (인덱싱)
print(names[1])
print(names[0] + names[1] + names[2])
print(numbers[1] + numbers[3])

# List Slicing (리스트 슬라이싱)
numbers[0:4] # 인덱스 0부터 3까지 짜른다.
print(numbers[0:4])
print(numbers[:3])
print(numbers[2:5])

# 인덱스 변경하기
print(numbers)
numbers[0] = 7
print(numbers)
리스트 함수
# 리스트 길이 재기
# len
print(len(numbers))
lists = []
# 인덱스 추가하기 
# append
lists.append(5)
lists.append(8)
print(lists)
print(len(lists))
# 인덱스 삭제하기
# del
numbers = [2,3,4,5,6,7,11]
del numbers[3] # 인덱스 3번 삭제
print(numbers)
# 특정 위치에 인덱스 삽입하기
numbers.insert(4, 37)
print(numbers)
리스트 정렬
# 리스트 정렬
numbers = [19, 13, 2, 5, 3, 11, 7, 17]
# 방법1 sorted
# sorted함수는 기존 리스트는 건드리지 않고, 정렬된 새로운 리스트 리턴 
new_list = sorted(numbers)
print(numbers)
print(new_list)
# 방법1-1 reverse
new_list = sorted(numbers, reverse=True)
print(new_list)

# 방법2 sort
# sort함수는 아무것도 리턴하지 않고, 기존 리스트 정렬
print(numbers.sort()) # None
numbers.sort()
print(numbers)
numbers.sort(reverse=True)
print(numbers)

for반복문

for 반복문

while 반복문과 for반복문은 상황에 따라 맞는 깔끔한 코드를 쓸 수 있다.

# for 반복문
# for i in []:
#     수행부분

Range 함수

range는 파라미터 1, 2, 3 버전이 있습니다.
range함수의 장점은 간편하고, 깔끔하다는 점 / 컴퓨터의 메모리를 효율적으로 사용한다는 점입니다.

사전

여러 값을 모아 놓을 수 있는 자료형으로, 파이썬에서는 사전(dictionary)이 있습니다. "key-value pair"
리스트와 사전의 차이점은 순서라는 개념차이가 있고, 사전의 키는 정수형일 필요가 없습니다.

# 사전 (Dictionary)
# key-value Pair

my_dictionary = {
    5: 25,
    2: 4,
    3: 9
}

print(type(my_dictionary))

print(my_dictionary[3])
print(my_dictionary[5])

# 사전 값 추가
my_dictionary[9] = 81
print(my_dictionary)

my_family = {
    '나': 'jake',
    '회사': 'codeit'
}

print(my_family)

사전 활용
# 사전 활용법

my_family = {
    '엄마': '김자옥',
    '아빠': '이석진',
    '아들': '이동민',
    '딸': '이지영'
}

print('성태호' in my_family.values())

for value in my_family.values():
    print(value)
for key in my_family.keys():
    print(key) 

for key in my_family.keys():
    value = my_family[key]
    print(key, value)

for key, value in my_family.items():
    print(key, value)

파이썬 데이터의 비밀

Aliasing (가명: alias)

파이썬에서 어떤 값을 변수에 저장하면 이름표를 주는 것과 같습니다.

리스트와 문자열

리스트와 문자열은 매우 유사한 구조를 가지고 있습니다. 리스트는 어떤 자료형을 나열한 것이라면, 문자열은 문자를 나열한 것이라고 볼 수 있습니다.

  1. 리스트의 인덱싱처럼, 문자열도 인덱싱을 할 수 있습니다.
  2. 리스트 슬라이싱처럼, 문자열도 슬라이싱을 할 수 있습니다.
  3. 문자열을 연결하듯, 리스트도 연결할 수 있습니다.
  4. len함수로 리스트의 길이를 확인할 수 있는 것처럼, len함수로 문자열의 길이를 확인할 수 있습니다.

다른점

  1. 리스트는 특정 인덱스를 변경할 수 있는데, 문자열은 특정 인덱스를 변경할 수 없습니다.

  1. 학점 계산기

학생들에게 최종 성적을 알려 주는 '학점 계산기'를 만들려고 합니다.

이 수업에는 50점 만점의 중간고사와 50점 만점의 기말고사가 있는데요. 두 시험의 점수를 합해서 최종 성적을 내는 방식입니다. 규칙은 다음과 같습니다.

  • A: 90점 이상
  • B: 80점 이상 90점 미만
  • C: 70점 이상 80점 미만
  • D: 60점 이상 70점 미만
  • F: 60점 미만

print_grade 함수는 파라미터로 중간고사 점수 midterm_score와 기말고사 점수 final_score를 받고, 최종 성적을 출력합니다.

def print\_grade(midterm\_score, final\_score):  
    total = midterm\_score + final\_score  
    # 여기에 코드를 작성하세요  
    if total >= 90:  
        print("A")  
    elif total >= 80:   
        print("B")  
    elif total >= 70:  
        print("C")  
    elif total >= 60:  
        print("D")  
    else:  
        print("F")  
# 테스트 코드  
print\_grade(40, 45)  
print\_grade(20, 35)  
print\_grade(30, 32)  
print\_grade(50, 45)
  1. 이상한 수학 문제 1
    while문과 if문을 활용하여, 100 이하의 자연수 중 8의 배수이지만 12의 배수는 아닌 것을 모두 출력하세요.
    예를 들어서 16은 8의 배수이지만 12의 배수가 아니니까 조건에 부합합니다. 하지만 48은 8의 배수이면서 12의 배수이기도 해서 조건에 부합하지 않습니다.
    실행하면 콘솔에 아래와 같이 출력되어야 합니다.

    i = 1
    while i <= 100:
     if i % 8 == 0 and i % 12 != 0:
         print(i)
     i += 1
  2. 이상한 수학 문제 2
    10보다 작은 2 또는 3의 배수는 2, 3, 4, 6, 8, 9이며, 이들의 합은 32입니다.
    while문과 if문을 활용하여, 1,000보다 작은 자연수 중 2 또는 3의 배수의 합을 출력하는 프로그램을 써 보세요.

    total = 0;
    i = 1
    

while i < 1000:
if i % 2 == 0 or i % 3 == 0:
# print(i) #2 3 4 6 8 9
total += i
i += 1

print(total)


3. 약수 찾기
정수 n의 약수는 n을 나누었을 때 나누어 떨어지는 수입니다. 만약 정수 i가 정수 n의 약수라면, n을 i로 나누었을 때 나머지가 0이 나와야 하는 거죠.
정수 120의 약수를 모두 출력하고, 총 몇개의 약수가 있는지 출력하는 프로그램을 써 보세요. 아래처럼 콘솔에 출력되어야 합니다.
```py
count = 0
i = 1

while i <= 120:
    if 120 % i == 0:
        print(i)
        count += 1
    i += 1


print("120의 약수는 총 {}개입니다".format(count))
  1. 택이의 우승 상금
    1988년 쌍문동에 사는 택이는 바둑 대회 우승 상금으로 5,000만원을 받았습니다. 하지만 바둑 외에는 아는 게 없으니, 이웃 어른들에게 이 돈으로 무엇을 해야 할지 물어보기로 하였습니다.
    은행에서 근무하는 동일 아저씨는 은행에 돈을 맡겨서 매년 이자로 12%씩 받는 것을 추천하셨습니다. 1년 후인 1989년에는 5,000만원의 12% 이자인 600만원이 더해져 5,600만원이 된다고 하면서요.
    이 이야기를 들은 미란 아주머니는 고작 12% 때문에 생돈을 은행에 넣느냐며, 얼마 전 지어진 은마아파트를 사라고 추천하셨습니다. 당시 은마아파트의 매매가는 5,000만원이었죠.
    2016년 기준 은마아파트의 매매가는 11억원인데요. 1988년 은행에 5,000만원을 넣었을 경우 2016년에는 얼마가 있을지 계산하여, 동일 아저씨와 미란 아주머니 중 누구의 말을 듣는 것이 좋았을지 판단해 보세요. 2016년 은행에 얼마가 있을지는 꼭 while문을 사용해서 계산해 주세요!
    2016년에 은행에 저축해 둔 금액이 더 크면, *원 차이로 동일 아저씨 말씀이 맞습니다.가 출력되도록 하세요. 반대로 은마아파트의 가격이 더 크면, *원 차이로 미란 아주머니 말씀이 맞습니다.가 출력되도록 하세요. 여기서는 꼭 if문을 사용해 주세요!
prize_money = 50000000
old_year = 1988
new_year = 2016
apartment_price = 1100000000

while old_year < new_year:
    prize_money = prize_money * 1.12
    old_year += 1

if prize_money >= apartment_price:
    print("{: .0f}원 차이로 동일 아저씨 말씀이 맞습니다.".format(prize_money - apartment_price))
else :
    print("{: .0f}원 차이로 미란 아주머니 말씀이 맞습니다.".format(apartment_price - prize_money))
  1. 피보나치 수열 **

  2. 구구단
    while문을 사용해서 구구단 프로그램을 만들어 봅시다. 실행하면 아래와 같은 결과물이 출력되어야 합니다.

    i = 1
    j = 1
    

while i <= 9:
while j <= 9:
print("{} * {} = {}".format(i, j, i*j))
j += 1
i += 1
j = 1

```

+ Recent posts