파이썬 언어의 개요
파이썬
- 1991년 귀도 반 로섬이 발표한 오픈 소스 인터프리터 언어이다.
- www.python.org를 를 통해 무료로 배포한다.
- 명령 프롬프트나 셸에서 실행한다.
파이썬 언어의 특징
장점
오픈 소스 | 비용이 들지 않고, 전 세계의 개발자가 참여하여 점점 발전하는 언어이다. |
쉽고 간결한 문법 | 어렵고 규칙이 많은 기존 프로그래밍 언어들과 달리 문법이 쉽고 간결하여 빠르게 배울 수 있다. 기존 언어의 개념을 안다면 매우 빠르게 익힐 수 있다. |
뛰어난 가독성 | 코드 블록( {} 중괄호 문법 )을 쓰지 않고 들여쓰기로 구분하여 블록을 구분하기 쉽다. 코드가 간결하여 이해하기 쉽고, 공동 작업이나 유지 보수가 쉽다. |
동적 타이핑 | 실행 중에 자료형이 체크되고 메모리가 자동으로 관리된다. |
유니코드 사용 | 유니코드를 사용하므로 한글, 한자, 중국어, 일본어 등 문자 표현이 자유롭다. |
풍부한 라이브러리 | 기본적으로 제공되는 라이브러리가 풍부하고, 이미 만들어져 있는 수많은 라이브러리를 쉽게 추가하여 구현할 수 있다. |
빠른 개발 속도 | "Lite is too short, You need Python."이라는 말이 있을 정도로 간결한 문법과 수많은 라이브러리를 이용하여 빠르게 개발할 수 있다. |
C 언어와의 쉬운 연계 | C 언어로 구현되어 있는 부분과 잘 연결되므로 풍부하고 다양한 개발이 가능하다. |
대부분의 운영 체제에서 실행 가능 | Windows, mac OS, Linux / UNIX 등 주로 쓰이는 대부분의 운영 체제에서 같은 방법으로 실행할 수 있다. |
다양한 분야에 활용 | 많은 사람들이 사용하고 있고 쉬워서 다양한 분야에 활용할 수 있다. |
단점
연산 속도가 느림 | C 언어보다 약 2~140배 느리다. 빠른 연산이 필요한 부분은 C로 개발해 연결하는 것이 낫다. 높은 사양을 요구하는 게임을 개발하는 데는 적합하지 않으며, 컴퓨터 속도가 느리다면 다른 언어를 사용해야 한다. |
모바일 기기에서 활용이 어려움 | 파이썬으로 개발된 스마트폰 애플리케이션이 거의 없을 정도로 모바일 분야에서는 활용되지 않고 있다. |
파이썬 언어의 활용
시스템 유틸리티 제작 | 파이썬은 운영 체제의 시스템 명령어들을 이용할 수 있다. 이를 바탕으로 여러 가지 시스템 유틸리티를 만드는 데 편리하다. |
웹과 인터넷 서비스 개발 | 동적으로 동작하는 웹을 서비스할 수 있다. 대표적으로 Flask, Django 프레임워크가 있다. 이를 활용하면 파이썬으로 쉽고 빠르게 웹 서버를 만들 수 있다. |
네트워크 프로그래밍 | Twisted 파이썬을 이용해 비동기식 네트워크 프로그래밍을 쉽게 할 수 있다. |
데이터베이스 프로그래밍 | Oracle, MySQL, PostgreSQL, Sybase, Infomix 등 데이터베이스에 접근할 수 있게 해 주는 도구를 제공한다. |
데이터 분석 | Pandas라는 모듈을 사용하여 데이터 분석을 쉽고 효과적으로 할 수 있다. |
GUI 프로그래밍 | Tkinter, wxPython, PyQT, PyGT 등을 이용하여 윈도우 창을 활용한 프로그램을 매우 간단히 개발할 수 있다. |
수학, 과학 분야 | NumPy를 이용하여 편리하게 수치해석, 통계 관련 기능을 구현할 수 있고, 대부분 C언어로 작성되어 실행 속도도 빠르다. 또 이 NumPy를 활용한 SciPy를 이용하여 과학 분야에 많이 쓰이는 배열, 행렬, 적분, 미분, 방정식 연산, 통계 등을 쉽게 할 수 있다. |
교육 분야 | 문법이 간단하여 소프트웨어 개발을 처음 하는 사람들에게 가르치기 쉽고 배우기 쉽다. |
사물 인터넷(IoT) 분야 | 사물 인터넷을 자체적으로 개발하기 위한 주요 기기인 라즈베리 파이를 제어한 도구로 사용한다. |
여러 가지 에디터
- IDLE
- 파이썬을 설치하면 기본적으로 같이 설치되는 에디터로, 파이썬 언어만 지원한다.
- 기본적으로 대화형 파이썬 Shell 모드가 실행 되며, 대화형 코드 편집기 모드 이다. - Atom
- GitHub에서 만든 에디터로, Nodejs와 Electron을 기반으로 만들어진, 오픈 소스이다.
- 여러 가지 운영 체제를 지원하며 다양한 Package를 설치하여 기능을 자유롭게 확장하고 실시간 협업이 가능하다. - Visual Studio Code
- Microsoft에서 개발한 에디터로 오픈소스이고, 다양한 운영체제와 프로그래밍 언어를 지원한다.
- 자동완성과 디버깅이 쉬우며, 확장기능을 설치할 수 있다. - PyCharm
- Andriod Studio의 기반이 된 IntelliJ IDEA를 만든 Jetbranins에서 파이썬을 위해 개발한 IDE(통합 개발 환경)이다.
- 자동 완성, 문법 체크 등 편리한 기능을 많이 제공하며, 다양한 파이썬 프레임워크를 지원해 고도의 파이썬 프로그램을 작성하기 쉽다.
간단한 파이썬 프로그램
키워드 보기 - 키워드( 파이썬 에서 사용하는 예약어 )는 상수 또는 변수나 다른 식별자의 이름으로 사용할 수 없고, 프로그래밍 언어의 문법상 특별하게 사용하는 단어이다.
import keyword
print(keyword.kwlist)
# 출력 결과
['False', 'None', 'True', 'and', 'as', 'assert', 'async', 'await', 'break', 'class','continue',
'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import',
'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while',
'with', 'yield']
달력 보기
import calendar
print(calendar.month(2024, 3))
# 출력 결과
March 2024
Mo Tu We Th Fr Sa Su
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
현재 날짜와 시각 보기
- 날짜와 시간에 관련된 모듈을 이용해 현재나 특정 시간의 연월일, 시, 분, 초를 쉽게 표시할 수 있다.
import datetime as dt
now = dt.datetime.now()
print(now.year, now.month, now.day, now.hour, now.minute, now.second)
# 출력 결과
2024 7 9 19 35 8
거북이 그래픽 모듈 활용하기
# 거북이 그래픽 모듈 준비
import turtle as t
t.shape("turtle")
# 사각형 그리기
t.forward(50)
t.right(90)
t.forward(50)
t.right(90)
t.forward(50)
t.right(90)
t.forward(50)
t.right(90)
# 별 그리기
t.clear()
t.forward(150)
t.left(144)
t.forward(150)
t.left(144)
t.forward(150)
t.left(144)
t.forward(150)
t.left(144)
t.forward(150)
t.left(144)
t.exitonclick()
숫자형
변수
- 데이터를 담는 장소
- 자료형을 미리 선언하지 않고 바로 변수에 값을 대입해서 사용 ( 동적 타이핑 : 실행 중에 동적으로 자료형을 결정함. )
파이썬 변수 이름 규칙
- 예약어는 사용할 수 없다.
- 첫 번째 문자에는 숫자가 올 수 없다.
- 공백을 사용할 수 없으므로 snake_case또는 camelCase형태로 사용한다.
( 변수와 함수 : snake_case스타일로, 클래스 : camelCase스타일로 )
- 밑줄 문자( _ )는 사용할 수 있다.
- 대소문자를 구별한다. ( a와 A는 다른 변수 )
수식 연산자 | 설명 |
+ | 더하기 |
- | 빼기 |
* | 곱하기 |
/ | 나누기 |
// | 나눗셈의 몫 구하기 |
% | 나눗셈의 나머지 구하기 |
** | 거듭제곱 |
대입 연산자 | 설명 |
= | 값을 대입한다. |
+= | 변수에 특정 값을 더하고 그 결과를 다시 변수에 대입한다. |
-= | 변수에 특정 값을 빼고 그 결과를 다시 변수에 대입한다. |
*= | 변수에 특정 값을 곱하고 그 결과를 다시 변수에 대입한다. |
/= | 변수에 특정 값을 나누고 그 결과를 다시 변수에 대입한다. |
//= | 변수에 특정 값을 나눈 몫을 구하고 그 결과를 다시 변수에 대입한다. |
%= | 변수에 특정 값을 나눈 나머지를 구하고 그 결과를 다시 변수에 대입한다. |
**= | 변수에 특정 값을 거듭제곱하고 그 결과를 다시 변수에 대입한다. |
type(변수명)
- 변수의 자료형을 알려주는 함수
- <class 'int'> : 정수형
- <class 'float'> : 실수형
여러가지 진수
- 2진수 (0b) : 0b`숫자` // 0b1100111000
- 8진수 (0o) : 0o`숫자` // 0 o130
- 16진수 (0x) : 0x`숫자` // 0 xD7 A
// type : <class 'int'>
지수 표현
10e3 # 10.0 * 10³
# 10000.0
1.23456E2 # 1.23456 * 10²
# 123.456
1.23456e-2 # 1.23456 * 10-²
#0.0123456
- 지수 표현 e 뒤의 `숫자` = *10의 `숫자`제곱
- 지수 표현으로 쓴 숫자는 모두 실수형( float )
- 파이썬은 부동소수점 표현 방법의 표준인 IEEE754를 따르기 때문에 정밀도에 한계가 있다.
- 정밀도가 필요하다면 표준 라이브러리인 decimal을 사용한다.
복소수
- 파이썬은 복소수로 i 대신에 j 또는 J를 사용한다.
8+24j # 실수 = 8, 허수 = 24 인 복소수
# (8 + 24j)
변환 함수
예제 | 의미 | 결과 |
int( 12.7 ) | 실수를 정수로 변환 ( 버림 ) | 12 |
int( '321' ) | 문자열을 정수로 변환 | 321 |
float( 456 ) | 정수를 실수로 변환 | 456.0 |
float( '64.4' ) | 문자열을 실수로 변환 | 64.4 |
float( '123e4' ) | 지수 표현을 실수로 표현 | 1230000.0 |
complex( 1.23 ) | 실수를 복소수로 표현 | (1.23 + 0j) |
complex( '1.23 + 45.6j' ) | 문자열을 복소수로 표현 | (1.23 + 45.6j) |
str( 1.23 ) | 실수를 문자열로 변환 | '1.23' |
문자열
문자열 인덱싱, 슬라이싱, 함수
- 작은따옴표(') 또는 큰따옴표(")를 사용하고, 둘의 차이는 없지만 인관성 있게 사용하기.
- 연산자 + 는 문자열을 연결한다.(숫자형은 덧셈 계산)
- 연산자 *는 문자열을 여러 번 사용한다.(숫자형은 곱셈 계산)
- 여러 줄로 이루어진 문자열은 작은따옴표 3개( ''' ) 또는 큰따옴표( """ )로 묶어서 나타낸다.
// 이스케이프 코드
이스케이프 코드 | 설명 |
\n | 새 줄을 시작한다. |
\t | 문자열 사이에 탭 간격을 준다. |
\\ | 역슬래시(\) 문자를 그대로 표현한다. |
\' | 작은따옴표(') 문자를 그대로 표현한다. |
\" | 큰따옴표(") 문자를 그대로 표현한다. |
인덱싱 - 문자로 이루어진 문자열에서 원하는 자리의 문자를 가져온다.
- 인덱스에 원하는 자릿수를 넣어 그 자리의 문자를 가져올 수 있다.
- 인덱스 맨 앞 글자를 가리키는 0부터 시작한다.
- 인덱스를 음수로 사용할 수 있는데, 맨 마지막 글자는 '-1'이고 그 앞 글자는 '-2'이다.
( 차례대로 움직여 맨 앞 글자는 '-글자수'로 가리킬 수 있다. )
#문자열 다루기
print("Hello" + ", " + "world!")
# Hello, world!
print("Hello?" * 5)
# Hello?Hello?Hello?Hello?Hello?
print("\"Hello!!\"\n" + "world~")
# "Hello!!"
# world~
multiline = '''Happy
Programming'''
print(multiline)
# Happy
# Programming
# 문자열 인덱스
s = "Life is too short, You need Python."
s[3] # 'e'
s[11] # ' '
s[-1] # '.'
s[-20] # 'r'
#문자열 슬라이싱
s[3:7] # 'e is' 인덱스 3번부터 인덱스 7번 바로 앞까지
s[30:] # 'thon.' 인덱스 30번부터 끝까지
s[:-17] # 'Life is too short,' 처음부터 -17번 인덱스 전까지
s[:] # 문자열 전체
# 문자열 함수
h = " Happy Programming! "
len(h) # 20 글자 수 세기
h.count("p") # 2 문자열에서 p의 개수 세기(대소문자 구별)
h.upper() # ' HAPPY PROGRAMMING! ' 대문자로 변경
h.lower() # ' happy programming! ' 소문자로 변경
h.strip() # 'Happy Programming!' 좌우 공백 삭제
h.replace("Happy", "Funny") # ' Funny Programmring! ' 문자열 대체하기
h.find("ap") # 3 문자열 왼쪽부터 찾기 / 못찾으면 -1 리턴
h.rfind("a") # 13 문자열 오른쪽부터 찾기
"a" in h # True 문자열에 있는지 확인
x = "1 2 3 4 5 6 7"
y = x.split(" ") # x 문자열 리스트로 나누기
z = ", ".join(y) # y 리스트 ", "를 넣어서 문자열로 만들기
# format - 문자열 형식을 미리 정하고, 인자를 주어 문자열을 완성한다.
s = "name : {}, number : {}, TF : {}"
s.format("name", 123, True)
print("n:{a}, m:{b}, t:{a}".format(a = "name", b = 3))
# 정수 표현
"{:5d}".format(515) # 최소 5칸을 차지하는 정수
"{:+5d}".format(515) # 양수면 + 표시
"{:=+5d}".format(515) # +를 맨 앞에 표시
"{:05d}".format(515) # 빈칸을 0으로 채우기
# 실수 표현
"{:12f}".format(11.17) # 최소 12칸을 차지하는 실수
"{:6.1f}".format(11.17) # 소수점 1자리까지 반올림해서 나타내기
리스트
리스트 - 순서가 있게 요소를 목록으로 담고 있다.
[값1, 값2, 값3]
# 리스트
L = []
player = ["str", 10, True]
li = list(range(3))
# list() - 리스트 만드는 함수
list(문자열) - 문자열의 문자가 하나씩 리스트의 요소로 들어간다.
list(튜플) - 튜플의 각 요소가 하나씩 리스트의 요소로 들어간다.
list(딕셔너리) - 딕셔너리의 키가 하나씩 리스트의 요소로 들어간다.
list(셋) - 셋의 각 요소가 하나씩 리스트의 요소로 들어간다.
list(range()) - range()함수의 각 요소가 하나씩 리스트의 요소로 들어간다.
# 요소 추가
li + [3, 4]
li += [3, 4, 5]
리스트.append(인자) - 인자가 리스트면 그 리스트를 한 요소로 추가한다.
리스트.insert(인덱스, 값) - 인덱스 위치에 값을 요소로 추가한다.
리스트.extend(인자) - 인자가 리스트면 리스트를 해제하여 하나씩 요소로 추가한다.
# 요소 수정
li[3] = 60
# 요소 제거
del 리스트[인덱스] - 해당 인덱스 요소를 제거한다.
리스트.pop(인덱스) - 해당 인덱스 요소를 제거한다.
리스트.remove(값) - 해당 값을 리스트에서 제거한다.
리스트.clear() - 모든 요소를 제거한다.
# 요소 검색
값 in 리스트 - 리스트에 값이 있는지 확인한다.
# 기타 함수
len(리스트) - 리스트의 각 요소의 개수를 센다.
리스트.sort() - 리스트를 정렬한다.
리스트.reverse() - 리스트의 현재 상태에서 거꾸로 정렬한다.
튜플
튜플 - 여러 개의 요소를 하나의 그룹으로 다루며, 값 변경이 불가능하다.
(값1, 값2, 값3)
# 튜플
t=()
# 패킹, 언패킹
color = 129, 247, 216 # 패킹(129, 247, 216)
red, green, blue = color # 언패킹
# red = 127, green = 247, blue = 216
x, y = 123, 456 # x = 123, y = 456
x, y = y, x # 직관적인 교환(swap) 가능
a = (123, 'abc', True, 123)
a[1] # 123 인덱싱
a[2:] # (True, 123) 슬라이싱
튜플.index(값) - 값에 해당하는 인덱스를 가져온다.
튜플.count(값) - 값에 해당하는 요소의 개수를 가져온다.
딕셔너리
딕셔너리 - 특정 키에 값을 담는다.
{키1:값1, 키2:값2, 키3:값3}
# 딕셔너리
d = {}
urls = {"google":"google.com", 123:["num", 0]}
# 키 : 문자열, 숫자, 변경이 불가한 형식의 자료형(튜플 등)이 가능
# 요소 추가 / 수정
urls["x"] = 2560 # 딕셔너리에 x 없으면 자동 추가, 있으면 수정
# 요소 제거
del 딕셔너리[키] # 딕셔너리의 해당 키와 값 제거
딕셔너리.pop(키) # 딕셔너리의 해당 키와 값 제거
딕셔너리.clear() # {} 딕셔너리의 모든 요소 제거
# 요소 검색
urls["google"] # "google.com" 키의 값 가져옴
urls.get("google") # "google.com" 키의 값을 가져옴
# 키와 값 검색 방법 다름
키 in 딕셔너리 - 딕셔너리에 키가 있는지 확인
값 in 딕셔너리.values() - 딕셔너리에 값이 있는지 확인
"google" in urls # True
"google.com" in urls # False
"google.com" in urls.value() # True
# 기타 함수
len(딕셔너리) - 요소(키)의 수를 센다.
딕셔너리.keys() - 딕셔너리의 키들을 dict_keys 객체로 리턴
딕셔너리.values() - 딕셔너리의 값들을 dict_values 객체로 리턴
딕셔너리.items() - 딕셔너리의 키와 값의 쌍을 묶어 dict_items 객체로 리턴
셋
셋 - 순서가 없고, 중복되지 않으며, 집합 연산을 할 수 있다.
{값1, 값2, 값3}
# 셋
game = {"LOL", "Overwatch", "Tetris", 1942, 2048}
set("Funny") # {'F', 'u', 'n', 'y'}
# 셋 생성
set(문자열) - 문자열의 문자가 하나씩 셋의 요소로 들어간다.
set(리스트) - 리스트의 각 요소가 하나씩 셋의 요소로 들어간다.
set(튜플) - 튜플의 각 요소가 하나씩 셋의 요소로 들어간다.
set(딕셔너리) - 딕셔너리의 키가 하나씩 셋의 요소로 들어간다.
set(range()) - range()한수의 각 요소가 하나씩 리스트의 요소로 들어간다.
# 셋 추가
game.update(("NBA", "MLB"))
셋.add() - 요소 하나를 추가할 때 사용한다.
셋.update() - 여러 요소를 추가할 때 사용한다.
# 셋 제거
game.remove("LOL")
# 셋 연산 - 교집합, 합집합, 차집합, 대칭 차집합
# 교집합
s1 & s2
s1.intersection(s2)
# 합집합
s1 | s2
s1.union(s2)
# 차집합
s1 - s2
s1.difference(s2)
# 대칭 차집합
s1 ^ s2
s1.symmetric-difference(s2)
리스트, 튜플, 딕셔너리, 셋 비교
리스트 | 튜플 | 딕셔너리 | 셋 | |
공통점 | 여러 개의 자료를 하나의 덩어리로 묶어서 다룰 수 있는 자료 구조 | |||
형식 | [값1, 값2] | (값1, 값2) | {키1:값1, 키2:값2} | {값1, 값2} |
빈 자료형 생성 | [ ] | ( ) | { } | set() |
생성 함수 | list() | tuple() | dict() | set() |
요소를 수정할 수 있음 | O | X | O | O |
요소의 순서가 있음 | O | O | 순서는 있지만 키로 값을 찾음 |
X |
// 문자열, 리스트, 튜플, 딕셔너리, 셋과 함께 쓸 수 있는 함수
# reversed() 함수 : 요소의 인덱스가 0부터 차례대로 매겨지는 자료형의 순서를 거꾸로 한다.
list(reversed([1, 2, 3, 4, 5]))
# [5, 4, 3, 2, 1]
# enumerate() 함수 : 인덱스와 값을 리턴
for i, value in emunerate(("funny", "Python")):
print(i, value)
# 0 funny
# 1 Python
논리형
bool - 참과 거짓, 두 가지 결과만 있는 자료형
자료형 | 값 | 참 or 거짓 |
숫자형 | 0이 아닌 숫자 | True |
0 | False | |
문자열 | "Python" | True |
" " | False | |
리스트 | [1, 2, 3] | True |
[ ] | False | |
튜플 | ( ) | False |
딕셔너리 | { } | False |
셋 | set() | False |
None | False |
비교 / 논리 / 비트 연산자
비교 연산자
연산자 | 설명 |
a == b | 같은지 판단 |
a != b | 다른지 판단 |
a > b | a가 b보다 큰지 판단 |
a >= b | a가 b보다 크거나 같은지 판단 |
a < b | a가 b보다 작은지 판단 |
a <= b | a가 b보다 작거나 같은지 판단 |
논리 연산자 - not / and / or
not True # False
not False # True
True and True # True
True and False # False
False and True # False
False and False # False
True or True # True
True or False # True
False or True # True
False or False # False
비트 연산자 - bin() 함수를 이용해 이진수로 표현
연산자 | 설명 | ||
a | & | b | 비트 단위로 AND 연산 ( 둘 다 1일 때 , 나머지는 0 ) |
a | | | b | 비트 단위로 OR 연산 ( 둘 다 1일 때 0, 나머지는 1 ) |
a | ^ | b | 비트 단위로 XOR 연산 ( a와 b가 다르면 1, 같으면 0 ) |
~ | a | 비트 단위로 보수 연산 ( a의 1의 보수 ) | |
a | << | b | 왼쪽 시프트 연산. a를 왼쪽으로 b비트만큼 옮김 |
a | >> | b | 오른쪽 시프트 연산. a를 오른쪽으로 b비트만큼 옮김 |
bin(0b1010 & 0b0110)
# '0b10' # 둘 다 1이면 1, 나머진 0
bin(0b1010 | 0b0110)
# '0b1110' # 둘 다 0이면 0, 나머진 1
bin(0b1010 ^ 0b0110)
# '0b1100' 다르면 1, 같으면 0
bin(~0b1010)
# '-0b1011'
bin(0b1010 << 2)
# '0b101000'
bin(0b1010 >> 2)
# '0b10'
프로그램 구성 요소
구성 요소 | 설명 |
예약어 | 파이썬 언어에서 문법적인 용도로 사용하는 특별한 단어. 변수 등 식별자로 사용할 수 없다. |
주석 | 프로그램의 실행과 상관없는 설명을 적을 때 사용한다. |
ex. >>> x = "미지의 수" # x는 알 수 없는 수 | |
변수 | 자료를 담기 위한 장소이다. '='라는 기호를 사용하여 값을 대입한다. |
상수 | 파이썬 언어는 상수와 관련한 예약어가 따로 없다. (C는 const, Java는 final) |
함수 | 프로그램 명령어를 여러 개 모아 놓은 묶음이다. 입력 값 없이 기능을 수행하게 할 수도 있고, 입력 값을 갖고 수행하여 그 결과를 반환할 수도 있다. |
클래스 | 데이터와 그 데이터와 관련한 함수들을 한데 모아놓은 묶음이다. |
모듈 | 여러 코드를 한데 묶어 재사용하기 위한 묶음이다. 보통 하나의 파일을 의미하며 import를 통해 다른 모듈에서 사용할 수 있다. 모듈을 사용하면 특정한 기능을 한데 묶어 관리하기 쉽고, 다른 곳에서 쉽게 코드를 재사용할 수 있다. 이름 공간이 구분되어 이름에 대한 관리를 하기 쉽다. |
패키지 | 여러 모듈을 하나로 모아 만든 묶음이다. 파이썬 3.3 이전에는 패키지의 디렉터리에 __init__.py를 반드시 포함해야 한다. 파이썬 3.3 이상부터는 없어도 되지만, 하위 호환성을 위해 작성할 것을 권장한다. |
프로그래밍의 패러다임
순차적 프로그래밍
- 컴퓨터가 해야 할 일의 명령어를 순서대로 나열하고, 그 명령어의 차례대로 실행되는 프로그램을 개발하는 방법
- 조건에 따라 다르게 실행할 수 있는 제어문과 반복문을 사용
절차적 프로그래밍
- 프로시저(Procedure) 즉 함수를 기본으로 프로그램을 개발
- 함수에 실행 할 절차들을 명령어로 작성하고, 데이터를 함수에 넣어 실행할 결과를 처리하는 프로그램을 작성
구조적 프로그래밍
- 절차적 프로그래밍과 비슷하지만 단위가 모듈 (보통 파일, 관련 있는 함수 모아 놓은 것)이다.
- 모듈을 가져다 사용하면서 재사용성을 높인 프로그래밍 방법
객체 지향 프로그래밍
// 절차적 프로그래밍이나 구조적 프로그래밍은 기본이 함수나 모듈이며 명령어를 모아 놓고 데이터를 처리하는 것을 바탕으로 하지만 이런 함수나 모듈도 같이 다뤄야 할 밀접한 관계가 있는 데이터가 존재한다.
- 관련 있는 데이터와 함수를 한데 모아 객체로 만들어 그 객체를 기반으로 프로그래밍하는 방법
제어문
if ~ elif ~ else문
if 조건식1:
코드 블록1
elif 조건식2:
코드 블록2
else:
코드 블록3
# print() 함수 : 화면에 문자열로 출력, 다른 타입 같이 출력시 '콤마(,)' 사용
# input() 함수 : 사용자의 입력을 기다리고, 문자열로 입력 받음.
// swich 파이썬에는 없음.
반복문
for문
for 변수 in range():
코드 블록
# range() 함수의 각 결과가 변수로 대입되어 반복
for 변수 in 문자열:
코드 블록
# 문자열의 각 문자가 하나씩 변수로 대입되어 반복
for 변수 in 리스트:
코드 블록
# 리스트의 각 요소가 하나씩 변수로 대입되어 반복
for 변수 in 튜플:
코드 블록
# 튜플의 각 요소가 하나씩 변수로 대입되어 반복
for 변수 in 딕셔너리:
코드 블록
# 딕셔너리의 키가 하나씩 변수로 대입되어 반복
for 변수 in 셋:
코드 블록
# 셋의 각 요소가 하나씩 변수로 대입되어 반복
break 문 - 반복을 즉시 멈추고, 반복문 밖으로 제어가 빠져나감
continue 문 - 다음 순서의 반복 시작점으로 제어가 이동
// 리스트 컴프리헨션
array = []
for i in range(1, 10, 2):
array.append(i*i)
# 위의 코드 = 아래 코드
array = [i*i for i in range(1, 10, 2)]
# 조건도 붙일 수 있다.
array = [i*i for i in range(1, 10, 2) if i*i > 30]
while문
while 조건식:
코드 블록
함수의 개요
함수(function)
- 연관성 있는 코드들을 묶어 놓은 것으로, 여러 번 사용할 것을 고려해 만든 코드 조각
- 프로그램을 적적하게 나누어 함수화 하면 이해하기 쉽고 사용하기 편리하다.
- 같은 기능의 코드가 중복되어 분산되지 않고 모여 있으므로 수정할 부분이 줄어 유지보수가 편하다.
// 함수 용어 정리
용어 | 의미 | 유사어 |
function | (대개 리턴 값이 있는) 코드 묶음 | 함수 |
procedure | (리턴 값이 필요 없는) 코드 묶음 | 프로시저 |
parameter | 함수가 호출될 때 넘겨받은 데이터를 저장할 변수들 | 매개변수, param, 파라미터 |
argument | 함수를 호출할 때 같이 넘겨지는 변수들 | 인자, 인수, arg, args, argv |
return value | 함수 안의 코드가 실행 후 결과 값을 호출한 곳으로 돌려주는 변수 | 리턴 값, 반환 값, 결과 값 |
call | 주체적으로 함수를 "호출하다"라는 의미 대개 사용자가 구현된 특정 함수를 호출하는 것을 뜻함. |
호출, execute, 실행하다, 부르다 |
caller | 호출자. 호출한 곳 | 콜러 |
callee | 호출된 자. 호출된 곳 | 콜리 |
callback | 호출 당하다. 수동적으로 호출되는 의미 | 콜백 |
callback function | 대개 사용자가 구현해 놓으면 운영 체제에 의해 특정 이벤트나 사오항이 되었을 때 실행되는 변수 | 콜백 함수, handler, event handler |
내장 함수
절댓값 : abs(x)
- 주어진 정수나 실수의 절댓값을 구한다.
진수 변환 : bin(n), oct(n), hex(n)
- 10진수를 bin(n)은 2진수로, oct(n)은 8진수로, hex(n)은 16진수로 변환한다.
연산 : max(), min(), sum(), pow()
- max() : 최댓값 / min() : 최솟값 / sum() : 합계 / pow() : 거듭제곱
반올림 : round()
- 주어진 수의 특정 위치에서 반올림 값을 구한다.
- 반올림 자릿수를 생략할 경우 소수 첫째 자리에서 반올림한다.
// 리스트 관련 내장 함수
reverse() : 리스트의 현재 상태 거꾸로
sort() : 정렬
sort(reverse = True) : 역정렬
for index, value in enumerate(list):
print("인덱스", index, "위치의 값 :", value)
사용자 정의 함수
- 사용자가 직접 만들어 사용하는 함수
- 내장 함수와 같은 이름의 사용자 정의 함수를 만들어 쓸 경우 사용자 정의 함수가 우선 실행된다.
매개변수에 가변 인수가 있는 함수
# star 함수 정의
def star(shape, *n):
for i in n: # for i in range(len(n)):
print(shape*i) # print(shape * n[i])
star("♬", 3)
star("♡", 1, 2, 3)
디폴트 값을 갖는 함수
def rolling_dice(pip=6, repeat=1):
for r in range(1, repeat+1):
n = random.randint(1, pip)
print(pip, "면 주사위 굴린 결과", r, " : ", n)
print()
rolling_dice()
rolling_dice(3, 2)
rolling_dice(repeat=3)
하나의 값을 리턴하는 함수
def dice(pip):
result = random.randint(1, pip)
return result
print("6면 주사위의 값은 :", dice(6))
'전공' 카테고리의 다른 글
Java_예외 처리, 스레드 (0) | 2024.10.08 |
---|---|
Java_컬렉션 제네릭 (7) | 2024.10.08 |
자료구조_비선형 구조 (0) | 2024.07.09 |
자료구조_선형 구조 (0) | 2024.07.09 |
자료구조_자료구조와 알고리즘 (0) | 2024.07.09 |