1-1. Python 개요
- Python 특징
1991년 귀도 반 로섬(Guido Van Rossum) 발표
플랫폼 독립적
인터프리터 언어
객체 지향
동적 타이핑 언어
AI 프로그래밍을 위한 많은 라이브러리 제공
처음 C언어로 구현되었음
- 일반적인 프로그램 구조(모듈화)
모듈화: 복잡한 문제들을 단위별로 묶어서 자동화/일반화하는 것의 기초가 되는 개념
모듈: 큰 문제를 기능별 작은 단위로 나눈 것
독립적으로 수행할 수 있는 프로그램 단위
- C 언어에서 함수 = 모듈
- Python은 여러 개의 프로그래밍 스타일을 포괄
절차 지향 프로그래밍: 처리해야 할 문제의 해결 과정을 큰 문제를 독립적인 기능별로 나눠서 일련의 순서에 따라서 처리
절차 지향 프로그래밍은 함수가 필수적으로 사용됨
객체 지향 프로그래밍: 관계 있는 데이터와 함수를 하나로 묶어서 선언하는 클래스 개념을 도입
클래스는 객체를 생성하는 데이터 타입 역할
객체 지향 개념(상속, 다형성 등)을 활용하여 효율적으로 코드 작성
객체 지향 프로그래밍은 클래스(객체)가 필수적
함수형 프로그래밍: 절차 지향의 경우 일련의 명령어를 통해서 변수를 바꿔 가면서 전체적인 프로그램을 동작하게 하지만,
기존의 함수와는 다른 수학적인 모델링을 통한 함수의 사용으로 프로그램의 동작 및 예측에 대한 능률을 높여 줌
함수형 코드에서는 함수의 출력값은 그 함수에 입력된 인수에만 의존하므로 인수 x에 같은 값을 넣고
함수 f를 호출하면 항상 f(x)라는 결과가 나오므로 프로그램의 동작을 이해하고 예측하기 쉬움
- Python 프로그램 구조
함수(function)
def add(num1, num2):
return num1 + num2
def를 이용해서 함수 정의
함수는 독립적으로 수행할 수 있는 프로그램 단위
python에서 모듈은 여러 개의 함수를 모아 놓은 것
클래스(객체)
class Car:
speed = 0
def upspeed(self, value):
self.speed += value
class는 객체를 선언하기 위한 사용자 정의 데이터 타입
고차원 함수
f1 = lambda x, y: x + y
Lambda는 함수를 정의하는 새로운 방법
...
시작 코드
# 시작 코드
sum = add(100, 200) # 함수 호출
print(sum) # 300
print(f1(30, 50)) # 80
python에서는 함수 및 클래스 정의가 끝난 후 들여쓰기가 없는 문장부터 수행
1-2. 변수와 메모리
변수(variable): 사용할 데이터를 저장하는 공간
값을 저장하는 상자라고 볼 수 있음
변수는 메모리에 저장됨
C 언어에서 변수는 데이터 타입을 사용하여 변수 선언을 해야 함
#include
int main(void)
{
int a = 10, b = 20, sum = 0;
sum = a + b;
printf("%d + %d = %d\n", a, b, sum);
return 0;
}
데이터 타입을 사용해서 변수 선언을 한다는 것은 int(정수) 타입으로 3개의 변수(a, b, sum)를 만들겠다고 선언해야 함을 의미한다.
반면 Python에서는 데이터 타입을 생략하고 변수 선언이 가능함
a = 10; b = 20
sum = a + b
print(a, "+", b, "=", sum)
데이터 타입을 적지 않고 변수를 선언할 수 있음
a = 10 뒤에 있는 세미콜론(;)은 문장을 연속해서 쓰고자 할 때 씀
- 동적 타이핑(dynamic typing)
런타임에, 즉 프로그램이 실행되고 있는 순간에 구문을 통해 Data type을 설정
반면 C 언어의 경우 int a= 10이라고 해서 선언 단계에서부터 Data type을 확정
Python에서 변수는 객체를 가리키는 ID 값을 담고 있는 저장 공간
a = 1; print(id(a))
b = 1; print(id(b))
c = 2; print(id(c))
d = 2; print(id(d))
이렇게 입력했을 때, 아래의 결과가 나온다.
1856682448
1856682448
1856682480
1856682480
- 변수의 활용
Python에서 변수의 데이터 형식은 값을 넣는 순간마다 변경될 수 있는 유연한 구조
>>> a = 10
>>> type(a)
<class 'int'>
>>> a = 10.5
>>> type(a)
<class 'float'>
변수에는 다른 변수의 값도 저장 가능
>>> width = 10
>>> height = 20
>>> area = width * height
>>> print(area)
200
문자열, 실수 저장 가능
- 두 변수의 값 바꾸기(swap)
>>> a = 10
>>> b = 20
>>> a, b = b, a
>>> print(a, b)
20 10
1-3. 입출력 함수
입력 함수: input()
출력 함수: print()
name = input("이름이 무엇인가요? ")
print("만나서 반갑습니다. " + name + "님!")
x = int(input("첫 번째 정수: "))
y = int(input("두 번째 정수: "))
sum = x + y
print("합은 ", sum)
입력을 정수로 바꿔주는 int함수
- 이번 시간에 배울 것
연산자 개념 및 필요성
산술 연산자
관계 연산자
논리 연산자
- 연산자의 개념
연산자(operator): 산술 연산자(+, -, * 기호)와 같이 이미 정의된 연산을 수행하는 기호나 키워드를 의미
연산자는 왜 필요할까? 문제를 해결하는 방법에서 도구와 같은 역할
피연산자(operand): 연산(operation)에 참여하는 변수나 값
- 산술 연산자
- 우선순위
산술 연산자의 우선순위는 괄호가 가장 우선, 곱셈(또는 나눗셈이) 그 다음, 덧셈(또는 뺄셈)이 가장 마지막으로 수행하는
덧셈(또는 뺄셈)끼리 나오거나 곱셈(또는 나눗셈)끼리 나오면 왼쪽에서 오른쪽으로 계산이 진행됨
https://dojang.io/mod/page/view.php?id=2461 -> 연산자 우선순위 참고하기
a, b, c = 2, 3, 4
이렇게 입력하면 2, 3, 4가 각각 a, b, c에 대입됨
- 문자열과 숫자의 상호 변환
문자열 -> 정수 int()
-> 실수 float()
숫자 -> 문자열 str()
- 대입 연산자(assignment operator)
변수의 저장 값을 대입하는 = 기호 사용
대입 연산자 오른쪽 수식을 먼저 계산하고 결과값을 왼쪽 변수에 대입하는 기능
대입 연산자의 왼쪽에는 반드시 변수만이 가능, 대입 연산자 왼쪾에 온 변수는 값이 변경됨
수식의 결과값을 변수에 대입하지 않으면 프로그램에는 영향이 없음
- 단축대입 연산자
- 관계 연산자(relational operator)
어떤 것이 큰지, 작은지, 같은지를 비교하는 것. 결과는 True or False
주로 조건문(if)이나 반복문(for, while)에서 사용
- 논리 연산자
and
or
not
- 제어문 종류
조건문: if, if elif
반복문: for, while
분기문(jump statements): return, break, continue
for문: 리스트, 튜플, 문자열이 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 '수행할 문장1', '수행할 문자2' 등이 수행됨
for 변수 in 리스트(또는 튜플, 문자열):
statement1
statement2
...
range() 함수
break: 반복문 탈출
continue문: continue문을 만나면 무조건 블록의 남은 부분을 건너뛰고 반복문의 처음으로 돌아감
예)
hap, i = 0, 0
for i in range(1, 101):
if i % 3 == 0:
continue
hap += i
print("1~100의 합계(3의 배수 제외): %d" % hap)
number = 1234
sum = 0
while number > 0:
digit = number % 10
sum += digit
number = number //10
각 자리수를 더하는 프로그램 예
- 함수의 개념
함수: 독립적으로 수행하는 프로그램 단위, 특정 작업을 수행하는 명령어들의 모음
프로그램에서 반복적으로 수행되는 기능을 함수로 만들어 호출
함수는 작업에 필요한 데이터(매개변수)를 전달받을 수 있으며, 작업이 완료된 후에는 작업의 결과를 호출자에게 반환할 수 있음
반환값 - return
입력값 - 매개변수(인수)
- 리스트: 여러 정보를 하나로 묶어서 저장하고 관리할 수 있게 하는 데이터 구조
서로 다른 데이터 타입의 데이터를 하나의 리스트 이름으로 관리 가능
리스트 이름 = [값1, 값2, 값3]
인덱스: 원소가 배열된 순서를 나타냄(0부터 시작)
인덱스를 이용하여 원소에 접근할 수 있음
예) season = ['spring', 'summer', 'fall', 'winter']
>>> season[1]
'summer'
'in' & 'not in'
>>> 'summer' in season
True
>>> 'abc' in season
False
리스트 순회하기
for i in season:
print(i, end=' ')
'spring' 'summer' 'fall' 'winter'
- 데이터 구조
리스트
튜플
딕셔너리
문자열
데이터 구조: 프로그램에서 자료를 저장하는 여러 가지 구조들이 있다. 이를 자료 구조(data structure)라고 한다.
튜플: 변경 불가한 리스트
딕셔너리: 키(key)와 값(value)의 쌍을 저장할 수 있는 객체
in
.items()
문자열: 문자들의 시퀀스
인덱싱 a[2]
슬라이싱 a[2:5]
in, not in
'프로그래밍 > Python' 카테고리의 다른 글
[Python] print()와 함께 자주 쓰는 join(), sep='', end='' / spread operator(*) (0) | 2022.02.06 |
---|---|
[Python] 입력값을 받는 방법들 - input(), sys.stdin.readline() (0) | 2022.02.06 |
[Python] 객체지향프로그래밍(OOP, Object Oriented Programming)_class, instance, method (0) | 2020.04.24 |
[Python] 숫자 맞추기 게임(업다운 게임)_while문, try/except(예외처리) (4) | 2020.04.22 |
[Python] Python 설치하기 (0) | 2020.03.13 |
댓글