현대오토에버 모빌리티 sw 스쿨 3기 [클라우드]/PYTHON

Python 강의 2일차 / 현대오토에버 모빌리티 SW 스쿨 / 클라우드반

맹꽁이+ 2026. 1. 3. 11:53

1. 연산자

1) 비교 연산자

  • __gt__, __lt__, __gte__, __lte__
    • >: 왼쪽 값이 오른쪽 값보다 큼 (a > b) → False
    • <: 왼쪽 값이 오른쪽 값보다 작음 (a < b) → True
    • >=: 왼쪽 값이 오른쪽 값보다 크거나 동일 (a >= b) → False
    • <=“ 왼쪽 값이 오른쪽 값보다 작거나 동일 (a <= b) → True모든 종류의 데이터에서 가능
    • ==: 값이 동일함 (a == b) → False
    • !=: 값이 동일하지 않음 (a != b) → True 



2) 산술 비트 연산자

  • 그래픽 프로그램의 색상 관련 기능 과 프로그램의 단축 키 그리고 삭제 나 복사를 구현할 때 사용합니다.
  • 정수 데이터를 2진수로 변환해서 비트 단위로 연산을 수행 한 후 결과를 10진 정수로 리턴하는 연산자로 시스템 프로그래밍이나 데이터 분석 분야에서 많이 이용
    • &: AND 연산으로 둘 다 1일 때만 1
    • |: OR 연산. 둘 중 하나만 1이여도 1
    • ^: XOR 연산. 두 개의 데이터가 다르면 1
    • ~: 1의 보수 연산. (~a) = -61 → 1100 0011 
    • <<: 왼쪽 시프트 연산자. 변수의 값을 왼쪽으로 지정된 비트 수 만큼 이동해주는 연산자로 한 번 이동할 때 마다 곱하기 2 한 효과
    • >>: 오른쪽 시프트 연산자. 변수의 값을 오른쪽으로 지정된 비트 수 만큼 이동해주는 연산자로 한 번 이동할 때마다 나누기 2한 효과


3) 논리 비트 연산자

  • and:  둘다  True  일 때만  True  이고 나머지 경우는  False
  • or:  둘다  False일 때만  False  이고 나머지 경우는  True
  • not:  True  이면  False  이고  Fasle  일 때는  True
    • and와 or는 조건의 순서를 변경해도 결과는 동일
    • 그러나 and가 or 보다 우선순위가 높음
    • and 는 앞의 데이터가 Fasle  이면 뒤의 데이터는 확인하지 않고 or는 앞의 데이터가 True이면 뒤의 데이터를 확인하지 않음
  • bool 데이터가 아닌 경우
    • 숫자 데이터는 0이면  False  그 이외의 경우는 True 로 간주
    • 컨테이너는 데이터가 없으면 False 그 이외의 경우는 True로 간주

📍퀴즈: 윤년의 조건

  • 4의 배수이고 100의 배수가 아닌 경우
  • 400의 배수인 경우

  •  
년도가  year 라는 변수에 저장된 경우 윤년 판별 조건을 작성
year % 4 == 0 and year % 100 != 0 or year % 400 == 0

 year % 400 == 0 or year % 4 == 0 and year % 100 != 0

 

4) 기타 연산자

  • type(데이터): 데이터의 자료형을 문자열로 리턴: 외부에서 데이터를 읽어왔을 때 타입을 확인하기 위한 용도로 사용
  • id(데이터): 저장 위치를 구분하기 위한 코드 리턴: 2개의 데이터가 저장된 곳이 같은 데이터인지 확인할 때 이용


5) 데이터 형 변환

  • 데이터의 형식을 변경하는 것
    • 자료형(데이터)
  • 모든 데이터는  str로 변경 가능
  • 숫자 데이터로 변경은 가능한 경우만 수행하고 그렇지 않으면 에러가 발생


2. 파이썬에서 콘솔 입출력

  • 출력:  print
  • 입력:  input([message])
    • 입력받은 데이터는 무조건 문자열로 리턴


3. 제어문

프로그램의 흐름을 변경하는 것으로 반복 과 분기가 있음

