25/09/19-25 파이썬

344th·2025년 12월 11일

AWS AI

목록 보기
15/48

환경 세팅

  1. Visual Studio Code 설치 및 환경 세팅

  2. python 3.x 최신 버전 설치

  3. vs code python extension 설치

  4. Ctrl + Shift + P 로 검색 켜서 Python Select Interpreter → Python 3.x (설치한 파이썬 버전) 선택

    → F5 누르면 Python Debugger 뜨는 거 확인 가능

파이썬 기초

파이썬 변수 규칙

  1. 변수의 시작은 숫자로 불가

    (x) 1_first = 1

  2. 변수명에 특수문자 불가

    (x) @_first = 1

    (x) fir^st = 1

  3. 언더스코어(_)는 변수 시작 가능

    (o) _first = 1

  4. 예약어는 변수로 사용 불가

    (x) for = 1

  5. 함수는 변수명으로 사용 가능

    (o) print = 1

    → 그러나 함수가 함수의 기능을 잃고 변수로 지정이 되므로 주의할 것

단축어

  • Ctrl + / : 주석 처리

함수

문자열 뒤에 () 소괄호가 붙는 경우 함수 or 클래스

print()

: 내부의 요소를 출력

print(123)

# 출력: 
123

type()

: 내부의 요소의 유형을 알려주는 함수

print(type(123))

# 출력: 
<class 'int'>

print(type("hello"))
# 출력:
<class 'str'>

input()

: 입력을 받는 함수

: print() 는 출력, input() 는 입력을 담당

  • 입력을 받으면 변수에 저장해야 사용 가능
  • input() 함수에는 문자열을 넣을 수 있으며 입력 유도 가능
first = input()

# 실행 시 입력이 들어올 때까지(엔터가 기점) 기다림 

first = input("first에 저장할 값을 넣어주세요: ")

# 실행 시 출력
first에 저장할 값을 넣어주세요: 
# 해당 문자열 뒤에 입력 값 넣으면 됨
first = input()
first = input("first에 저장할 값을 넣어주세요: ")
print(first)

# 출력:
hello
first에 저장할 값을 넣어주세요: bye
bye

주석

목적

  • 설명
  • 코드 비활성화

한 줄 주석 #

여러 줄을 한 번에 처리하고 싶은 경우 드래그하여 Ctrl + /

여러줄 주석

“”” (주석 내용) “””

‘’’ (주석 내용) ‘’’

파이썬은 대소문자를 구별

자료형

수치형

정수

: int

: 정수를 대입하면 됨

실수

: float, double …

: 부동소수점이 있으면 실수

문자열

인덱싱

: 데이터 추출과 관련

a = "Life is too short, You need python"
print(a[3])

슬라이싱

: 문자열의 연속된 구간을 추출

: [문자의 첫 위치:문자의 끝 위치]

문자열 내부는 함부로 변경이 불가함

아예 새로운 문자열로 변경해줘야 함

포매팅 %

정수 포매팅

: 문자열 내부의 특별한 값이 계속 바뀌어야 하는 경우

print("I eat %d apples.", % 3)

# 출력:
I eat 3 apples.

문자열 포매팅

print("I eat %s apples." % "five")

# 출력:
I eat five apples.

문자열 함수

count()

: 문자열에서 해당 문자의 개수를 세줌

a = "hobby"
a.count('b')

2

find()

: 해당 문자의 처음 위치(인덱스)를 알려줌

  • 해당 문자가 없을 경우 -1 반환
a = "Python is the best choice"
a.find('b')

14

index()

: 해당 문자의 위치(인덱스)를 알려줌

  • 해당 문자가 없을 경우 오류 발생
a = "Life is too short"
a.index('t')

8

join()

: 문자열 사이에 삽입

",".join('abcd')

a,b,c,d

공백 제거

  • lstrip() : 왼쪽 공백 지우기
  • rstrip() : 오른쪽 공백 지우기
  • strip() : 양쪽 공백 지우기

