[내배캠 AI코스] TIL

내일배움캠프 6일차 TIL - 파이썬 기초(1)

띵제 2024. 2. 22. 20:58

 

오늘 들은 강의 : 

 

파이썬 문법 기초 강의 

 

 

1-1. 파이썬 문법 뽀개기 - 기초

 

1. 수업의 목적

 

파이썬 문법을 보다 체계적으로 이해, 빠르게 이론을 습득하고 퀴즈로 숙달하게 만듦.

향후 마주칠 난이도 있는 문법들을 눈으로, 손으로 먼저 경험해봄.

 

스파르타의 철학은 기본만 익히고 찾아가며 하는 것이 코딩.

본 강의로 문법을 완전히 숙달하고 코딩을 시작하겠다는 마음가짐 보다는

어디까지나 ‘보조자료’로서 활용해야 함.

 

2. 배우는 순서

- 기초적인 문법을 차근차근

- 퀴즈를 풀며 익숙해지기

- 약간 심화된 문법/쓰임새들

 

1-2. 파이썬 시작하기

 

1. 파이썬을 설치한다는 것의 의미 ; 일종의 번역팩을 설치하는 것.

컴퓨터는 10101101과 같은 전기 신호만 인식할 수 있음.

파이썬 문법을 통해 컴퓨터 언어인 10101101으로 변환해주는게 프로그래밍 언어.

그런 번역 패키지중 하나가 바로 파이썬.

네덜란드의 프로그래머 Guido van Rossum이 '읽기 쉬운 코드'에 중점을 두어 

개발한 프로그래밍 언어입니다.

- 초보자가 배우기 좋은 언어. 읽기 쉽게 만듦.

- 무료 / 오픈 소스로 운영되고 커뮤니티가 크기 때문에 자연어처리, 머신러닝 등 

직접 구현하기 어려운 기능들도 다른 개발자의 라이브러리를 이용해 쉽게 코드를 작성할 수 있음.

 

2. 파이참에서 새 프로젝트 만들기

 

강의 버전이랑 달라서 보이는 화면에 차이가 있어 잠시 헤맸지만,

잘 세팅을 하고 파이썬 파일을 생성해주었다.

 

hello.py 파일을 생성해주고 나서,

냅다 print(‘hello sparta’) 를 입력한뒤 실행해준다.

 

그러면 밑 부분에

 

이렇게 실행된 것을 확인할 수 있다.

창 안에 저 초록색 실행 버튼이 두 군데 있지만, 저 버튼을 누르면 자칫 다른 파일이 실행될 수가 있으니

되도록이면 마우스 우클릭을 통해 실행하도록 한다.

 

파이썬 문법을 시작하기에 앞서,

절대 전부 다 외우려고 하지 말고 인터넷을 찾아서 보는 습관을 기르자!

 

1-3. 변수 선언과 자료형

 

1. 변수 선언

- 파이썬에서 새 변수를 만들 땐 변수이름 = 값의 형태로 씀.

따라서 a=b 와 b=a 는 같지 않다.

출력할 때는 print().

 

a = 3   # 3을 a에 넣는다.

print(a)

 

b = a   # a에 들어있는 값인 3을 b에 넣는다.

print(b)

 

a = 5   # a에 5라는 새로운 값을 넣는다.

print(a,b)   # 5, 3

 

2. 숫자형 자료형

자료형이란 프로그래밍을 할 때 쓰이는 숫자, 문자열 등 자료 형태로 사용하는 모든 것.

파이썬에서 어떤 값을 쓰는지 알아야 코딩을 할 수 있다.

 

다양한 형태의 숫자를 쓸 수 있고, 숫자 간에 사칙연산도 가능.

 

a = 7

b = 2

 

a+b   # 9 

a-b   # 5

a*b   # 14

a/b   # 3.5

 

a+3*b         # 13 (여러 연산이 들어가면 사칙연산 순서대로)

(a+3)*b       # 20 (괄호 안 연산 먼저-사칙연산이랑 아예 똑같음)

 

변수에 저장된 값에 연산을 한 후 다시 그 값을 같은 변수에 저장할 수 있다.

 

a = 5

a = a + 3 # 5에 3을 더한 값을 다시 a에 저장

print(a)  # 8

 

a += 3    # 줄여 쓸 수도 있다. 같은 의미!

 

다른 연산이 하고 싶다면 (예를 들어 제곱과 같은) 구글링을 해서 찾는다.

 

a//b  # 3 (몫)

a%b   # 1 (나머지)

a**b  # 49 (거듭제곱)

 

문자열은 따옴표를 이용해 a = ‘Jaymi’ 이렇게 쓴다.