1) if - 조건 분기

  • 기본 형식
if bool  결과식이나 변수:
    결과식이나 변수가  True  일 때 수행할 문장

[elif 앞의 조건이 False  일 때 판별할 bool  결과식이나 변수:
     결과식이나 변수가  True  일 때 수행할 문장]

[else:
     앞의 모든 조건이  False  일 때 수행할 문장]

 

  • elif 는 개수 제한 없음
  • else 는 생략하거나 한 번만 나와야 함
    • else를 사용할 때 예외적인 처리로 이용하는 경우도 있습니다.

📍숫자 데이터를 입력받아서 아래 조건에 따라 출력하기  

  • 80-100 사이면 합격
  • 60-79 사이면 보류
  • 0-59 사이면 불합격
#입력받아서 정수로 변환
score = int(input("점수를 입력하세요:"))
if score >= 80 and score <= 100:
    print("합격")
elif score >= 60 and score <= 79:
    print("보류")
elif score >= 0 and score <= 59:
    print("불합격")
else:
    print("잘못된 점수를 입력한 것 같습니다.")


2) switch - 값에 의한 분기

  • python 에서는  switch 가 없습니다.
  • python 3.10 버전에서  match - case를 도입
  • 기본 형식
match 데이터:
    case 값1:

          데이터가 값1일 때 수행할 문장
# case는 여러개 사용 가능
# default를 만들 때는 마지막 case _: 로 만들면 됨

 

3) while -  반복

  • 기본 형식
# 결과식이 False 가 될 때 까지 내용을 반복

while bool 결과식이나 변수:
    반복할 내용



# 무한 반복
while True:
    반복할 내용

 

 


📍1부터 10까지 순서대로 출력

n = 1

while n <= 10:
    print(n)
    n = n + 1

 


📍빨강 파랑 녹색을 번갈아 가면서 출력하도록 작성

import time

n = 0

while True:
    if n % 3 == 0:
        print("빨강")
    elif n % 3 == 1:
        print("파랑")
    else:
        print("녹색")
    
    match n % 3:
        case 0:
            print("빨강")
        case 1:
            print("파랑")
        case 2:
            print("녹색")
    n = n + 1
    time.sleep(1)



📍1-2025년까지 윤년의 개수 구하기

n = 1
count = 0 

while n <= 2025:
    if n % 4 == 0 and n % 100 != 0 or n % 400 == 0:
        count  = count + 1
    n = n + 1

print(count)

 

 

  • while ~  else
    • else는 반복문을 중간에 중단하지 않고 완료했을 때 수행할 문장을 기록


📍1부터 10까지 출력하고 정상적으로 완료되면 완료라고 출력

n = 1

while n <= 10:
	print(n)
 	n = n + 1
    
if n == 11:
	print("완료")

 

4) for -  순회

 

  • 컨테이너의 데이터를 순차적으로 하나씩 접근할 때 사용
  • 기본 형식
for  임시변수 in 컨테이너:
	수행할 내용
  • 임시변수를 사용하지 않는 경우는 _로 임시변수를 만들면 됩니다.
  • range: 숫자를 가지고 컨테이너를 만들어주는 함수
  • __iter__: 컨테이너가 for를 사용할 수 있는지 확인하고자 할 때 사용
  • for ~ else:  정상적으로  for를 완료했을 때 수행할 구문을 else 에 작성


5) 제어문은 중첩 가능

바깥쪽 제어문에서 시작해서 안쪽 제어문이 전부 수행되고 나면 바깥쪽 제어문의 시작부분으로 이동해서 수행


6) break

  • while 이나  for를 수행하는 도중 중단하고 싶을 때 사용


7) continue

  • while 이나  for를 수행하는 도중 다음으로 넘어가고 싶을 때 사용


4. Function(함수)

