Sparta_내배캠_파이썬 강의 by 이창호 튜터님

이태은·2022년 9월 5일
0

Python

목록 보기
2/2
post-thumbnail

파이썬 강의 1일차

파이썬

  • 컴파일 언어인 C, Java와는 다르게 Python은 인터프리터 언어이다.
    • 인터프리터 : 문장을 한 줄 단위로 읽고 번역함과 동시에 바로 실행
    • 컴파일러 : 사람이 작성한 코드를 바로 실행하는 것이 아닌, 컴퓨터가 이해할 수 있도록 기계어로 번역하는 과정을 의미
    • 동적 타입 언어 : C, Java와 다르게 변수를 할당할 때 자료형을 지정해 주지 않아도 된다.
      • 정적 타입 언어인 Java의 변수 선언
        • int num = 10;
        • String str = "hello world!!"
      • 동적 타입 언어인 Python의 변수 선언
        • num = 10
        • str = "hello world!!"


코드 컨벤션

  • 언어마다 컨벤션(약속)이 다르다

    • 파이썬: PEP-8
  • 팀으로 프로젝트를 하기때문에 변수를 선언하거나 코드를 작성할때 사용하기로한 약속

    • why? 내가 짠 코드는 신과 일주일내의 나만 안다.
  • 네이밍 컨벤션

    • Pascal : PythonIsVeryGood / 각 단어를 대문자로 구별합니다. 파이썬

    • Snake : python_is_very_good / 각 단어를 언더바( _ )로 구분합니다. (뱀과 비슷한 모양 ) 파이썬

    • Camel : pythonIsVeryGood / Pascal과 동일하지만, 첫 문자가 소문자로 시작합니다. ( 쌍봉낙타와 비슷한 모양 )

    • 상수 표현할때는 예외적으로 모든 문자로 대문자로 표현을 한다.

      • 파이썬은 상수가 없다.선언을 하더라도 바꿀 수 있다.
        • 상수 : 한번 선언되면 변하지않는 값
    • 리스트 사용시 복수 사용하기 : 리스트 속 내용물 표현시 낱개로 표현 가능

      • for number in numbers: 반복문 사용 시 가독성을 늘릴 수 있습니다.
    • def add(a, b): return a + b 함수를 네이밍할 때는 해당 함수가 어떤 역할을 하는지 표현해야 한다.

    • class : 첫글자 대문자 (Pascal)

    • 함수 : _ (Snake)

    • 변수 : _ (Snake)

    • 상수 : 모두 다 대문자

    확장자 추천 : 아스키독, 오토 독 스트링,장고 인텔리전쓰, 독커,깃엔즈, 깃 히스토리



변수 선언

  • 선언할 변수 명 = 변수에 넣고 싶은 값 과 같은 형태로 변수를 선언
  • python에 이미 선언 되있는 단어
    : 중복을 피하기 위해 변수 명 뒤에 언더바 ( _ )를 추가 선언
    • ex ) list, type, class
      • list_ = [1,2,3,4]