변수를 쓰고 싶다면, 예를 들어 조건문을 쓸 때는 a = True , a = 3 > 2 이렇게 사용할 수도 있다.

변수라는 건 컴퓨터 입장에서 봤을 때 값이 담긴 위치를 가리키는 것

변수는 메모리에 올려져 있는 값들을 가리키고 있다.

컴퓨터가 기억하고 있는 메모리 공간을 변수가 가리키고 있다.

 

3. Bool 자료형

특별한 자료형으로 참/거짓을 나타내는 것을 불(Boolean) 자료형이라고 한다.

 

x = True   # 참

y = False  # 거짓

 

# 소문자로 쓰면 자료형이 아닌 변수라고 인식되어 에러가 난다.

z = true   # name 'true' is not defined

 

True = 1   # True/False는 변수명으로 쓸 수 없다.

 

보통 아래처럼 ‘비교연산자’의 결과로 나타내기 위해 쓰임

 

4 > 2      # True  크다

5 < 1      # False 작다

6 >= 5     # True  크거나 같다

4 <= 4     # True  작거나 같다

3 == 5     # False 같다

4 != 7     # True  같지 않다

 

불 자료형에는 논리 연산자를 이용할 수 있다.

 

a = 4 > 2  # True

not a      # False    NOT 연산자로 참을 거짓으로, 거짓을 참으로 바꿔준다.

 

a and b    # False    AND 연산자로 모두 참이어야 참을 반환한다.

a or b     # True     OR 연산자로 둘 중 하나만 참이면 참이다.

 

 

Q. 숫자들의 평균 구하기

 

a = 24

b = 16

c = 26

 

얘네들의 평균을 구해보자.

구글링으로 파이썬 평균 구하기 검색, 다양한 방법들이 나온다.

 

그 중 가장 간단한 것이 sum을 이용하는 방법인 듯 하다.

 

sum([리스트]) 리스트 안에 있는 숫자들의 합을 구한 뒤

평균을 구하면 되겠다.

 

…구글링해서 나온 코드를 그냥 냅다 따라했는데

얼추 뭔 소린지 알겠으나 속속들이 알진 못하겠다;;

- len(arr) ; 리스트의 총 갯수를 나눔

 

어쨌든 실행시키면

 

 

짠, 이렇게 평균값이 나왔다.

하지만,

강의 퀴즈 풀이에는 겁나 단순하게 적혀있다.

 

print((a+b+c)/3)

 

…넘어가도록 하자.

 

1-4. 문자열 다루기

 

1. 문자열

 

1) 문자열 기초

큰/작은 따옴표를 이용해 ‘글’도 데이터로 사용 가능하다.

따옴표로 표시해주지 않으면 변수로 인식될 수 있으니 꼭 빼먹지 말기.

큰 따옴표나 작은 따옴표 차이는 없다.

 

a = 1  -> 숫자열

b = “a”  -> 문자열

c = a  -> c는 a라서 1

 

print(a, b, c) 

 

이러면 값은 1 "a" 1

 

print("I'm happy :)")

 

이러면 값은 I'm happy :)

 

 

2) 문자열 연산

 

문자열 + 문자열은 두 글자가 합쳐진 결과가 나온다.

 

first_name = "Harry"

last_name = "Potter"

 

first_name + last_name  # HarryPotter

first_name + " " + last_name  # Harry Potter

 

a = "3"

b = "5"

a + b    

 

그러면 3이라는 문자열과 5라는 문자열이 합쳐진 35라는 문자열이 나옴.

 

그런데 숫자열과 문자열을 더한다면?

 

에러가 난다.

 

숫자열과 문자열을 더하라니 그게 무슨 소리야? ??

컴퓨터가 이해를 못하는 것이다.

 

다른 경우를 살펴보자.

 

스트링함수는 괄호 안의 값이 문자열이라는 소리다.

그러면 결과는 에러 없이 '22'라고 나온다.

 

문자열 + 문자열이니까,,

 

문자열의 길이는 len() 함수를 써서 구할 수 있다.

 

 

asdf라는 문자열의 길이를 구하면 값은 4로 찍힌다.

아래의 경우들도 마찬가지이다.

 

print(len("abcde"))           # 문자가 5개니까 결과 : 5

print(len("Hello, Sparta!"))  # 14

print(len("안녕하세요."))      # 6

 

이렇게 특정 자료형 뒤에 . 을 붙이고 쓰는 내장 함수들을 ‘method’라고 함

- 모든 알파벳을 대문자/소문자로 바꾸기

 

sentence = 'Python is FUN!'

 

sentence.upper()  # PYTHON IS FUN!