replace()

: 문자열 바꾸기

a = "Life is too short"
a.replace("Life", "Your Leg")

'Your leg is too short"

split()

: 문자열 나누기

  • 기본: 공백을 기준으로 문자열을 나눔
  • 구분자 지정 가능

리스트

리스트 연산

리스트 더하기

: 합치기

: 문자열과 동일

리스트 곱하기

: 반복하기

: 문자열과 동일

리스트 길이

len()

리스트 수정과 삭제

리스트 값 수정

a = [1,2,3]
a[2] = 4
a

[1,2,4]

리스트 요소 삭제

del 객체

a = [1,2,3,4,5]
del a[2:]
a

[1,2]

불변 자료형과 가변 자료형

불변 자료형

  • 문자열
  • 튜플
a = "12345"
b = a
c = a[:]

# a, b, c 모두가 메모리의 같은 위치를 가리킴
# 불변 자료형이므로

가변 자료형

  • 리스트
a = [1,2,3,4,5]
b = a
c = a[:]

# a, b 는 같은 위치를 가리킴
# c 만 다른 위치
# 리스트는 가변 자료형이므로

리스트 관련 함수

append()

: 리스트 맨 마지막에 요소 추가

sort()

: 리스트의 요소를 순서대로 정렬

  • 숫자 오름차순
  • 문자 오름차순

reverse()

: 리스트를 역순으로 뒤집음

index()

: 요소의 위치(인덱스)를 리턴

insert()

: 원하는 위치에 요소 삽입

remove()

: 리스트에서 첫번째로 나오는 요소(값으로 검색)를 삭제

pop()

: 리스트의 맨 마지막 요소를 리턴하고 그 요소 삭제

count()

: 리스트 안에 해당 요소(값으로 검색)가 몇 개 있는지 조사하여 그 개수를 리턴함

extend()

: 매개변수에 리스트만 올 수 있음

: 리스트 + 리스트

a = [1,2,3]
a.extend([4,5])
a

[1,2,3,4,5]

a.extend([4,5])

a += [4,5]

위 두개 동일

튜플

: () 소괄호로 묶어주는 요소들의 묶음

: 리스트 내부 요소 변경 가능(가변 자료형), 튜플 내부 요소 변경 불가능(불변 자료형)

: 메모리 사용량의 차이가 존재

# 빈 튜플 생성
t1 = ()

# 1개의 요소만 가진 튜플 생성
# 쉼표 반드시 붙여야 함
# 붙이지 않으면 연산 시에 우선연산을 위해 쓴거라고 인터프리터가 해석함
t2 = (1,)

# 여러 요소를 가진 튜플 생성
t3 = (1,2,3)

# 소괄호 생략 가능
t4 = 1,2,3

# 중첩 튜플 생성
t5 = ('a', 'b', ('ab', 'cd'))

파이썬 자료형

튜플

: ()

: 불변 자료형

리스트 vs. 튜플

  • 리스트는 [], 튜플은 ()
  • 리스트는 가변 자료형, 튜플은 불변 자료형
  • 리스트는 요솟값의 생성, 삭제, 수정이 가능하지만, 튜플은 요솟값을 바꿀 수 없다

튜플 요소 제거

: 튜플은 요솟값을 제거할 수 없다

튜플 요소 변경

: 튜플은 요솟값을 변경할 수 없다

인덱싱

: 문자열, 리스트와 마찬가지로 []로 인덱싱 가능

슬라이싱

: 문자열, 리스트와 동일

튜플 연산

더하기

: 문자열, 리스트와 동일하게 두 개의 튜플이 합쳐진다

곱하기

: 문자열, 리스트와 동일하게 반복이 일어난다

길이

: 문자열, 리스트와 동일하게 len() 함수를 사용한다

패킹 vs. 언패킹

리스트와 튜플은 모두 요소로 구성됨

