본문 바로가기

programming study/Python

[Teccboi Wonie]코딩 1시간만에 배우기 -Python(2) (2020.12.14)

본 내용은 아래의 강의를 토대로 하여 작성하였습니다.

링크:www.youtube.com/watch?v=M6kQTpIqpLs&list=PLa7Lj786Q-Gts3-LsBl5I56YQrQb4sHxI&index=1

 

1. 강의 내용

자료구조

Python은 세 가지의 자료구조가 있다.

 

1. List

 

 

x = list()
y = []

 

 

리스트는 위처럼 정의할 수 있다.

 

 

x = [1,2,3,4]
y = ["siru","jaemin"]
z = ["hello",1,2,3]

 

 

리스트에는 숫자와 문자열이 들어갈 수 있고 두 가지가 섞여서 들어갈 수 도 있다. 리스트의 각 자리는 0부터 카운트한다.

리스트의 특정 자리에 다른 값을 넣고 싶으면

 

 

x[1] = 10

 

 

을 입력한다. 그 결과, 본래 x의 1번째 자리인 2가 10으로 바뀐다. 이를 assignment라고 한다.

 

 

num_elements=len(x)
print(num_elements)

 

 

len은 리스트의 길이를 출력해 준다. 정의한 리스트 x는 총 4개의 값이 있으므로 4가 출력된다.

 

 

x = [4,2,3,1]

y = sorted(x)
print(y)

 

 

불규칙한 리스트 x는 sorted에 의해 오름차순으로 정렬이 되어 변수 y에 들어가고 1,2,3,4가 출력된다.

 

 

z = sum(x)
print(z)

 

 

리스트 x의 합은 함수 sum으로 구할 수 있다. 

 

 

for n in x:
 print(n)

 

 

for문으로 리스트의 값들을 뽑아올 수 있다. 4,2,3,1이 출력된다.

 

 

x = [4,2,3,1]
y = ["hello","there"]

print(x.index(3))
print(y.index("hello"))

 

 

인덱스 함수는 입력한 인자가 해당 배열에 몇 번째 자리에 있는지 물어본다. 위 명령어의 결과는 아래와 같다.

 

index

만약, 해당 값이 있는지를 Boolean으로만 출력하고 싶다면

 

 

if "hello" in y:
	print("hello가 있어요")

 

 

라고 입력한다. y리스트에는 "hello"가 있으므로 문구가 출력될 것이다. 

 

2.Tuple

 

 

x = tuple()
y = ()

 

 

튜플은 위처럼 정의할 수 있다. list의 대부분의 함수를 사용할 수 있다. 하지만, 가장 큰 차이점이 있는데, 튜플에서는 Assignment가 안된다는 것이다. 즉, 리스트는 mutable(가변), 튜블은 immutable(불변)의 특징을 가진다.

 

3. Dictionary

 

 

x = dict()
y ={}

 

 

딕셔너리는 위 처럼 정의한다. 딕셔너리는 key와 value가 짝지어져 있는 자료구조이다.

 

 

x = {
	0 : "greedysiru",
    "name" : "재민",
    "cat" : "시루"
}

print(x)
print(x["name"])
print(x["cat"])

 

 

딕셔너리

 

print에 각각의 key를 넣어주니 value가 나온 것을 볼 수 있다. 이때, key는 숫자와 문자열 같은 불변인 데이터만 들어갈 수 있다.

 

key와 value를 동시에 출력할 수 있다. 아래의 명령어를 보자.

 

 

 

x = {
	0 : "greedysiru",
    "name" : "재민",
    "cat" : "시루"
}

for key in x:
	print("key :" + str(key))
    print("value :" + str(x[key]))

 

 

key와 value

딕셔너리 또한 Assignment가 가능하다. 원래 있는 값을 바꾸거나 새로운 값도 넣을 수 있다. 아래의 첫째가 변경, 둘째가 추가이다.

 

 

x[0] = "siru"
x["school"] = "SNUST"

 

 

과일 세는 프로그램 만들기

리스트와 딕셔너리, for문으로 과일을 세는 프로그램을 만들 수 있다. 설명은 코드 주석에 적어놓았다.

 

 

fruit = ["사과","사과","바나나","바나나","딸기","키위","복숭아","복숭아","복숭아"] # 리스트 fruit에 과일 데이터가 있다.

d={}              # 빈 딕셔너리 d를 생성. 

for f in fruit:    # 변수 f는 리스트 fruit의 elements를 하나씩 뽑아온다. 이하 for문의 번호는 회차 수.
  if f in d:       # 1. 딕셔너리 d에 "사과"가 있는가? 거짓 2. 딕셔너리 d에 "사과"가 있는가? 참 
    d[f]=d[f] + 1  # 2. 참이므로 딕셔너리의 value에 1을 더한다.
  else:            # 1. 거짓이므로 딕셔너리에 key "사과"를 넣고 value 1을 넣는다.
    d[f] = 1

print(d)

 

 

과일 세기

 

Class와 Object

클래스는 함수와 변수들의 합을 말한다. 오브젝트는 클래스 이용해서 만들어낸 물체라고 한다. 클래스를 빵틀이라고 한다면, 오브젝트는 빵틀에 의해서 만들어진 빵이라고 할 수 있다.

 

 