1) 정의

  • 한 번에 실행되어야 하는 문장들을 하나의 이름으로 묶어서 독립적으로 실행할 수 있도록 하는 것
  • 함수의 이름만 호출하면 함수의 참조가 되고 함수이름()은 함수의 호출(실행)
  • 함수 사용의 장점
    • 함수 이름과 매개변수를 대입해서 호출하면 함수 안에 만들어진 코드가 실행되기 때문에 동일한 코드를 여러 번 사용해야 하는 경우 코드의 중복을 제거할 수 있어서 유지보수를 할 때 편리
    • 코드의 일정 부분을 별도의 논리적인 개념으로 분리할 수 있기 때문에 코드의 가독성을 높여 줌
  • 함수의 종류
    • Built-In Function(Maker Function, 내장 함수): 파이썬이 제공해주는 함수
    • User Define Function(사용자 정의 함수): 개발자가 만든 함수
  • 파이썬 함수는 일급 객체(하나의 데이터로 취급)
    • 함수도 하나의 자료형
    • runtime(실행하는 도중)에 생성하는 것이 가능
    • 변수에 대입할 수 있음
    • 함수의 매개변수로 사용 가능
    • 함수의 결과로 리턴하는 것이 가능


2) python 이 제공하는 함수

  • dir(__builtins__) 으로 확인 가능


3) 파이썬에서 함수 정의 방법

  • 기본 형식
def 함수이름(인수들):
    문장을 나열
    return <값>
  • 인수는 함수를 호출할 때 넘겨주는 데이터
  • return 은 함수를 호출해서 실행한 후 넘겨줄 데이터로 없으면  return 을 생략해도 되고  return None 으로 하면 되는데 return을 만나면 이후 문장은 실행되지 않고 호출한 곳으로 돌아갑니다.


4) 함수 호출

  • 기본 형식
함수이름(인수에 해당하는 데이터 나열)

 

5) return

  • 파이썬에서는 함수를 정의할 때 리턴되는 데이터 타입을 기재하지 않아도 되지만 최근에는 가독성 때문에 작성하는 것도 가능
def 함수이름(인수들)->리턴되는데이터의 자료형:
    문장을 나열
    return <값>
  • 여러 개의 데이터를 리턴하고자 하는 경우는 ,로 구분해서 리턴하면 되는데 이 때 리턴되는 데이터의 자료형은 튜플입니다.
  • 모든 함수는 여러 개의 데이터를 리턴할 수 없습니다.
  • 여러 개의 데이터를 리턴하고자 할 때는 컨테이너 나 인스턴스로 만들어서 리턴합니다.

 

📍정수 2개를 더해서 리턴하는 함수

  • 가독성을 높여주기 위해서 최근에는 함수의 리턴하는 데이터의 타입을 기재함
def integerAddWithInteger(first, second) -> int:
    result = first + second
    return result

#함수 호출
k = integerAddWithInteger(20, 30)
print(k)

 

def tupleRetrun(first, second) -> tuple:
    result1 = first + second
    result2 = first - second
    return (result1, result2)

print(tupleRetrun(100, 200))

 

 

6) argument(인수, 인자)

  • parameter 라고 하기도 하는데 함수를 호출할 때 넘겨주는 데이터
  • 함수 내부에서 이 데이터를 가지고 처리를 수행한 후 결과를 돌려주거나 데이터에 변형을 가하게 됩니다.
  • 예전에는 인수의 이름만 작성했지만 최근에는 이름:자료형 의 형태로 명시적으로 자료형을 기재하는 것을 권장합니다.
  • 인수에 아무런 기호가 없다면 인수는 함수를 호출할 때 반드시 대입해야 합니다.
def tupleRetrun(first:int, second:int) -> tuple:
    result1 = first + second
    result2 = first - second
    return (result1, result2)

print(tupleRetrun(100, 200))

 

  • 매개변수로 스칼라 데이터를 사용하면 값을 복사해서 넘겨주고 벡터 데이터를 사용하면 참조를 복사해서 넘겨줍니다.
  • 참조를 넘겨주면 원본 데이터를 변경할 수 도 있습니다.

 

#스칼라 데이터를 넘겨주면 데이터를 복사해서 넘겨줍니다.
#함수 내부에서 데이터를 변경해도 원본에는 영향이 없습니다.
def callByValue(a:int) -> None:
    print("a:", a)
    a = a + 1
    print("a:", a)

x = 10
callByValue(x)
print("x:", x)