리스트와 튜플처럼 여러 요소를 하나의 변수에 담아주는 것을 패킹이라고 함

여러 요소를 각각의 변수에 담아주는 것을 언패킹

# 패킹
t = (1,2,3,4,5)
# 언패킹
a,b,c,d,e = t

print(a,b,c,d,e)

1 2 3 4 5

언패킹은 데이터를 분할해서 할당 가능

a, *b = t
print(a, b)

1 [2, 3, 4, 5]

a, b, *c = t
print(a,b,c)

1 2 [3, 4, 5]

튜플 → 리스트 list()

l = list(t)
print(l)

[1, 2, 3, 4, 5]

리스트 → 튜플 tuple()

t = tuple(l)
print(t)

(1, 2, 3, 4, 5)

딕셔너리

{key : value}

keyvalue 가 한 쌍으로 매핑됨

딕셔너리는 리스트나 튜플처럼 순차적으로 해당 요솟값을 구하지 않고 key 를 통해 value 를 얻음

시퀀스 자료형 vs. 매핑형 자료형

시퀀스 자료형

: 요소에 접근할 때 순서를 이용함

  • 문자열
  • 리스트
  • 튜플

매핑형 자료형

: 요소에 접근할 때 순서와 상관없이 매핑된 값을 이용함

반복문

for문

반복문과 조건문을 같이 사용

marks = [90, 25, 67, 45, 80]

number = 0
for mark in marks:
    number = number + 1
    if mark >= 60:
        print(f"{number}번 학생 합격입니다.")
    else:
        print(f"{number}번 학생 불합격입니다.")

실행 결과

1번 학생 합격입니다.
2번 학생 불합격입니다.
3번 학생 합격입니다.
4번 학생 불합격입니다.
5번 학생 합격입니다.

countinue 문

: 반복문을 종료하지 않고 반복문 초기로 되돌아 가는 구문

marks = [90, 25, 67, 45, 80]

number = 0
for mark in marks:
    number = number + 1
    if mark >= 60:
        print(f"{number}번 학생 합격입니다.")
    else:
        continue

실행 결과

1번 학생 합격입니다.
3번 학생 합격입니다.
5번 학생 합격입니다.

range()

: 숫자의 범위를 표현하는 함수

lambda()

: ambda는 함수를 생성할 때 사용하는 예약어로, def와 동일한 역할을 한다.

: 보통 함수를 한 줄로 간결하게 만들 때 사용한다.

: 우리말로는 ‘람다’라고 읽고 def를 사용해야 할 정도로 복잡하지 않거나 def를 사용할 수 없는 곳에 주로 쓰인다.

사용법은 다음과 같다.

함수_이름 = lambda 매개변수1, 매개변수2, ... : 매개변수를_이용한_표현식

>>> add = lambda a, b: a+b
>>> result = add(3, 4)
>>> print(result)
7

lambda로 만든 함수는 return 명령어가 없어도 표현식의 결괏값을 반환한다.

예외 처리

오류는 언제 발생하는가?

>>> f = open("나없는파일", 'r')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
FileNotFoundError: [Errno 2] No such file or directory: '나없는파일'

예외 이름: 에러 메시지

오류 예외 처리 기법

try-except 문

기본 구조

try:
    ...
except [발생오류 [as 오류변수]]:
    ...

try 블록 수행 중 오류가 발생하면 except 블록이 수행된다. 하지만 try 블록에서 오류가 발생하지 않는다면 except 블록은 수행되지 않는다.

1. try-except만 쓰는 방법

try:
    ...
except:
    ...

이 경우에는 오류의 종류에 상관없이 오류가 발생하면 except 블록을 수행한다.

2. 발생 오류만 포함한 except 문

try:
    ...
except 발생오류:
    ...

이 경우는 오류가 발생했을 때 except 문에 미리 정해 놓은 오류와 동일한 오류일 경우에만 except 블록을 수행한다는 뜻이다.

