[TIL] Python - 01 기초 문법

Isabel·2022년 7월 18일
0

학습 마인드 셋

1. 개념 구조화하기: 개념을 명확히 알고, 그것을 구조화하기!

해당 개념과 하위 개념을 잘 묶어서 머릿속에 저장하는 것

  1. 개념의 정의
  2. 개념의 포함 관계
  3. 두 개념의 차이점

2. 기본기 탄탄하게 쌓기

3. 동료 학습

상호작용을 기반으로 한 학습

친구에게 배운 개념 설명하기
친구 코드의 에러 함께 해결하기
모르는 내용 서로 질문&대답하면서 지식의 빈틈 채우기


프로그래밍

컴퓨터에게 일을 시키기 위해서 컴퓨터가 해야할 일을 순서대로 적어 놓은 프로그램을 만드는 행위

프로그램

특정 작업을 수행하는 일련의 명령어들의 모음

프로그래밍 언어

컴퓨터는 0과 1(2진법)로 이루어진 기계어로 소통
처음 컴퓨터가 발명될 때, 전기 신호로 전기가 들어왔는지(1) 안 들어왔는지(0) 확인하던 것을 지금까지 사용

하지만 기계어로 의사소통하는 것은 어려움이 있음
기계어의 대안으로 사람이 이해할 수 있는 새로운 언어 개발 -> 프로그래밍 언어
사람이 이해할 수 있는 문자로 구성
기본적인 규칙과 문법이 존재

소스 코드(Source Code)

프로그래밍 언어로 작성된 프로그램

번역기 (interpreter / compiler)

소스코드를 컴퓨터가 이해할 수 있는 기계어로 번역해줌
|| e.g. Python - 인터프리터


Python

Python을 배워야하는 이유

1. 알고리즘 코딩 테스트에 유리

2. 구현 코딩 테스트에 유리

유용한 라이브러리 중에서 최소한만 사용하여 프로그램을 개발할 수 있어 가장 유리한 언어

3. 가장 인기가 많은 언어

프로그래밍 인기척도로 사용하는 PYPL index와 TIOBE index에서 2022년 6월 1위를 기록
AI개발, 데이터 분석, 웹 개발, 업무 자동화 등 Python 활용 분야가 늘어나고 많은 회사에서 도입 중

Python의 특징

1. Easy to Learn

타 프로그래밍 언어에 비해 문법이 간결하고, 유연함 (변수에 별도의 타입 저장이 필요치 않음)
비교적 쉽게 익히고, 프로그래밍 사고에 집중할 수 있음

2. 인터프리터 언어 (Interpreter)

Python은 기계어로 번환할 때, 통역하듯이 1줄씩 변환

3. 객체지향 프로그래밍(OOP, Object Oriented Programming)

현대 프로그래밍의 기본적인 설계 방법론으로 자리잡은 객체 지향 프로그램
Python은 객체 지향 언어로, 모든 것은 객체로 구현되어있음

Python의 개발 환경

IDE (Integrated Development Environment): 통합 개발 환경
개발에 필요한 다양한 기능들이 포함되어 있음
|| e.g.) VS Code, XCode, Eclipse 등

Jupyter Notebook: 문법 학습을 위한 최적의 도구로, 소스코드와 함께 실행결과와 마크다운 저장 가능
open source 기반의 웹 플랫폼 및 어플리케이션
실시간으로 결과를 확인하며 학습할 수 있음

IDLE (Integrated Development and Learning Environment)


기초 문법

코드 작성법

: 코드를 어떻게 작성할지에 대한 가이드 라인
파이썬에서 제안하는 스타일 가이드 : PEP8
각 회사/프로젝트마다 따로 스타일 가이드를 설정하기도 함
|| e.g. Google Style Guide

들여쓰기

Space Sensitive
문장을 구분할 때 중괄호 대신 들여쓰기(Indentation) 사용

  • Tab으로 들여쓰거나 Spacebar4칸으로 들여쓰기 할 수 있음 (하나만 골라야함)
  • PEP8에서는 공백(빈칸, Space)를 권장함