📍벡터 데이터를 넘겨주면 데이터의 참조를 넘겨줍니다.

# 함수 내부에서 데이터의 참조를 받아서 세부 데이터를 수정하면 원본도 같이 수정됩니다..
def callByReference(li:list) -> None:
    print("li:", li)
    li[0] = li[0] + 1
    print("li:", li)

l = [10, 20]
callByReference(l)
print("l:", l)


📍 함수를 호출할 때 매개변수의 이름 과 함께 데이터를 넘기는 것이 가능합니다.

  • 이렇게 이름을 사용하면 순서를 변경해서 대입하는 것도 가능합니다.
def sub(first:int, second:int):
    result = first - second
    return result

print(sub(100, 200))
#이름을 사용해서 매개변수를 설정하는 것도 가능합니다.
print(sub(first=100, second=200))
print(sub(second=200, first=100))

 


📍파이썬에서는 매개변수를 만들 때 기본값을 설정하는 것이 가능

  • def 함수이름(이름:자료형=기본값...) -> 리턴타입:
    • 기본값이 있는 매개변수는 호출할 때 생략가능한데 생략하면 기본값으로 작업을 수행합니다.
    • 한 번 기본값이 설정되면 그 이후의 매개변수는 전부 기본값을 설정해야 합니다.
def sub(first:int, second:int=0):
    result = first - second
    return result

print(sub(first = 100, second = 200))
print(sub(first = 100))

 

  • 순수 함수
    • 입력하는 데이터가 같으면 항상 동일한 결과를 리턴하는 함수
    • 입력하는 데이터를 수정하지 않는 함수
  • 매개변수의 unpacking
    • 매개변수로 list 나 tuple 또는 set을 대입할 때 * 과 함께 대입하면 자동으로 압축이 해제되서 순서대로 매개변수에 대입됨
    • dict 는 key가 대입되며 ** 을 이용해서 대입하면 매개변수 이름 과 대응되는 key 이름으로 매칭
  • 가변 매개변수
    • 매개변수의 개수에 상관없이 대입받도록 하는 문법
    • *을 이용해서 정의하면  매개변수를 tuple 만들어서 사용하고 **을 이용해서 정의하면  dict 가 만들어 집니다.


7) recursion

  • 재귀함수라고 하는데 함수가 자기 자신을 내부에서 다시 호출하는 것
  • 메모리 부담은 커지지만 코드가 단순화 됩니다.

📍피보나치 수열 구현

  • 피보나치 수열: 처음 2개 항은 1 그 다음 부터은 이전 두 개 항의 합
  • 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89...
# 일반적인 코드
def fibonacci1(su : int) -> int:
result = 1
    first = 1
    second = 1

	for _ in range(3, su+1, 1):
        result = first + second
        second = first
        first = result
        return result

print(fibonacci1(10))
print(fibonacci1(100))

# 재귀 함수
def fibonacci2(su : int) -> int:
    if su == 1 or su == 2:
	    return 1
    else:
	    return fibonacci2(su - 1) + fibonacci2(su - 2)

print(fibonacci2(10))
print(fibonacci2(100))

 

 

📍 실행 시간, 전달 인수, 반환값을 자동으로 출력하는 예제

import time

#Decorate 된 함수를 호출할 때 마다 시간을 측정해서 실행에 소요된 시간, 전달된 인수, 반환값을 출력하는 Decorate
def clock(func):
    def clocked(*args):
        #현재 시간 저장
        t0 = time.time()
        #실제 넘어오는 함수(factorial)를 수행해서 결과를 result에 저장
        result = func(*args)
        #함수를 수행한 후의 시간에서 이전에 저장한 시간을 빼서 걸린 시간을 저장
        elapsed = time.time() - t0
        #함수 이름을 찾아서 함수 이름 과 결과를 출력
        name = func.__name__
        arg_str = ', '.join(repr(arg) for arg in args)
        print('[%0.8fs] %s(%s) -> %r' % (elapsed, name, arg_str, result))
        return result
    return clocked

@clock
def factorial(n):
    return 1 if n < 2 else n*factorial(n-1)

print('6! =', factorial(6))