파이썬과 기본 문법


📌 컴퓨터 프로그래밍 언어

컴퓨터(Computer) : Caculation(계산) + Remember(기억하다)

프로그래밍(Programming) : program(명령어의 모음(집합))

언어 : 자신의 생각을 컴퓨터에게 나타내고 전달하기 위해 사용하는 체계 문법적으로 맞는 말의 집합

프로그래밍 언어란? 컴퓨터에게 명령하는 말, 컴퓨터에게 명령하기 위한 약속들을 배운다.


📌 프로그래밍 언어를 공부할 때 생각해볼 부분

선언적 지식(declarative knowledge) : 사실에 대한 내용

  • 거기 있는 빵 좀 꺼내와봐

명령적 지식(imperative knowledge) : How to 어떻게 해야할지를 명확하게 만들어 나가야한다.

  • 빵 봉투를 연다 -> 어떻게 열어야할지 -> 빵을 꺼낸다 -> 몇 개를 꺼낼지


📌 파이썬이란?

  • Easy to learn : 배우기 쉽다!
    • 다른 프로그래밍 언어보다 문법이 간단하면서 엄격하지 않음
  • 크로스 플랫폼 언어 : 윈도우, macOS, 리눅스, 유닉스 등 다양한 운영체제에서 사용 가능한 언어
  • 인터프리터(interpreter) 언어
    • 소스코드를 기계어로 변환하는 컴파일 과정 없이 실행 가능
    • 코드를 대화하듯 한 줄 입력하고 실행한 후, 바로 확인할 수 있음
  • 객체 지향 프로그래밍(Object Oriented Programming)
    • 파이썬은 객체지향 언어이며 모든것이 객체로 구현되어 있음
      • 객체(object) : 숫자, 문자, 클래스 등 값을 가지고있는 모든 것


📌 코드 스타일 가이드

https://peps.python.org/pep-0008/

-> PEP8 공식문서, 스타일 가이드에 맞게 작성을 해보자!


기초 문법

📌 들여쓰기(Identation)

  • Space Sensitive

    • 파이썬은 문장을 구분할 때 들여쓰기를 사용한다.
    • 들여쓰기를 할때 4칸(space 4번) 혹은 1탭 입력

    • 한 코드 안에서는 반드시 한 종류의 들여쓰기 사용 -> 혼용 x
      • tab으로 들여쓰면 계속 tab으로 들여쓸것.
      • 원칙적으로는 공백(space) 사용을 권장


📌 변수(Variable)

  • 컴퓨터 메모리 어딘가에 저장되어 있는 객체를 참조하기 위해 사용하는 이름 a = 8
    • 객체(object) : 숫자, 문자, 클래스 등 값을 가지고있는 모든것
  • 동일한 변수에 다른 객체를 언제든 할당할 수 있기 때문에 '변수, 변할 수 있는 수' 라고 불린다.

  • 변수는 할당 연산자(=) 를 통해 값을 할당한다. 즉, = 는 같다는 의미가 아닌 할당한다의 의미이다.
  • type()
    • 변수에 할당된 값의 타입
  • id()
    • 변수에 할당된 값(객체)의 고유한 아이덴티티 값이며, 메모리 주소.
x = 5
type(x) # 변수에 할당된 값의 타입을 알아냄
id(x) # 변수에 할당된 값의 메모리 주소를 알아냄


📌 식별자(identifiers)

  • 파이썬 객체(변수, 함수, 모듈, 클래스 등)를 식별하는데 사용하는 이름
  • 규칙
    • 식별자 이름은 영문 알파벳, 언더스코어(_), 숫자 구성
    • 첫 글자에 숫자가 올 수 없음
    • 길이제한이 없고 대소문자를 구별
    • 내장함수나 모듈 등의 이름으로도 만들면 안된다.(print 등)


📌 사용자 입력

  • input([prompt])

    • 사용자로부터 값을 즉시 입력 받을 수 있는 내장함수

    • 대괄호 부분에 문자열을 넣으면 입력 시, 해당 문자열 출력이 가능

    • 반환값은 항상 문자열의 형태

      name = input('이름을 입력해주세요 : ')
      