주석 Comment

-코드를 보다 이해하기 쉽게하여 분석 및 수정이 용이해짐
-초기부터 주석을 다는 습관을 들일 것!
-잘 달린 주석은 어떤 정보보다 유용함
-코드의 내용을 잘 이해할 수 있도록 작성
-가독성을 저해할 정도로 무분별한 사용은 자제
-주석은 실행에 영향을 미치지 않고 프로그램의 속도를 느리게 하지 않으며 용량을 늘리지 않음

  • 한줄 주석
    주석으로 처리될 내용 앞에 #을 입력

  • 여러 줄 주석
    한줄 씩 #을 사용하거나, """ 혹은 ```으로 묶어서 표현할 수 있음

변수(Variable)

변수란?

데이터를 저장하기 위해서 사용
변수를 사용하면 복잡한 값들을 쉽게 사용할 수 있음(추상화)

  • 코드의 가독성 증가
  • 의미 단위로 작성 가능
  • 코드 수정이 용이해짐

동일 변수에 다른 데이터를 언제든지 할당(저장)할 수 있음

변수의 할당

변수는 할당 연산자=을 통해 값을 할당(assignment)

americano_price = 2000
cookie_price = 1500

같은 값을 동시에 할당할 수 있음

americano_price = cookie_price = 2000

다른 값을 동시에 할당할 수 있음

americano_price, moka_price = 2000, 3000 

각 변수의 값을 바꿔서 저장하기

x = 10, y = 20일 때, 각 값을 바꿔서 저장하는 코드를 작성해보자
  • 방법 1) 임시변수 temp 활용
x, y = 10, 20

temp = x
x = y 
y = temp
print(x, y) #20, 10
  • 방법 2) Pythonic한 방법!!
x, y = 10, 20

y, x = x, y
print(x, y) #20, 10

식별자

변수 이름 규칙

  • 식별자의 이름은 영문 알파벳, 언더 스코어_, 숫자로 구성
  • 첫 글자에 숫자가 올 수 없음
  • 길이 제한이 없고, 대소문자를 구별함
  • 다음 키워드는 예약어reserved words로 변수 이름으로 사용할 수 없음
import keyword
print(keyword.kwlist)

#출력 결과
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 
'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 
'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 
'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
  • 내장 함수나 모듈 등의 이름도 사용하지 않아야 함

연산자

산술 연산자(Arithmetic Operator)

기본적인 사칙연산 및 수식 계산

+ : 덧셈
- : 뺄셈
* : 곱셈
/ : 나눗셈
% : 나머지
// :** : 거듭제곱

연산자 우선순위

괄호가 가장 먼저 계산되고, 그 다음에 곱하기와 나누기더하기와 빼기보다 먼저 계산됨

자료형

자료형(Datatype) 분류

프로그래밍에서는 다양한 종류와 값(data)를 쓸 수 있음
사용할 수 있는 데이터의 종류들을 자료형(Datatype)이라고 함

수치형(Numeric Type)
- int(정수, integer)
- float(부동소수점, 실수, floating point number)
- complex(복소수, complex number)
문자열(String Type)
불린형(Boolean Type)
None

수치형

정수형 (int)

0, 100, -200 같은 정수를 표현하는 자료형
일반적인 수학 연산 가능

진수 표현

- 2진수 binary : 0b
- 8진수 octal : 0o
- 16진수 hexadecimal : 0x

실수형(float)

유리수와 무리수를 포함하는 '실수'를 다루는 자료형
0.1, 100.0, -0.001 등

실수 연산시 주의할 점(부동 소수점)

실수 값을 처리할 때 의도치 않은 값이 나올 수 있음

부동 소수점

  • 컴퓨터는 2진수를, 사람은 10진법을 사용
  • 이 때 10진수 0.1은 2진수로 표현하면 0.00011001100110011.. 같이 무한으로 반복됨
  • 무한대 숫자를 그대로 저장할 수 없어서 사람이 사용하는 10진법의 근사값만 표시
  • 0.1의 경우, 0.1에 가깝지만 정확히 동일하지 않음
  • 이런 과정에서 예쌍치 못한 결과가 나타남(Floating Point Rouding Error)