자료형 종류와 특징

  • integer ( int )

    • 정수 자료형
    • 소숫점 지원 x
  • float

  • String

    • 'a' = "a"
    • 문자 = 문자열 ( C에서는 문자 =/= 문자열)
    • ''' or """ 을 위 아래로 쓰면 문장 혹은 주석을 표현 할 수 있다.
    • ' 와 "을 같이 써야 하는 경우에는 앞에 \을 쓰면 문자 그대로 사용이 가능하다.
  • list

    • numbers = [1, 2, 3, 4, 5]
    • 1개 이상의 값을 한 변수에 담아 사용 가능 ( 0 도 가능 )
    • integer, float, string, dictionary, list 등 다양한 자료형을 담을 수 있다.
  • tulpe

    • numbers = (1, 2, 3 ,4, 5)
    • 리스트와 동일한 방법으로 선언 가능
    • 값을 선언 후 요소를 변경 or 삭제 불가능
  • set

    • numbers = {1, 2, 3, 4, 5}
    • 중복된 데이터를 담을 수 없다.
  • dic

    • members = {”1”: “lee”, “2”: “park”, “3”: “kim”}
    • {key: value} 쌍으로 이루어짐
    • key : integer, float, string
    • value : integer, float, string, dictionary, list
  • boolean

    • flag = True 와 같이 사용
    • True 혹은 False 두 값만 사용


변수 유효 범위

  • 변수가 선언된 위치키워드에 따라 변수를 사용할 수 있는 범위가 달라지는것.

  • 지역변수 , 전역변수

    • 지역변수

      • 함수 내에서 선언된 변수
      • global 키워드를 사용해전역 변수로 재선언 할 수 있다.
    • 전역변수

      • 함수 밖에서 선언
      • 어디든지 접근 가능
      • 값이 어디서 변하는지 알기 어렵기때문에 사용 x
      • 주의
        • 함수 내에서 전역 변수의 값을 바꾸려는 경우
          : 해당 함수 내에서만 사용 가능


파이썬 강의 2일차

# 자료형 활용하기

사칙연산
: integer와 float 자료형에서 활용

  • x + y : 더하기
  • x - y : 빼기
  • x * y : 곱하기
  • x ** y : 제곱(x의 y제곱)
  • x / y : 나누기 ( int와 int를 나누더라도 연산 결과는 항상 float이 나온다. )
  • x // y : 나머지 없는 나누기, 어떤 값을 나누더라도 항상 정수로 떨어진다.
    • ex) 5 // 2 -> 2, 4 // 2 -> 2, 4.0 // 2.0 -> 2.0
  • x % y : 나머지를 구하는 연산
    • 8 % 3 -> 2, 5.0 % 2.0 -> 1.0
  • 단축

string
: 문자열 에서는 +와 * 지원

a = "hello "
b = a * 3 # b 변수에 문자열을 반복해서 저장
print(b)
>>>" hello hello hello " 

list

  • list 선언 시 list안에 들어있는 각 요소는 0부터 차례로 index 번호를 가진다

    # index slicing 기능을 활용해 원하는 값들 가져오기
    alphabets = ["a", "b", "c", "d", "e", "f"]
    # alphabets의 index가 0보다 크거나 같고 4보다 작은 요소 출력
    print(alphabets[0:4]) 
    >> ['a', 'b', 'c', 'd'] # alphabets 의 0, 1, 2, 3 index가 출력됨
     #역순으로 출력
     print(alphabets[::-1] 
  • len() 함수를 사용해 list의 길이를 구할수 있습니다.

    numbers = [1, 2, 3, 4]
    print(len(numbers)) # 4

  • 값을 원하는대로 추가, 수정, 삭제

    • numbers = [1, 2, 3, 4, 5]
      • numbers.append(6)

        numbers의 마지막 자리에 6 추가
        numbers = [1, 2, 3, 4, 5, 6]

      • numbers.remove(1)

        numbers에서 1이라는 값을 가진 요소 삭제
        numbers = [2, 3, 4, 5, 6]

      • numbers[-1] = 7

        numbers의 마지막 요소(6)의 값을 7로 변경
        numbers = [2, 3, 4, 5, 7]

      • last_num = numbers.pop()

        list에서 마지막 요소 삭제 후 변수에 할당
        last_num = 7
        numbers = [2, 3, 4, 5]

      • len() 함수를 사용해 list의 길이를 구할수 있습니다.

        numbers = [1, 2, 3, 4]
        print(len(numbers)) # 4


tuple

  • list와 동일한 indexing 기능 활용 가능
  • 요소의 값을 수정 or 삭제 풀가 only 추가만 가능
  • len() 함수를 사용해 tuple의 길이를 구할수 있습니다.
    numbers = (1, 2, 3, 4)      
    print(len(numbers)) # 4
            

set

  • 중복된 값을 포함 X
    # 중복된 값을 포함하지 않기 때문에 5는 하나만 저장
    numbers = {1, 2, 3, 4, 5, 5}
    >>> numbers = {1, 2, 3, 4, 5} 
    
    # set 자료형은 index를 사용해 값을 가져올 수 없음
    print(numbers[0])

  • dictionary
    • key, value 값으로 구성
    • key를 사용해 value를 가져올 수 있다.
    • 자유롭게 값을 추가, 수정, 삭제 할 수 있다.
    • len() 함수를 사용해 tuple의 길이를 구할수 있다.

      numbers = (1, 2, 3, 4)
      print(len(numbers)) # 4


# 자료형 변환

: 특정값의 자료형을 조건이 맞을경우 자유롭게 변환가능

  • string -> int

    • "50" -> 50 (o)
    • "number" -> (x)
  • list -> tuple -> set

     sample_list = [1, 2, 3, 4, 5]
    sample_tuple = tuple(sample_list)
    sample_set = set(sample_tuple)
    
    print(sample_list)
    print(sample_tuple)
    print(sample_set)
    
    >>> [1, 2, 3, 4, 5]
    	(1, 2, 3, 4, 5)
    	{1, 2, 3, 4, 5}
  • any -> sting


# 함수

  • def 함수명() 형태로 선언

# 다른 파일에 있는 코드 import해서 사용하기 ( 강의 자료와 동일 )

  • import "파일명"

  • frome

    • frome 파일명 import (함수/변수/가저올것) : 특정한 (함수/변수/가져올것) 가져오기

    • frome 파일명 import * : 모든 함수 import

      # a.py
      def a_funtion():
        print("execute a")
      
      # main.py / case 1
      from a import a_funtion # a 파일에 있는 a_funtion을 import
      # 이 경우 위 예제와 다르게, a.a_funtion가 아닌 a_funtion으로 사용한다.
      a_funtion() # execute a
      
      # main.py / case 2
      from a import * # a 파일에 있는 모든 함수를 import
      a_funtion() # execute a
  • 다른 폴더에 있는 파일 import

    # folder/b.py
    def b_funtion():
      print("execute b")
    
    # folder/c.py
    def c_funtion1():
      print("execute c1")
    
    def c_funtion2():
      print("execute c2")
    
    # main.py
    from folder import b
    from folder.c import *
    
    b.b_funtion() # execute b
    c_funtion1() # execute c1
    c_funtion2() # execute c2
  • 변수 import해서 사용하기

    # 다른 파일의 변수 또한 함수와 동일한 방법으로 from / import를 사용할 수 있습니다.
    # folder/b.py
    PIE = 3.14
    HELLO = "world"
    
    # main.py / case 1
    from folder.b import * # *권장X* 존재하는 모든 변수 import
    
    print(PIE) # 3.14
    print(HELLO) # "world"
    
    # main.py / case 2
    from folder.b import PIE, HELLO # 사용 할 변수를 각각 import
    
    print(PIE) # 3.14
    print(HELLO) # "world"
    
    # main.py / case 3
    from folder import b # *권장O* b 파일 import
    print(b.PIE) # 3.14
    print(b.HELLO) # world

조건문

  • 비어있는 string, list 등은 분기문에서 False로 판단

    empty_string = ""
    empty_list = []
    
    if not empty_string:
       print("string is empty!!")
    
    if not empty_list:
       print("list is empty!!")
  • bool( ) : 특정값이 True인지 False인지 확인


파이썬 강의 3일차

반복문

  • while / for

  • for

    • list, tuple, set 자료형의 요소 사용 가능
  • enumerate( )
    : 반복되는 요소가 몇번째인지 확인

    members = ["lee", "park", "kim"]
    
    for i, member in enumerate(members):
      print(f"{member}{i}번째 회원입니다.")
    
    # result print
    
    >>> lee는 0번째 회원입니다.
    		park는 1번째 회원입니다.
    		kim는 2번째 회원입니다.
    

모듈 및 패턴

  • type() : 값의 자료형 확인해보기
  • split() : ()안의 값을 기준으로 문자를 나눈다. ( string -> list )
  • join() : ()안의 값을 리스트 사이에 넣어 문자를 합쳐줌 ( list -> string )
  • replace() : replace(a,A) 문자 a를 A로 바꾸겠다
  • pprint() : 알아보기 힘든 코드를 정렬해서 출력
  • random() : 랜덤한 로직이 필요할때
    • random.randint(a,b) : a부터 b까지의 랜덤한 수
    • random,randange(a,b) : a부터 (b-1)까지의 랜덤한 수
  • time() : 함수.time() 함수의 실행 시간 측정
    • 함수.sleep(a) : a 초동안 대기
  • datetime :
    • datetime.now() : 현재 날짜 및 시간 출력
      • 작업 순서
        1. 사용자의 입력을 string -> datetime 변경
        2. datetime 포맷에서 날짜 계산
        3. datetime 포맷을 원하는 string으로 변경

로또번호 뽑는 코드 작성

from  pprint import pprint
import random


def lotto_number_genetator(count):
    # 빈 리스트 생성
    result = []
    if count < 1:
        print("1 이상의 값을 입력 해주세요")

    # 입력된 count수 만큼 로또를 살것이다.
    for _ in range(count):
        lotto_numbers = set() # 중복된 값이 없돍 set() 사용

        while len((lotto_numbers)) < 8:  #0~7까지 이므로 8개 선언됨
            lotto_numbers.add(random.randint(1, 45))

        result.append(lotto_numbers)
    return result


lotto_numbers = lotto_number_genetator(5)
pprint(lotto_numbers)





파이썬 강의 4일차

class

  • 클래스 선언 : 과자 틀을 만드는것

  • instance

    • 선언된 과자 틀로 과자를 만드는것
    • class를 사용해 생성된 객체
    • class의 형질을 가지고 있다.
  • 함수 : class 밖에있는 메소드

  • 메소드 : 클래스 내에 선언된함수, 클래스 함수

  • self : 메소드를 선언할 때에는 항상 첫번째 인자로 self 를 넣어줘야한다. class 한정 전역변수

    • self.변수이름
  • _init_ 함수 (initialize : 초기화)

    • 인스턴스 생성시 해당 메소드가 실행 된다.
  • _ @@ _

    • 파이썬에 기본적으로 선언되있는것

mutable

  • mutable : 값이 변한다.

  • list


immutable

  • immutable : 값이 변하지 않는다

  • string


파이썬 강의 5일차

try

except(에러이유):

  • 에러가 발생했을때 처리

sracktrace

  • 에러가 발생했을 때 에러가 발생 한 위치를 찾아내기 위해 호출 된 함수의 목록을 보여줌

축약식

  • 긴 코드를 간략하게 줄일 수 있다

  • list, set, tuple, dict 자료형에서 사용 가능

    • list

      numbers = [x for x in range(5)] # [0, 1, 2, 3, 4]

    • 조건문

      even_numbers = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]

    • 활용 #list 축약식의 []를 ()혹은 {}로 바꿔주면 tuple, set 축약식을 사용하실수 있다.

      people = [
        ("lee", 32),
        ("kim", 23),
        ("park", 27),
        ("hong", 29),
        ("kang", 26)
      ]
      
      average_age = sum([x[1] for x in people]) / len(people)
      print(average_age) # 27.4

    • dictionary 축약식 활용

      # dictionary 축약식의 구조는 list와 동일하지만, key / value 형태로 지정해야 합니다.
      people = [
        ("lee", 32, "man"),
        ("kim", 23, "man"),
        ("park", 27, "woman"),
        ("hong", 29, "man"),
        ("kang", 26, "woman")
      ]
      
      people = {name: {"age": age, "gender": gender} for name, age, gender in people}
      print(people)
      
      # result print
      """
      {
        'lee': {'age': 32,
                 'gender': 'man'},
        'kim': {'age': 23,
                 'gender': 'man'},
        'park': {'age': 27,
                 'gender': 'woman'},
        'hong': {'age': 29,
                 'gender': 'man'},
        'kang': {'age': 26,
                 'gender': 'woman'}
      }
      """

lambda / map / filter / sort

  • lambda

    • 익명 함수

  • map

    • map은 함수와 리스트를 인자로 받아 리스트의 요소들로 함수를 호출

      string_numbers = ["1", "2", "3"]
      integer_numbers = list(map(int, string_numbers))
      print(integer_numbers) # [1, 2, 3]
    • map 함수를 사용하지 않는 경우

      string_numbers = ["1", "2", "3"]
      integer_numbers = []
      
      for i in string_numbers:
        integer_numbers.append(int(i))
      
      print(integer_numbers) # [1, 2, 3]
    • list 축약식 활용

      string_numbers = ["1", "2", "3"]
      integer_numbers = [int(x) for x in string_numbers]
      print(integer_numbers) # [1, 2, 3]
    • map & lambda 함께 사용

      numbers = [1, 2, 3, 4]
      double_numbers = list(map(lambda x: x*2, numbers))
      print(double_numbers) # [2, 4, 6, 8]

  • filter
    • map과 유사한 구조, 조건이 참인 경우 저장
  • sort( )
    • 리스트 속 내용물 오름차순으로 정렬
    • sort(reverse) : 역순 (내림차순) 으로 정력

파이썬 강의 6일차

함수 심화 (교제 원본)

  • 인자에 기본값 지정해주기

    # 함수를 선언할 때 인자에 기본값을 지정해줄 수 있습니다.
    EXPRESSION = {
          0: lambda x, y: x + y ,
          1: lambda x, y: x - y ,
          2: lambda x, y: x * y ,
          3: lambda x, y: x / y
      }
    
    def calc(num1, num2, option=None): # 인자로 option이 들어오지 않는 경우 기본값 할당
      """
      option
       - 0: 더하기
       - 1: 빼기
       - 2: 곱하기
       - 3: 나누기
      """
      return EXPRESSION[option](num1, num2) if option in EXPRESSION.keys() else False
    
    print(calc(10, 20))    # False
    print(calc(10, 20, 0)) # 30
    print(calc(10, 20, 1)) # -10
    print(calc(10, 20, 2)) # 200
    print(calc(10, 20, 3)) # 0.5

  • args / kwargs

    • 함수에서 인자로 받을 값들의 갯수가 불규칙할경우 사용
    • args (arguments) : 함수 선언시 앞에 *를 붙여 명시한다.
    • kargs (keyword arguments) : 함수 선언시 앞에 **을 붙여 명시한다.

    패킹 / 언패킹

  • list 혹은 dictionary의 값을 함수에 입력할 때 주로 사용

  • 패킹 (packing)

    • 요소들을 묶어준다.
  • 언패킹 (unpacking)

    • 요소들을 풀어준다.
  • list 에서 사용

    def add(*args):
       result = 0
       for i in args:
           result += i
           
       return result
    
    numbers = [1, 2, 3, 4]
    
    print(add(*numbers)) # 10
    
    """아래 코드와 동일
    print(add(1, 2, 3, 4))
    """
  • dicrionary에서 사용

    def set_profile(**kwargs):
       profile = {}
       profile["name"] = kwargs.get("name", "-")
       profile["gender"] = kwargs.get("gender", "-")
       profile["birthday"] = kwargs.get("birthday", "-")
       profile["age"] = kwargs.get("age", "-")
       profile["phone"] = kwargs.get("phone", "-")
       profile["email"] = kwargs.get("email", "-")
       
       return profile
    
    user_profile = {
       "name": "lee",
       "gender": "man",
       "age": 32,
       "birthday": "01/01",
       "email": "python@sparta.com",
    }
    
    print(set_profile(**user_profile))
    """ 아래 코드와 동일
    profile = set_profile(
       name="lee",
       gender="man",
       age=32,
       birthday="01/01",
       email="python@sparta.com",
    )
    """
    
    # result print
    """
    {
       'name': 'lee',
       'gender': 'man',
       'birthday': '01/01',
       'age': 32,
       'phone': '-',
       'email': 'python@sparta.com'
    }
    
    """

객체 지향

  • 객체를 모델링 하는 방향으로 코드를 작성하는것

  • 캡슐화

    • 특정 데이터의 엑세스를 제한하여 데이터가 직접적으로 수정되는것을 방지
    • 검증된 데이터만을 사용할 수 있음
  • 추상화

    • 사용되는 객체의 특성중, 필요한 부분만 사용하고 필요하지 않은 부분은 제거하는 것을 의미
  • 상속

    • 기존에 작성된 클래스의 내용을 수정하지않고 그대로 사용하기위해 사용하기위한 방식
    • 클래스 선언시 상속받을 클래스를 지정 할 수 있다.
  • 다형성

    • 하나의 객체가 다른 여러 객체로 재구성되는 것
    • ex) 오버라이드, 오버로드 등

getter / setter

  • property
    • 값을 얻을 때 호출되는 메소드
    • 인스턴스 메소드에 @property 데코레이터를 붙이면 그 인스턴스 메서드는 ( )을 붙이지 않고도 호출 할 수 있다.
    • @property 가 붙은 메소드는 값을 얻을때 호출되기때문에 getter 라고도 불린다.
  • getter
    • 값을 얻을때 호출되는 메소드
  • setter
    • 값을 설정할때 호출되는 메소드
profile
나는 탱구

0개의 댓글