📌 주석

  • 한 줄 주석(#)

    • 주석으로 처리될 내용 앞에 ‘#’ 입력

      # 주석입니다
      a = "작동되는 코드"
      print(a) # 작동되는 코드 가 출력됩니다.
      


파이썬 기본 자료형(Datatype)


📌 자료형 분류

  • boolean : 비교/논리 연산을 수행함에 있어서 활용
    • true : 참
    • false : 거짓
  • 수치형(Numeric Type)
    • int : 정수
    • float : 실수
    • complex : 복소수
  • 문자열(String type)
  • None
    • 값이 없을을 표현하기 위한 타입
    • 반환 값이 없는 함수에 사용되기도 함


📌 연산자

논리 연산자(Logical Operator)

  • 논리식을 판단하여 참(True)과 거짓(False)을 반환함
연산자 내용
A and B A 와 B 모두 True시, True
A or B A 와 B 모두 False시, False
Not True를 False, False를 True로
  • and : 모두 참인 경우 참, 그렇지 않으면 거짓
  • or : 둘 중 하나만 참이라도 참, 그렇지 않으면 거짓
  • not : 참 거짓의 반대의 결과
num = 100
num >= 100 and num % 3 == 1
# True


정수(int)

  • 파이썬3에서 모든 정수의 타입은 int
  • 오버플로우가 발생하지 않음


실수(Float)

  • 정수가 아닌 모든 실수는 float 타입

  • 부동소수점

    • 실수를 컴퓨터가 표현하는 방법 - 2진수(비트)로 숫자를 표현

    • 이 과정에서 floating point rounding error가 발생하여, 예상치못한 결과가 발생함

      11/2
      type(10/3)
      # <class 'float'>
      1/-10**100
      # -1e-100
      


수치형 연산자

📌 산술 연산자(Arithmetic Operator)

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

    연산자 내용
    + 덧셈
    - 뺄셈
    * 곱셈
    % 나머지
    / 나눗셈
    //
    ** 거듭제곱


📌 복합 연산자(In-place Operator)

  • 연산과 할당이 함께 이루어짐

    연산자 내용
    a += b a = a + b
    a -= b a = a - b
    a *= b a = a * b
    a /= b a = a / b
    a //= b a = a // b
    a %= b a = a % b
    a **= b a = a ** b


📌 비교 연산자(Comparision Operator)

  • 값을 비교하며, True/False 값을 리턴

    연산자 내용
    < 미만
    <= 이하
    > 초과
    >= 이상
    == 같음
    != 같지않음
    is 객체 아이덴티티(OOP)
    is not 객체 아이덴티티가 아닌 경우


문자열(String Type)

📌 중첩따옴표(Nested Quotes)

  • 따옴표 안에 따옴표를 표현할 경우

    • 작은 따옴표가 들어 있는 경우는 큰 따옴표로 문자열 생성
    • 큰 따옴표가 들어 있는 경우는 작은 따옴표로 문자열 생성
    print("문자열 안에 '작은 따옴표'")
    print('문자열 안에 "큰 따옴표"')
    


📌 삼중따옴표(Triple Quotes)

  • 작은 따옴표나 큰 따옴표를 삼중으로 사용

    print('''문자열 안에 "큰 따옴표"나 '작은 따옴표' 사용 가능''')
    


📌 문자열 연산자

  a b c d e f g h i
index 0 1 2 3 4 5 6 7 8
index -9 -8 -7 -6 -5 -4 -3 -2 -1
  • s[:3] => ‘abc’
    • 처음을 생략시 시작점
  • s[5:] => ‘fight’
    • 끝을 생략시 마지막점
  • s[2:5:2] => ‘ce’
    • 3번째는 step이라 부르는데, 지정한 숫자만큼씩 건너뜀
  • s[5:2:-1] => ‘fed’
  • s[::] => ‘abcdefghi’
  • s[::-1] => ‘ihgfedcba’


📌 결합(Concatenation)

'hello' + 'python'


📌 반복(Repetition)

'hello' * 3


📌 포함(Membership)

a in 'apple'


문자열의 활용

📌 탈출문자(escape sequence)

# 개행, 줄 바꿈
print('안녕하세요, \n반갑습니다')

# 따옴표
print("따옴표를 '씁니다'")
print('따옴표를 \'씁니다\'')

# 역슬래시
print('escape sequence는 역슬래시 \\를 활용합니다.')


📌 String Interpolation

  • 문자열을 변수를 활용하여 만드는 법

    • f-string

      # 문자열 안에 변수 넣기
      score = 100
      print(f'내 점수는 {score}이야.')
          
      pi = 3.141592
      print(f'원주율은 {pi:.3}. 반지름이 2일때 원의 넓이는 {pi*2*2}')
      # '원주율은 3.14. 반지름이 2일때 원의 넓이는 12.566368'
      


형변환

📌암시적 형 변환(Implicit Typecasting)

  • 사용자가 의도하지 않고, 파이썬 내부적으로 자료형을 변환 하는 경우
    • bool
    • Numeric type(int, float, complex)

📌명시적 형 변환(Explicit Typecasting)

  • int
    • str*, float => int
  • float
    • str*, int => float
  • str
    • int, float, list, tuple, dict => str

*str은 형식에 맞는 문자열만 가능


컨테이너(Container)

📌 컨테이너란?

  • 여러 개의 값을 담을 수 있는 것(객체)으로, 서로 다른 자료형을 저장할 수 있음
    • 예시 : List, tuple

📌 컨테이너의 분류

  • 시퀀스 : 순서가 있는것
    • 문자열 : 문자들의 나열
    • 리스트 : 변경 가능한 값들의 나열, 순서를 가지며 서로 다른 타입의 요소를 가질 수있음, 변경 가능하며, 반복 가능함
    • 튜플 : 변경 불가능한 값들의 나열, 순서를 가지며 서로 다른 타입의 요소를 가질 수 있음,
    • 레인지 : 숫자의 나열, 변경 불가능하며, 반복 가능함
      • 기본형 : range(n), 0부터 n-1까지 숫자 시퀀스
      • 범위지정 : range(n, m), n 부터 m-1까지 숫자 시퀀스
      • 범위 및 스텝 지정 : range(n, m, s), n 부터 m-1까지 s씩 건너뛰어서
  • 컬렉션/비시퀀스 : 순서가 없는것
    • 세트 : 유일한 값들의 모음, 순서가 없고 중복된 값이 없음, 변경 가능하며, 반복 가능함
    • 딕셔너리 : 키-값 쌍으로 이뤄진 모음
      • 키 : 불변 자료형만 가능(리스트, 딕셔너리 등은 불가능)
      • 값 : 어떠한 형태는 관계 없음
#[시퀀스]

# 1. 리스트
# 값들의 나열
name = '김밥'
name1 = '피자'
name2 = '샌드위치'

foods = ['김밥', '피자', '샌드위치']
print(foods[0]) # 김밥
print(foods[-1]) # 샌드위치
순서로 접근

# 2. 튜플
a = (1, 2, 3, 1)
# 값 접근
a[1]
# 값 변경 => 불가능
a[1] = '3' # 에러

# 3. 레인지
numbers = range(5)
print(list(numbers))
# -> [0, 1, 2, 3, 4]

# [컬렉션/비시퀀스]

# 세트(set)
# set은 내부적으로 표현만 똑같이 하는 방법이 있을 뿐 순서는 없음
set_a = {1, 2, 3, 1, 2}
# {1, 2, 3}
set_b = {'hi, 1, 2'}
# {1, 2, 'hi'}
# set의 추가와 삭제 방법
set_a.add(4)
set_b.remove(4)

# 딕셔너리
# 키-값의 쌍
students = {
  '1회차': ['동현', '효근'],
  '2회차': ['수경', '나영'],
  '3회차': ['다겸', '예지']
}
# 키로 접근
print(students['1회차'])

movie = {
  'title': '설국열차',
  'genres': ['SF', '액션', '드라마'],
  'open_date': '2013-08-01',
  'time': 126,
  'adult': false,
}
print(movie['genres'])
# ['SF', '액션', '드라마']


관심있을 포스팅