실수 연산시 주의할 점(부동 소수점) - 해결책

값을 비교하는 과정에서 정수가 아닌 실수라면 주의할 것
매우 작은 수보다 작은지를 확인하거나 math 모듈 활용

a = 0.1
b = 1.2 - 1.1 #0.9999999999999987
# 매우 작은 수와 비교
print(abs(a-b) <= 1e-10)
# math 모듈 활용
import math
print(math.isclose(a,b)) #True

문자열 자료형 (String Type)

모든 문자는 str 타입
문자열은 작은따옴표 '나 큰따옴표"를 활용하여 표기

Escape Sequence

역슬래시(backslash) 뒤에 특정 문자가 와서 특수한 기능을 하는 문자 조합

\n : 줄바꿈
\t : 탭
\r : 캐리지 리턴(carriage return) - 커서를 맨 앞으로 옮김
\o : Null
\\ : \
\' : 단일인용부호(')
\" : 이중인용부호(")

문자열 연산

  • 덧셈 (String Concatenation)
    파이썬에서 문자열 덧셈은 문자열을 연결함

  • 곱셉
    문자열"Python"*3 ?

"Python"*3  # PythonPythonPython

String Interpolation(문자열을 변수를 활용하여 만드는 법)

  • f-string: python 3.6+
name = 'Kim'
score = 4.5

print(f'Hello, {name}! Your score is {score}')
#Hello, Kim! Your score is 4.5
  • % - formatting
name = 'Kim'
score = 4.5

print('Hello, %s' % name) #Hello, Kim
print('My score is %d' % score) #My score is 4.5
print('My score is %f' % score) #My score is 4.500000
  • str.format()
name = 'Kim'
score = 4.5

print('Hello, {}! Your score is {}'.format(name, score))
#Hello, Kim! Your score is 4.5

None

  • 파이썬 자료형 중 하나
  • 값이 없음을 표현하기 위한 타입
  • 일반적으로 반환값이 없는 함수에서 사용함

Boolean형 - True, False

  • 논리자료형으로 참과 거짓을 표현하는 자료형
  • 바교/논리 연산에서 활용됨
< : 미만
<= : 이하
> : 초과
>= : 이상
== : 같음
!= : 같지 않음
is : 객체 아이덴티티(OOP)
is not : 객체 아이덴티티가 아님

비교 연산자

  • 수학에서의 등호/부등호와 동일한 개념
  • 주로 조건문에서 사용되며 값을 비교할 때 사용
    -> True / False 값을 return함

논리 연산자

여러 가지 조건이 있을 때 모든 조건을 만족하거나 (and), 여러 조건 중 하나만 만족해도 될 때 (or) 특정 코드를 실행하고 싶을 때 사용

A and B : A와 B 모두 True이면, True
A or B : A와 B 모두 False이면, False
	A와 B 중 하나라도 True이면, True
Not : True를 False로, False를 True로 

논리 연산자 주의할 점 / not 연산자

  • Falsy : False는 아니지만 False로 취급되는 다양한 값
    0, 0.0, (), {}, [], None, ""(빈 문자열)
  • 논리 연산자도 우선순위가 존재함
    not, and, or 순으로 우선순위가 높음

논리 연산자의 단축 평가

  • 결과가 확실한 경우, 두번째 값은 확인하지 않고 첫번째 값 반환
  • and 연산자에서 첫번째 값이 False인 경우, 무조건 False --> 첫번째 값 return
  • or 연산자에서 첫번째 값이 True인 경우, 무조건 True --> 첫번째 값 return
  • 0은 False, 1은 True
print(3 and 5) #5, 첫번째 값 True, 두번째 값도 True, and는 모든 값 확인해야하기 때문에 두번째 값까지 확인 후 두번째 값 출력
print(3 and 0) #0 둘 중 하나의 값이 False이므로 0 출력
print(0 and 3) #0 둘 중 하나의 값이 False이므로 0 출력 ==> 당연히 False 첫번째 값 출력
print(0 and 0) #0 둘 중 두 값이 모두 False이므로 0 출력