class Person:
  def __init__(self,name,age):
    self.name = name
    self.age = age
  def introduce(self):
    print("내 이름은 " + self.name + " 그리고 나는 " + str(self.age) + " 살이야")

jamin = Person("재민", 28)
siru = Person("시루", 3)
bob = Person("밥", 29)
james = Person("제임스", 40)

jamin.introduce()
siru.introduce()
bob.introduce()
james.introduce()

 

 

명령어를 하나하나 해석해보면, class Person:으로 Person이라는 클래스를 생성했다. 그리고 Person 안에는 두 가지의 함수가 있다. 이 중에서 __init__(self, name, age): 는 Object를 생성할 시 자신(self)의 인자 (name, age)를 사용해서 self.name과 self.age에 각각 그 값들을 넣는 함수다. introduce(self):는 별도의 인자 없이 실행하면 입력했던 인자들을 기반으로 소개문을 생성해내는 함수이다.

jaemin = Person("재민", 28) 은 jaemin이라는 Object를 "재민"과 28의 인자를 넣어서 생성한다는 뜻이다. 이 클래스와 함수들의 결과는 아래와 같다.

 

 Class & Object

 

Inheritance(상속)

클래스를 새로 추가할 때, 기존에 있는 클래스의 함수들을 물려받을 수 있다.

 

 

class Person:
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def say_hello(self, to_name):
    print("안녕! " + to_name + " 나는 " + self.name)
  
  def introduce(self):
    print("내 이름은 " + self.name + " 그리고 나는 " + str(self.age) + " 살이야")

class Police(Person):
  def arrest(self, to_arrest):
    print("넌 체포됐다, " + to_arrest)

class Programmer(Person):
  def program(self, to_program):
    print("다음엔 뭘 만들지? 아 이걸 만들어야겠다: " + to_program)

jaemin = Programmer("재민",28)
bob = Person("밥", 29)
James = Police("제임스", 40)

jaemin.program("인스타그램")
James.arrest("시루")

 

 

이렇게 , jaemin이란 Object는 생성 시에 Programmer라는 Class를 사용했지만 이 Classs는 기존의 Person을 상속하므로 Person의 하위 함수들을 이용할 수 있고 더해서, Programmer만의 하위 함수를 사용할 수 있다.

 

패키지 & 모듈

패키지란, 어떤 기능들을 구현하는 모듈의 합이다. 라이브러리와 같다고 보면 된다. 패키지는 코드를 공유, 정리할 수 있고 다른 사람의 공유된 것을 가져와 활용할 수 있다.

모듈은 코드를 잘 모아서 기능 하나를 구현해 놓은 파일을 말한다. 

 

예시로, animal이라는 패키지를 만든다.

우선, animal이라는 별도의 폴더를 만든다. 그리고 그 하위에 dog.py와 cat.py 파일을 만들고 명령어는 아래와 같이 입력한다.

 

 

# cat.py
class Cat:
	def hi(self):
    print("meow")
    
# dog.py
class Dog:
	def hi(self):
    print("bark")
    

 

 

그리고 마지막으로 __init__.py 명의 파일을 만들어 준다. 이 파일은 패키지를 설명하는 모듈을 가져오는 역할을 한다. 아래 두줄의 명령어를 작성한다.

 

 

from.cat import Cat # .cat 파일(cat.py)에서 Cat이라는 클래스 가져오기
from.dog import Dog

 

 

이제 main.py(다른 파일)에서 패키지를 불러올 수 있다.

 

 

from animal import dog # aninmal 패키지에서 dog모듈 불러오기
from animal import cat

d = dog.Dog()
d.hi()

c = cat.Cat()
c.hi()

 

 

패키지 불러오기

 

여기서, 명령어를 더 간략하게 할 수 있다.

 

 

from animal import * # animal 패키지가 가지고 있는 모듈을 다 가져온다.

d = Dog()
c = Cat()

d.hi()
c.hi()

 

 

2. 느낀 점

전에, JavaScript를 배우면서 클래스와 오브젝트를 잠깐 배운 적이 있었는데 정말 아무리 공부하고 복습했어도 이해가 되지 않았었다. 오늘 Python강의에서도 클래스와 오브젝트를 배웠는데 처음엔 역시 좌절하였다. 하지만, 코드를 다시 작성해보고 강의를 복습해보니, 강의 내용에 한해서 완벽하게 이해했다. 직접 활용을 많이 해봐서 효용을 느껴야겠지만, 한 고비를 넘긴 것 같아서 흡족하다.

 

3. 명령어

x = list()

x = []

리스트 넣기

 

x = tuple()

x = ()

튜플 넣기

 

x = dict()

x={}

딕셔너리 넣기

 

len(x)

리스트의 길이

 

sorted(x)

리스트 정렬

 

sum(x)

리스트의 합

 

x.index(3)

인덱스. x리스트에 3이 몇 번째 자리에 있는지

 

x(key)

딕셔너리에서 해당 key의 value를 출력

 

print(x.keys())

x딕셔너리의 key 전체 출력

 

print(x.values())

x 딕셔너리의 value 전체 출력

 

from a import b

a로부터 b 가져오기