sentence.lower()  # python is fun!

 

- 특정 문자를 기준으로 문자열을 나누기

 

# 이메일 주소에서 도메인 'gmail'만 추출하기

myemail = 'test@gmail.com'

 

result = myemail.split('@') 

 

—>[‘test','gmail.com'] (뒤에 배울 '리스트'라는 자료형이에요 :))

 

result[0] # test (리스트의 첫번째 요소)

result[1] # gmail.com (리스트의 두 번째 요소)

 

result2 = result[1].split('.') # ['gmail','com']

 

result2[0] # gmail -> 우리가 알고 싶었던 것

result2[1] # com

 

# 한 줄로 한 번에!

myemail.split('@')[1].split('.')[0]

 

- 특정 문자를 다른 문자로 바꾸기

 

txt = '서울시-마포구-망원동'

print(txt.replace('-', '>')) # '서울시>마포구>망원동'

 

3) 인덱싱과 슬라이싱

 

문자열은 ‘문자들의 모임’이기 때문이 그 일부를 따로 떼어 부르는 방법이 있다.

한 글자씩 부를 때는 몇 번째인지 ‘인덱스’를 넣어 불러서 인덱싱이라고 합니다.

 

f="abcdefghijklmnopqrstuvwxyz"

f[1]   —> 결과 : b (파이썬은 숫자를 0부터 셉니다)

 

- 만약 문자열 내에 앞 몇글자만 따오고 싶다면,

문자열 자르기도 가능하다.

문자열의 일부를 잘라내는 것을 슬라이싱이라고 한다.

 

 

이렇게 : 을 이용하여 문자를 잘라준다.

실행해보면 앞에서 2글자만 따온 as 가 출력되는 걸 확인할 수 있다.

 

반대로 2번째 숫자를 기준으로 그 뒤를 출력하고 싶다면,

 

요렇게 : 만 뒤로 옮겨준다. 그러면 결과는 df만 나온다.

 

중간 값을 따오고 싶다면 이렇게,

강의 내에선 숫자 하나하나 셀 거 없이 대충 때려넣고 실행해본 뒤 조정하는 것을 추천한다.

어쨌든 위의 코드를 실행하면 'flkj' 만 출력되는 걸 볼 수 있다.

 

추가로 아래와 같은 동작들도 가능하다.

 

f[4:15]  # efghijklmno           f[4]부터 f[15] 전까지, 총 15-4=11개!

 

f[8:]    # ijklmnopqrstuvwxyz    f[8]부터 끝까지, 앞의 8개 빼고!

f[:7]    # abcdefg               시작부터 f[7] 전까지, 앞의 7개!

 

f[:]     # abcdefghijklmnopqrstuvwxyz  처음부터 끝까지

 

- 특정 문자열로 자르고 싶을 때는 split(‘문자열’)을 활용한다.

 

myemail = 'abc@sparta.co'

 

domain = myemail.split('@')[1].split('.')[0]

print(domain)

 

 

Q1. “sparta”의 앞 3글자인 “spa”만 출력해보자. (문자열의 앞의 반만 출력)

 

이렇게 입력하면 spa 세 글자만 출력되는 걸 확인할 수 있다.

 

Q2. phone = “02-123-1234” 에서 지역번호만 출력해보자. (전화번호의 지역번호 출력)

 

이러면 02 까지만 출력되는 걸 확인할 수 있다.

하지만 이렇게 푼다면 031, 032 같은 지역번호는 알 수 없을 것이다.

그래서인지 퀴즈 해설에서는 split을 이용했다.

아래와 같은 결과가 나온다.

먼저 split 을 이용해 결과를 확인해보니 ‘-‘을 기준으로 똑똑 나뉘어 리스트로 출력된다.

이 리스트에서 우리가 원하는 값은 0번째니까 split 뒤에 [0]을 붙여준다.

그럼 '02'만 따로 예쁘게 나오게 된다!

 

1-5. 리스트와 딕셔너리

 

1. 리스트 ; 순서를 중요시 해서 값을 담음

 

1) 리스트 기초

- 순서가 있는, 다른 자료형들의 모임

 

리스트의 순서는 항상 0, 1, 2, 3 순서대로,

그럼 a_list의 3번째 값, [‘사과’, ‘감’] 중에 1번째값인 ‘감’이 출력되는 걸 확인할 수 있다.

 

- 리스트의 길이는 len() 함수를 사용해서 잴 수 있다.

 

- 순서가 있기 때문에, 문자열에서처럼 인덱싱과 슬라이싱을 사용할 수 있다.

 

2) 리스트의 더 많은 기능들!

 

- 덧붙이기 ; append

 