print(5 or 3) #5 둘 중 하나의 값이 True이면 True ==> 두번째 값 확인하지 않고 첫번째 값 출력
print(3 or 0) #3 둘 중 하나의 값이 True이면 True ==> 두번째 값 확인하지 않고 첫번째 값 출력
print(0 or 3) #3 둘 중 하나의 값이 True이면 True ==> 첫번재 값 False, 두번째 값까지 확인 후 두번째 값 출력
print(0 or 0) #0 둘 중 두 값이 모두 False이므로 0 출력

컨테이너(Container)

컨테이너

여러 개의 값(데이터)를 담을 수 있는 것(객체)으로, 서로 다른 자료형을 저장할 수 있음
|| e.g. 시퀀스형 (List, Tuple, Range), 비시퀀스형 (Set, Dictionary)
|| e.g. 가변형 (List, Set, Dictionary), 불변형 (Tuple, Range)

컨테이너의 분류

  • 순서가 있는 Ordered 데이터 vs 순서가 없는 Unordered 데이터
  • 순서가 있다 != 정렬되어 있다

List

여러 개의 값을 순서가 있는 구조로 저장하고 싶을 때 사용
가변 자료형(mutable)

List의 생성과 접근

대괄호[] 혹은 list()를 통해 생성
Python에서는 어떤 자료형도 저장할 수 있으며, 리스트 안에 리스트도 넣을 수 있음
순서가 있는 시퀀스로 index를 통해 접근 가능
list[i] 로 값에 접근할 수 있음

Tuple

여러 개의 값을 순서가 있는 구조로 저장하고 싶을 때 사용
리스트와의 차이점 : 생성 후, 담고 있는 값 변경 불가 (불가변 자료형, immutable)
소괄호 형태()로 사용

Tuple의 생성과 접근

소괄호()혹은 tuple()을 통해 생성
수정불가능한 시퀀스로 index로 접근 가능
tuple[i]로 값에 접근할 수 있음

Tuple 생성 주의사항

  • 단일 항목의 경우,
    하나의 항목으로 구성된 튜플은 생성 시 갑 뒤에 쉼표를 붙여야 함
tuple_a = (1,) 
tuple_b = 1,
  • 복수 항목의 경우,
    마지막 항목에 붙은 쉼표는 없어도 되지만, 넣는 것을 권장(Trailing Comma)
tuple_c = (1, 2, 3,)
tuple_d = (1, 2, 3)
tuple_e = 1, 2, 3,
tuple_f = 1, 2, 3

Tuple 대입(Tuple Assignment)

우변의 값을 좌변의 변수에 한 번에 할당하는 과정
일반적으로 파이썬 내부에서 활용

x, y = 1, 2
print(x, y) # 1 2

#실제로 튜플로 처리
x, y = (1, 2)
print(x, y) # 1 2

Range

숫자의 시퀀스를 나타내기 위해 사용
주로 반복문과 함께 사용됨

print(range(o, 4)) #0, 1, 2, 3

Range 사용 방법

  • 기본형 : range(n) : 0 ~ n-1의 숫자의 시퀀스
  • 범위 지정 : range(n, m) : n ~ m-1의 숫자의 시퀀스
  • 범위 및 스텝 지정 : range(n, m, s) : n ~ m-1까지 s만큼 증가시키며 숫자의 시퀀스

범위 및 스텝을 지정하여 역순으로 시퀀스를 만들 수 있음

range(6, 1, -1) #[6, 5, 4, 3, 2, 1]
range(6, 1, -2) #[6, 4, 2]
range(6, 1, 1) #[]

슬라이싱 연산자

Sequence를 특정 단위로 슬라이싱

인덱스와 콜론을 사용하여 문자열의 특정 부분만 잘라낼 수 있음
slicing할 때, 콜론을 기준으로 앞 인덱스에 해당하는 문자는 포함하고 뒤 인덱스에 해당하는 문자는 미포함

