본문 바로가기
프로그래밍/Python

[Python 프로그래밍] 1. 개요/2. 연산자/3. 제어문, 함수, 자료구조

by 소꿍 2020. 4. 9.

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 

댓글