3. 발생 오류와 오류 변수까지 포함한 except 문

try:
    ...
except 발생오류 as 오류변수:
    ...

이 경우는 두 번째 경우에서 오류의 내용까지 알고 싶을 때 사용하는 방법이다.

이 방법의 예를 들어 보면 다음과 같다.

# try_except.py
try:
    4 / 0
except ZeroDivisionErroras e:
    print(e)

위처럼 4를 0으로 나누려고 하면 ZeroDivisionError가 발생하여 except 블록이 실행되고 오류 변수 e에 담기는 오류 메시지를 출력할 수 있다. 출력되는 오류 메시지는 다음과 같다.

division by zero

try-finally 문

try 문에는 finally 절을 사용할 수 있다. finally 절은 try 문 수행 도중 예외 발생 여부에 상관없이 항상 수행된다. 보통 finally 절은 사용한 리소스를 close해야 할 때 많이 사용한다.

다음 예를 살펴보자.

# try_finally.py
try:
    f = open('foo.txt', 'w')
    # 무언가를 수행한다.

    (... 생략 ...)

finally:
    f.close()  # 중간에 오류가 발생하더라도 무조건 실행된다.

foo.txt 파일을 쓰기 모드로 연 후 예외 발생 여부에 상관없이 항상 파일을 닫아 주려면 try-finally 문을 사용하면 된다.

여러 개의 오류 처리하기

try 문 안에서 여러 개의 오류를 처리하려면 다음과 같이 사용해야 한다.

try:
    ...
except 발생오류1:
   ... 
except 발생오류2:
   ...

즉, 0으로 나누는 오류와 인덱싱 오류를 다음과 같이 처리할 수 있다.

# many_error.py
try:
    a = [1,2]
    print(a[3])
    4/0
except ZeroDivisionError:
    print("0으로 나눌 수 없습니다.")
except IndexError:
    print("인덱싱 할 수 없습니다.")

a는 2개의 요솟값을 가지고 있으므로 a[3]이 IndexError를 발생시켜 "인덱싱 할 수 없습니다."라는 문자열을 출력할 것이다. 인덱싱 오류가 먼저 발생했으므로 4 / 0에 따른 ZeroDivisionError 오류는 발생하지 않는다.

앞에서 알아본 것과 마찬가지로 오류 메시지도 다음과 같이 확인할 수 있다.

try:
    a = [1,2]
    print(a[3])
    4/0
except ZeroDivisionErroras e:
    print(e)
except IndexErroras e:
    print(e)

프로그램을 실행하면 ‘list index out of range’라는 오류 메시지가 출력될 것이다.

다음과 같이 ZeroDivisionError와 IndexError를 함께 처리할 수도 있다.

try:
    a = [1,2]
    print(a[3])
    4/0
except (ZeroDivisionError, IndexError) as e:
    print(e)

2개 이상의 오류를 동일하게 처리하기 위해서는 위와 같이 괄호를 사용하여 함께 묶어 처리하면 된다.

try-else 문

try 문에는 다음처럼 else 절을 사용할 수도 있다.

try:
    ...
except [발생오류 [as 오류변수]]:
    ...
else:  # 오류가 없을 경우에만 수행
    ...

try 문 수행 중 오류가 발생하면 except 절, 오류가 발생하지 않으면 else 절이 수행된다.

다음은 try 문에 else 절을 사용한 간단한 예제이다.

# try_else.py
try:
    age=int(input('나이를 입력하세요: '))
except:
    print('입력이 정확하지 않습니다.')
else:
if age <= 18:
        print('미성년자는 출입금지입니다.')
else:
        print('환영합니다.')

만약 '나이를 입력하세요: '라는 질문에 숫자가 아닌 다른 값을 입력하면 오류가 발생하여 '입력이 정확하지 않습니다.'라는 문장을 출력한다. 오류가 없을 경우에만 else 절이 수행된다.

profile
새싹 개발자

0개의 댓글