print([1, 2, 3, 5][1:4]) #[2, 3, 5]
print((1, 2, 3)[:2]) #(1, 2)
print(range(10)[5:8]) #range(5, 8)
print('abcd'[2:4]) # cd

Sequence를 k간격으로 슬라이싱

print([1, 2, 3, 5][0:4:2]) #[1, 3]
print((1, 2, 3, 5)[0:4:2]) #(1, 3)
print(range(10)[1:5:3]) #range(1, 5, 3)
print('abcdefg'[1:3:2]) # b

Set

= 집합

  • 중복되는 요소가 없이, 순서에 상관없는 데이터들의 묶음
    데이터의 중복을 허용하지 않음 -> 중복되는 원소가 있다면 하나만 저장
    순서가 없기 때문에 index를 이용한 접근 불가능

  • 집합 연산이 가능 - 합집합, 교집합, 차집합 (여집합을 표현하는 연산자는 별도로 X)

  • 가변 자료형(mutable)

Set 생성

중괄호{} 혹은 set()을 통해 생성
빈 Set을 만들기 위해서는 반드시 set()을 활용하여야 함

빈 중괄호는 type이 Dictionary임
black = {}
blank_set = set()

순서가 없어 별도의 값에 접근할 수 없음

Set 사용하기

  • set으로 다른 컨테이너에서 중복된 값을 쉽게 제거할 수 있음
    단, 순서가 무시되므로 순서가 중요할 경우 사용하면 안 됨
my_list = ['서울', '서울', '서울', '광주', '거제', '광주', '부울경']
print(len(set(my_list))) #4

Set 연산자

| : 합집합
& : 교집합
- : 차집합
^ : 대칭차집합 (합집합 - 교집합)
여집합은 없음

Dictionary

키-값(Key-Value) 쌍으로 이루어진 자료형 (3.7+ ordered, 이하 버전은 unordered)

  • Dictionary의 Key
    key는 변경불가능한 데이터만 활용 가능(immutable)
    String, Integer, Float, Boolean, Tuple, Range
  • 각 Key의 Value(값)
    어떤 형태이든 관계없음

Dictionary 생성

중괄호{} 혹은 dict()을 통해 생성
key를 통해 value에 접근

dict_a = {'a':'apple', 'b':'banana', 'list':[1,2,3]}
print(dict_a['a']) #apple

dict_b = dict(a = 'apple', b = 'banana', list = [1,2,3])

형변환

파이썬에서 데이터 형태는 서로 변환할 수 있음

  • 암시적 형 변환(Implicit)
    사용자가 의도하지 않고, 파이썬 내부적으로 자료형을 변환하는 경우
    - bool (True = 1, False = 0)
    - numeric type (int, float)
      print(True + 3) # 4
       print(3 + 5.0) # 8.0
        
  • 명시적 형 변환(Explicit)
    사용자(개발자) 가 특정 함수를 활용하여 의도적으로 자료형을 변환하는 경우
    • int
      • str, float => int
        단, 형식에 맞는 문자열만 정수로 변환 가능
        문자열은 암시적 타입 변환이 되지 않음
        명시적 타입 변환이 필요
    • float
      • str(참고), int => float
        단, 형식에 맞는 문자열만 float으로 변환 가능
        정수 형식인 경우에도 float으로 타입 변환
        float 형식이 아닌 경우, 타입 변환할 수 없음
    • str
      • int, float, list, tuple, dict => str

참고)
input() : 사용자로부터 데이터를 입력 받음
입력받은 데이터는 string으로 저장됨


파이썬 프로그램 구성 단위

프로그램 구성 단위

식별자(identifier)

변수, 함수, 클래스 등 프로그램이 실행되는 동안 다양한 값을 가질 수 있는 이름
예약어(reserved words)

리터럴(literla)

읽혀지는 대로 쓰여있는 값 그 자체

표현식(expression)

새로운 데이터 값을 생성하거나 계산하는 코드 조각

문장(statement)

특정한 작업을 수행하는 코드 전체
파이썬이 실행가능한 최소한의 코드 단위

모든 표현식expression은 문장statement이다.

0개의 댓글