a = [1, 2, 3]
a.append(5)
print(a)      

 

리스트에 5가 추가되어 [1, 2, 3, 5] 가 출력된다.

a.append([1, 2])
print(a)     

 

이렇게 2가지를 덧붙일 수도 있다. 그러면 [1, 2, 3, 5, [1, 2]] 이렇게 결과가 나옴.
append를 두번 쓰는 것도 방법 중 하나이다.

 

- 요소가 리스트 안에 있는지 알아보기 

 

a_list 안에 5라는 값이 있는지, 출력해보면 5가 없다고 False 표시가 뜬다.

 

a = [2, 1, 4, "2", 6]

print(1 in a)      # True

print("1" in a)    # False

print(0 not in a)  # True

 

그 밖에도 이런 식으로 값들이 있는지 없는지 알아볼 수 있다.

 

2. 딕셔너리 ; 키(key)와 밸류(value)를 중요시 해서 값을 담음

 

1) 딕셔너리 기초

전반적으로 리스트와 거의 흡사하다. 

기본적으로 아래와 같은 모양으로 생겼다.

 

person = {"name":"Bob", "age": 21}

print(person["name"])

 

여러가지 방법으로 딕셔너리를 만들 수는 있지만,

 

a = {"one":1, "two":2}

 

# 빈 딕셔너리 만들기

a = {}

a = dict()

 

리스트와 다르게 딕셔너리 요소에는 순서가 없다.

따라서 인덱싱은 사용할 수 없다.

 

person = {"name":"Bob", "age": 21}

print(person[0])   # 0이라는 key가 없으므로 KeyError 발생한다.

 

이때 결과는 '철수'. 이렇게 리스트도 혼합해서 사용할 수 있다.

 

2) 딕셔너리의 다양한 기능들

 

- 딕셔너리에 값을 새로 추가하려면,

 

이렇게 넣어주면 아래와 같이 출력된다.

 

- 딕셔너리 안에 특정 값이 있는지 확인하는 방법, 리스트랑 똑같다.

 

그러면 ‘height’ 값이 있으니 True 값이 출력된 것을 확인할 수 있다.

 

3. 리스트와 딕셔너리 조합

- 딕셔너리는 리스트와 함께 쓰여 자료를 정리하는 데 쓰일 수 있습니다.

 

people = [{'name': 'bob', 'age': 20}, {'name': 'carry', 'age': 38}]

print(people)

 

이렇게 딕셔너리와 리스트를 혼합해서 자료를 넣어준 다음에,

특정값(carry의 나이)을 찾고 싶다면 위에서 한 것처럼 찾으면 된다.

 

그러면 38이 나온다.

 

Q. 딕셔너리에서 원하는 정보를 찾아보기

 

people = [
    {'name': 'bob', 'age': 20, 'score':{'math':90,'science':70}},
    {'name': 'carry', 'age': 38, 'score':{'math':40,'science':72}},
    {'name': 'smith', 'age': 28, 'score':{'math':80,'science':90}},
    {'name': 'john', 'age': 34, 'score':{'math':75,'science':100}}
]

 

여기에서 smith의 science 점수를 출력해보자.

 

첫번째 시도,

 

print(people[2],['score'])

 

결과,

 

{'name' : 'smith', 'age' : '28', 'score' : {'math': 80, 'science' : 90)}['score']

 

이게 아닌데...

 

print(people[2],['score']['science'])

 

또 에러.. 아, 쉼표를 빼먹어서 그런가?

 

print(people[2],['score'],['science'])

 

{'name' : 'smith', 'age' : '28', 'score' : {'math': 80, 'science' : 90)}['score']['science']

 

……?????

 

해설 ㄱㄱ, 

아.. 쉼표가 아예 없어야 했다.

 

print(people[2],['score'],['science'])

 

하면 90 짠! 성공이다.

 

::오늘의 회고::

파이썬 강의를 다시 적으며 들으니 확실히 그냥 듣기만 할때보다는 더 이해가 잘 됐다.그리고 웹개발 강의때 봤던 게 많아서 더 실질적으로 이해되는 느낌이었다.이걸 먼저 들었어야 하는거 아닌가 싶은 생각도 들었다.잘 눈여겨보고 과제에 잘 활용해야겠다.과제 양을 보아하니 2월이 끝나기 전까지 노트북 앞에 망부석처럼 앉아있어야 할 것 같다.TIL 샘플 올려주는 것들을 봤는데 지금 내가 음.. ㅋㅋㅋㅋㅋㅋ정말 마구 휘갈겨 쓰고 있다는 느낌이 들었다.티스토리 잘 쓰는 방법을 좀 찾아봐야지.