- 예제코드는 https://github.com/iseohyun/python-tutorial에서 다운로드 받을 수 있습니다.
- 예제코드 적용 방법 및 환경설정은 여기를 참고하십시오
- VScode의 사용법 안내는 여기를 참고하십시오
목차보기
- 환경구축하기 : 실습 준비, 프로그램, 예제코드 다운로드 방법
- 시작하기 1_HelloWorld : 예제코드 실행 및 코드 보는 방법
- 변수 2_variable : 데이터를 순서대로 읽고, 쓰는(저장하는) 방법
- 출력 테크닉 3_print : 저장된 데이터를 잘(보기 좋게) 출력하는 방법
- 로직 4_Logic : 조건에 따라 실행 순서를 변경(추가, 건너뜀, 반복)하는 방법
- 함수 5_Function : 만들어진 로직을 재사용 하는 방법
- 콜렉션 6_Collections : [저장 단위 확장] 코드에 사용될 데이터를 묶음 단위로 사용하는 방법
- 모듈 7_Module : [프로그램 연계] 작성한(작성된) 코드를 파일 단위로(또는 더 큰 단위로) 가져다 쓰는 방법
- 예외 8_Exception : 프로그램 오류에 대한 대처
- 객체 9_Class : [더 큰 프로젝트] 프로그램을 순서지가 아닌 객체로(대상으로) 대하는 자세(문법)
- 표준 라이브러리 10_Std lib : 기본으로 제공되는 객체(예제)
시작하기1_HelloWorld
파일을 만들고, 'hello.py'로 저장하십시오. 다음 내용을 입력하십시오.
1_HelloWorld > 1_HelloWorld.pyprint("Hello World")
'실행하기'(run code, F5)를 통해서 코드를 실행합니다. Terminal에(ctrl + `(backtick, Tilt(~)랑 같이 있는 키))에서 수행 결과를 확인 할 수 있습니다.
check : print("...")을 통해서 출력 할 수 있습니다.
주석
주석은 프로그램이 실행되지 않는, 설명을 작성하는 부분입니다.
1_HelloWorld > 02_Comment.py
print("실행코드") # 이 부분은 주석입니다.
셔뱅
유닉스 계열 운영체제에서 첫 줄에 실행되는 스크립트를 삽입할 수 있습니다.
1_HelloWorld > 03_Shebang.py
#!/usr/bin/env python3
print("Shebang(#!)은 첫 줄에 들어갑니다.")
코덱
코덱이란, 글자 코드를 표현하는 방식입니다. 코드란 숫자입니다. 모든 글자는 하나의 숫자(코드)와 1:1 대응되어 있습니다(예: ascii, unicode).
- 인코딩: "코드" -> "코드+ 저장방식"
- 디코딩: "코드 + 저장방식" -> "코드"
ascii는 영문과 일부 특수기호, 총 128가지 기호를 표현할 수 있고, unicode는 65,536개의 문자를 표현할 수 있습니다. 현재 65,536의 문자에 세계 각국의 문자와 기호를 담고있습니다. 초기의 컴퓨터는 메모리가 충분하지 않았기 때문에, 한글, 일본어, 중국어 등등 특정 나라의 코드들만 취합하여 code-set을 만들어 대응했습니다(EUC-KR, EUC-JP, GB 2312..). 현재는 모든 나라의 문자를 한 번에 표현할 수 있는 UTF-8의 인코딩이 주로 사용됩니다. (자세한 내용은 여기를 참고하십시오.)
py파일의 코덱을 지정하려면 "-*-" 기호를 다음과 같이 사용합니다.
1_HelloWorld > 04_Codec.py
# -*- coding: EUC-KR -*-
print("This file is encorded by EUC-KR. EUC-KR로 인코딩 된 파일입니다.")
초기값
프로그램을 실행하기 앞서 입력을 할 수 있습니다. 2가지 방법이 있습니다.
- 직접 입력하는 방법
※ terminal창에서 방향키 ↑를 누르면 이전에 실행한 명령을 불러옵니다. 뒤이어 작성 할 수 있습니다.
1_HelloWorld > 05_Arguments.pyC:\> python.exe arguments.py arg1 arg2
- 자동 입력하는 방법
만약 인자의 입력을 반복 실행(테스트)해야 한다면, 자동으로 실행되도록 할 수 있습니다. vscode에서 ">Debug: Add Configuration..."명령을 통해 "launch.json"파일을 추가하십시오. 디버깅 모드(ctrl+f5)로 수행하여야 합니다.
다음은 "launch.json"에 추가될 내용의 예시입니다.{ // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { "name": "Python Debugger: Current File", "type": "debugpy", "request": "launch", "program": "${file}", "console": "integratedTerminal", "args": [ "arg1", "arg2" ] } ] }
변수2_variable
숫자
"=" 기호를 이용해서 숫자를 저장 할 수 있습니다. 변수란 숫자가 저장되는 공간을 말합니다. 변수란 무엇을 저장하든 저장하는 값에 따라 그 내용이 변하는 수라는 의미입니다. 아래 예제에서 변수란 "var", 상수(항상 같은 수)란 "1", "2", "4"와 같은 수 입니다.
변수의 이름에는 작명 규칙이 존재합니다. (참고 : 파이썬-스타일가이드-이름 규칙(링크))
- (필수) 사용 가능한 문자: 알파벳(a-z, A-Z), 숫자(0-9), 밑줄(_, undersocre)
- (필수) 숫자 시작 X (var1 (o), 1var (x))
- (필수) 대소문자를 구분 (Abc != abc)
- (필수) 예약어(keywords, 제어를 위해 미리 약속된 단어) X
- (권장) 소문자를 사용하십시오
- (권장) 명확하고 간결하게 (문장x)
- (권장) 두 단어 사이에 "_"를 사용합니다 (추가 "_" 용법)
- 접두 : 내부 변수로 사용 할 때 (예: _var)
- 접미 : 예약어와 충돌을 방지하고자 할 때 사용 (예: class_)
- 이중 접두: 이름 장식(name mangling) (예:__var)
- 이중 양쪽: 매직(magic)속성 (예: __init__)
- (권장)너무 짧은 변수(예: a, b, i, j)등은 간단한 반복문 또는 임시변수에 사용
var = 1 # var에 1을 단순 저장
var = 2 + 2 # var에 2 + 2의 연산된 결과, 즉 4를 저장
숫자를 표현하는 방법
우리가 코드에 작성하는 것은 주로 10진수지만, 실제로 컴퓨터에 저장되는 것은 2진수 입니다. (자세한 내용은 칼럼-2진법 이해하기를 참조하십시오.)
- (멱)지수 : ###e### 형태의 표현은 매우 크거나 작은 수를 표현하는데 좋은 방식입니다.
- 0으로 시작하는 숫자는 10진수가 아님을 의미합니다.
- x는 hex = 6를 의미하며 16진수 0x1a3과 같이 작성합니다.
- b는 binary = 2를 의미하며 2진수 0b1011과 같이 작성합니다.
- 0123과 같이 8진수를 의미하는 숫자도 있었으나, python은 지원 X
- 복소수를 표현 할 수 있습니다.
exp = 2.5e4 # (멱)지수, 25000
hex = 0xF # 16진수, 0b1111 = 16
binary = 0b1110 # 2진수, 15
complex_num1 = 3 + 4j # 복소수(complex number)
가독성을 올리는 방법
숫자 사이의 _는 무시합니다.
2_Variable > 01-2_Readability.py
i = 3_000_000 # 3자리 마다 끊어서 사용
i = 4_0000_0000 # 4자리 마다 끊어서 사용
연산자
분류 | 연산자 | 설명 | 예시 | 결과 |
---|---|---|---|---|
산술 연산자 | + | 덧셈 | 3 + 2 | 5 |
- | 뺄셈 | 3 - 2 | 1 | |
* | 곱셈 | 3 * 2 | 6 | |
/ | 나눗셈(결과는 실수) | 3 / 2 | 1.5 | |
// | 몫 | 7 // 2 | 3 | |
% | 나머지 | 7 % 2 | 1 | |
** | 거듭제곱 | 3 ** 2 | 9 | |
비교 연산자 | == | 값이 같은지 확인 | 3 == 3 | True |
!= | 값이 다른지 확인 | 3 != 2 | True | |
> | 크기 비교 (왼쪽 > 오른쪽) | 5 > 3 | True | |
< | 크기 비교 (왼쪽 < 오른쪽) | 3 < 5 | True | |
>= | 크거나 같은지 확인 | 3 >= 3 | True | |
<= | 작거나 같은지 확인 | 3 <= 5 | True | |
논리 연산자 | and | 모두 참인지 확인 | True and False | False |
or | 하나라도 참인지 확인 | True or False | True | |
not | 논리 값 반전 | not True | False | |
할당 연산자 | = | 값 할당 | x = 5 | x에 5 저장 |
+= | 덧셈 후 할당 | x += 3 | x = x + 3 | |
-= | 뺄셈 후 할당 | x -= 3 | x = x - 3 | |
*= | 곱셈 후 할당 | x *= 3 | x = x * 3 | |
/= | 나눗셈 후 할당 | x /= 3 | x = x / 3 | |
//= | 몫 연산 후 할당 | x //= 3 | x = x // 3 | |
%= | 나머지 연산 후 할당 | x %= 3 | x = x % 3 | |
**= | 거듭제곱 후 할당 | x **= 3 | x = x ** 3 | |
비트 연산자 | & | 비트 AND | 0011 & 0101 | 0001 |
| | 비트 OR | 0011 | 0101 | 0111 | |
^ | 비트 XOR | 0011 ^ 0101 | 0110 | |
~ | 비트 NOT | 0011 | 1100 | |
<< | 왼쪽 시프트 | 0110 << 1 | 1100 | |
>> | 오른쪽 시프트 | 0110 >> 1 | 0011 | |
멤버 연산자 | in | 특정 값이 시퀀스에 있는지 확인 | 'a' in 'apple' | True |
not in | 특정 값이 시퀀스에 없는지 확인 | 'x' not in 'apple' | True | |
식별 연산자 | is | 동일한 객체를 참조하는지 확인 | x is y | True/False |
is not | 동일한 객체가 아닌지 확인 | x is not y | True/False | |
기타 연산자 | () | 괄호를 사용한 우선순위 지정 | (2 + 3) * 2 | 10 |
[] | 리스트, 튜플 등 요소 접근 | a[0] | 첫 번째 요소 | |
: | 슬라이싱 | a[1:3] | 부분 리스트 | |
. | 속성 접근 | obj.attr | 속성 값 |
조건 | 모두 참이어야 | 하나라도 참이라면 | 참이 홀수라면 | |
---|---|---|---|---|
A | B | AND | OR | XOR |
false (0) | false (0) | false (0) | false (0) | false (0) |
false (0) | true (1) | false (0) | true (1) | true (1) |
true (1) | false (0) | false (0) | true (1) | true (1) |
true (1) | true (1) | true (1) | true (1) | false (0) |
조건 | 모두 참이어야 | 하나라도 참이라면 | 참이 홀수라면 | ||
---|---|---|---|---|---|
A | B | C | AND | OR | XOR |
false (0) | false (0) | false (0) | false (0) | false (0) | false (0) |
false (0) | false (0) | true (1) | false (0) | true (1) | true (1) |
false (0) | true (1) | false (0) | false (0) | true (1) | true (1) |
false (0) | true (1) | true (1) | false (0) | true (1) | false (0) |
true (1) | false (0) | false (0) | false (0) | true (1) | true (1) |
true (1) | false (0) | true (1) | false (0) | true (1) | false (0) |
true (1) | true (1) | false (0) | false (0) | true (1) | false (0) |
true (1) | true (1) | true (1) | true (1) | true (1) | true (1) |
ans = 1 + 1 # 산술 연산자
ans = 2 > 1 # 비교 연산자
ans = true and false # 논리 연산자
ans += 10 # 할당 연산자
ans = 5 & 3 # 비트 연산자
ans = 'a' in 'apple' # 멤버 연산자
ans = x is y # 식별 연산자
ans = (2 + 3) * 2 # 우선순위 연산자(기타)
문자열
"(큰 따옴표) 또는 '(작은 따옴표)로 작성된 단어, 문장은 문자열(string)로써 하나의 변수로 취급됩니다.
- "안녕" + "하세요" = "안녕하세요"
- "안녕" * 2 = "안녕안녕"
- 여러줄을 입력할 때 """또는 '''를 사용합니다.
text1 = "안녕하세요"
text2 = '반갑습니다. 잘 부탁드립니다.'
text3 = """여러줄 문장 예제:
하나. 행복한
둘. 파이썬"""
특수문자
특수문자를 입력할 땐, "\"(escape, 이스케이프)문자를 활용합니다. "\"를 활용한 특수문자를 escape sequence(이스케이프 시퀀스)라고 합니다.
2_Variable > 03-1_Escape.py표시 | 설명 | 예시 | 결과 |
---|---|---|---|
\n | 줄바꿈 (새 줄) | print("Hello\nWorld") | Hello World |
\t | 탭 | print("Hello\tWorld") | Hello World |
\\ | 역슬래시 출력 | print("C:\\path\\to\\file") | C:\path\to\file |
\' | 작은 따옴표 출력 | print('It\'s Python') | It's Python |
\" | 큰 따옴표 출력 | print("She said, \"Hi\".") | She said, "Hi". |
\r | 캐리지 리턴 (줄의 처음으로 이동) | print("Hello\rWorld") | World |
\b | 백스페이스 (한 문자 삭제) | print("Helloo\b") | Hello |
\f | 폼 피드 (새로운 페이지 시작) | print("Hello\fWorld") | Hello World |
\v | 수직 탭 | print("Hello\vWorld") | Hello World |
슬라이싱
문자열은 문자들의 집합이므로 n번째 문자를 특정할 수 있습니다.
2_Variable > 03-2_Sub string.py+---+---+---+---+---+---+ | P | y | t | h | o | n | +---+---+---+---+---+---+ 0 1 2 3 4 5 6 -6 -5 -4 -3 -2 -1
string1[0] # P
string1[-2] # o
string1[1:3] # yt
string1[:4] # Pyth
string1[-2:] # on
길이(length)
len()함수는 글자 길이를 구합니다. 문자가 가지는 실제 byte와 관계없이 하나의 문자는 1의 길이를 갖습니다.
2_Variable > 03-3_Length.pystring1 = "Python"
string2 = "파이썬"
len(string1) # 6
len(string2) # 3
여러줄 문장
2_Variable > 03-4_Multi lines.pystring = """여러줄을 출력하고 싶어요
그러면 따옴표를 세번 입력하시고
여러줄을 작성하시면 됩니다.
참, 쉽죠?"""
기타 유용한 함수들
함수이름 | 설명 |
---|---|
lower() | 소문자로 변환 |
upper() | 대문자로 변환 |
isupper() | 대문자인가요? |
replace("이거를", "이걸로") | 이거를 이걸로 바꿔주세요 |
index("이것") | 이것의 순번은? |
count("이것") | 이것이 등장하는 횟수는? |
find("이것") | 이것이 있다면, 몇 번째에? |
python = "Python is Amazing"
python.lower() # python is amazing
python.upper() # PYTHON IS AMAZING
python[0].isupper() # True
len(python) # 17
python.replace("Python", "Java") # Java is Amazing
python.index("n") # 5 번째
python.count("n") # 2 번 등장
출력 테크닉3_print
고정된 문자열 외에, 변수와 결합한 문자열을 출력하는 방법은 다음과 같습니다.
3_Print > 01_Print.pyprint("나는 %d살 입니다." % 20) # 나는 20살 입니다.
print("나는 {}살 이고, {}를 좋아합니다.".format(25, "복숭아")) #나는 25살 이고, 복숭아를 좋아합니다.
age = 40
like = "수박"
print(f"나는 {age}살 이고, {like}를 좋아합니다.") # 나는 40살 이고, 수박를 좋아합니다.
- %d(decimal:숫자), %s(string:문자열)을 사용하는 방법을 printf style이라고 합니다.(old style)
- .format이나, f"..."은 formatted style이라고 합니다.
- {:?}에서, ?위치에 Literal을 기입할 수 있습니다.
기호 | 의미 | 설명 |
---|---|---|
숫자 | (최소) 확보할 자릿수 | |
> | 정렬 방향(우) | 기본 정렬: 좌 |
+ | 기호 표시 | 음수는 항상 표시 |
, | 1,000단위 구분 | .숫자 | 소숫점 이하 표기 | 반올림 |
:문자 | 빈칸 채움문자 | 기본: ' '(사이띄기, 공란) |
#.#f | 소숫점 표시 | 기본 6자리 |
print("{: >10}".format(500)) # 500
print("{: >+10}".format(500)) # +500, +: 기호표시
print("{:*>+10.3f}".format(5 / 7)) # ****+0.714
# 10자리 확보하고 소수점 3자리까지 출력하는데, 기호 표시하고, 빈칸은 *로 채움
줄 바꿈 안 하기
print()함수의 end attribute(속성)을 이용합니다.
3_Print > 03_No newLine.pyprint("안녕하세요.", end="")
print("반가워!", end="~~~")
str() vs. repr()
- str: STRing(문자열), 전달받은 내용이 완벽하게 string으로 사용될 수 있도록 변환합니다.
- repr: REPResentation(표현), 인터프리터에 의해 읽힐 수있는 형태로 만들어줍니다. 데이터 형식을 유지한 채로 가져오기 때문에, 재가공이 용이합니다.
str("hello") # hello
repr("hello") # 'hello'