Visual Studio Code 설치 및 환경 세팅
python 3.x 최신 버전 설치
vs code python extension 설치
Ctrl + Shift + P 로 검색 켜서 Python Select Interpreter → Python 3.x (설치한 파이썬 버전) 선택
→ F5 누르면 Python Debugger 뜨는 거 확인 가능
변수의 시작은 숫자로 불가
(x) 1_first = 1
변수명에 특수문자 불가
(x) @_first = 1
(x) fir^st = 1
언더스코어(_)는 변수 시작 가능
(o) _first = 1
예약어는 변수로 사용 불가
(x) for = 1
함수는 변수명으로 사용 가능
(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()
: 해당 문자의 처음 위치(인덱스)를 알려줌
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'))
: ()
: 불변 자료형
: 튜플은 요솟값을 제거할 수 없다
: 튜플은 요솟값을 변경할 수 없다
: 문자열, 리스트와 마찬가지로 []로 인덱싱 가능
: 문자열, 리스트와 동일
더하기
: 문자열, 리스트와 동일하게 두 개의 튜플이 합쳐진다
곱하기
: 문자열, 리스트와 동일하게 반복이 일어난다
길이
: 문자열, 리스트와 동일하게 len() 함수를 사용한다
리스트와 튜플은 모두 요소로 구성됨
리스트와 튜플처럼 여러 요소를 하나의 변수에 담아주는 것을 패킹이라고 함
여러 요소를 각각의 변수에 담아주는 것을 언패킹
# 패킹
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}
key 와 value 가 한 쌍으로 매핑됨
딕셔너리는 리스트나 튜플처럼 순차적으로 해당 요솟값을 구하지 않고 key 를 통해 value 를 얻음
시퀀스 자료형
: 요소에 접근할 때 순서를 이용함
매핑형 자료형
: 요소에 접근할 때 순서와 상관없이 매핑된 값을 이용함
반복문과 조건문을 같이 사용
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번 학생 합격입니다.
: 반복문을 종료하지 않고 반복문 초기로 되돌아 가는 구문
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번 학생 합격입니다.
: 숫자의 범위를 표현하는 함수
: 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 [발생오류 [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 절을 사용할 수 있다. 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:
...
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 절이 수행된다.