파이썬이란?
파이썬이란?
- Python은 웹 애플리케이션, 소프트웨어 개발, 데이터 과학, 기계 학습(ML)에 널리 사용되는 프로그래밍 언어입니다.
- 효율적이고 배우기 쉬우며 여러 플랫폼에서 실행될 수 있습니다.
- 무료로 다운로드 가능하며, 모든 시스템과 원활하게 통합되고 개발 속도를 증가시킵니다.
파이썬의 주요 특징
- 해석된 언어: 코드를 한 줄씩 직접 실행합니다. 오류가 있으면 실행이 중지됩니다.
- 사용하기 쉬운 언어: 영어와 유사한 단어를 사용하고, 중괄호 대신 들여쓰기를 사용합니다.
- 동적 타이핑: 변수 유형을 런타임에 결정하므로, 변수 유형을 선언할 필요가 없습니다.
- 고급 언어: 인간 언어에 더 가깝고, 기본 기능에 대해 걱정할 필요가 없습니다.
- 객체 지향 언어: 모든 것을 객체로 간주하지만, 구조적 및 함수형 프로그래밍도 지원합니다.
파이썬의 이점
- 가독성: 기본적이고 영어와 유사한 구문을 가지고 있어 쉽게 읽고 이해할 수 있습니다.
- 생산성: 다른 언어에 비해 더 적은 코드 줄을 사용하여 프로그램을 작성할 수 있습니다.
- 풍부한 라이브러리: 대규모 표준 라이브러리와 재사용 가능한 코드가 포함되어 있어 코드를 처음부터 작성할 필요가 없습니다.
- 다양한 언어와 호환: Java, C, C++ 등 다른 언어와 쉽게 통합할 수 있습니다.
- 활발한 커뮤니티: 전 세계 수백만 명의 개발자가 지원하는 활발한 커뮤니티가 있어 문제 해결이 빠릅니다.
- 다양한 학습 자료: 인터넷에서 유용한 리소스(동영상, 자습서, 문서 등)를 많이 찾을 수 있습니다.
- 플랫폼 호환성: Windows, macOS, Linux, Unix 등 다양한 운영 체제에서 호환 가능합니다.
활용 분야
서버 측 웹 개발
- 웹 사이트의 백엔드 기능(데이터베이스 상호 작용, 통신, 데이터 보호 등) 구현에 사용됩니다.
- Django, Flask 등의 웹 프레임워크를 사용하여 빠르고 쉽게 웹 애플리케이션을 구축할 수 있습니다.
Python 스크립트를 사용한 자동화
- 인간이 일반적으로 수행하는 일상적인 작업(파일 이름 변경, 형식 변환, 이메일 전송 등)을 자동화하는 데 사용됩니다.
데이터 과학 및 기계 학습
- 데이터 정리: 잘못된 데이터 수정 및 제거
- 데이터 시각화: 꺾은선 차트, 막대 그래프, 히스토그램 등
- 기계 학습 모델: Python ML 라이브러리를 사용하여 데이터 분류 및 예측 수행
소프트웨어 개발
- 버그 추적, 자동 구축: 소프트웨어 개발 및 관리
- GUI 개발: 그래픽 사용자 인터페이스를 사용한 데스크톱 애플리케이션 개발
- 테스트 자동화: Unittest, Robot, PyUnit 등을 사용하여 소프트웨어 테스트
필수 소프트웨어 설치
- Python 설치
- 공식 사이트(https://www.python.org에서 최신 버전의 Python을 다운로드하고 설치합니다.
Anaconda 설치데이터 분석에 유용한 패키지 관리 및 가상 환경을 제공하는 Anaconda를 설치합니다. (https://www.anaconda.com/products/distribution)
필수 라이브러리 설치
- 터미널이나 명령 프롬프트에서 다음 명령어를 실행하여 필요한 라이브러리를 설치합니다.
pip install numpy pandas matplotlib seaborn scikit-learn
변수(Variables)와 연산자(Operators)
1. 파이썬 변수 (Variables)
변수란?
- 변수는 데이터를 저장하는 이름이 붙은 메모리 위치입니다.
- 변수에 값을 할당하면, 그 값을 변수 이름을 사용하여 참조할 수 있습니다.
변수 선언 및 할당
- Python에서는 변수를 선언할 때 자료형을 명시할 필요가 없습니다.
- 변수명은 문자, 숫자, 밑줄(_)로 구성될 수 있으며, 숫자로 시작할 수 없습니다.
- 대소문자를 구분합니다.
예제
# 변수 선언 및 값 할당
age = 25 # 정수형 변수
height = 1.75 # 실수형 변수
name = "Alice" # 문자열 변수
is_student = True # 불리언 변수
# 변수 출력
print(age) # 25
print(height) # 1.75
print(name) # Alice
print(is_student) # True
2. 파이썬 연산자 (Operators)
산술 연산자 (Arithmetic Operators)
- 기본적인 수학 연산을 수행합니다.
연산자 설명 예시 결과
+ | 덧셈 | 5 + 3 | 8 |
- | 뺄셈 | 5 - 3 | 2 |
* | 곱셈 | 5 * 3 | 15 |
/ | 나눗셈 | 5 / 3 | 1.67 |
// | 몫 | 5 // 3 | 1 |
% | 나머지 | 5 % 3 | 2 |
** | 제곱 | 5 ** 3 | 125 |
예제
a = 5
b = 3
print(a + b) # 8
print(a - b) # 2
print(a * b) # 15
print(a / b) # 1.6666666666666667
print(a // b) # 1
print(a % b) # 2
print(a ** b) # 125
비교 연산자 (Comparison Operators)
- 두 값을 비교하여 불리언 결과를 반환합니다.
연산자 설명 예시 결과
== | 같다 | 5 == 3 | False |
!= | 같지 않다 | 5 != 3 | True |
> | 크다 | 5 > 3 | True |
< | 작다 | 5 < 3 | False |
>= | 크거나 같다 | 5 >= 3 | True |
<= | 작거나 같다 | 5 <= 3 | False |
예제
a = 5
b = 3
print(a == b) # False
print(a != b) # True
print(a > b) # True
print(a < b) # False
print(a >= b) # True
print(a <= b) # False
논리 연산자 (Logical Operators)
- 불리언 값들을 조합하여 결과를 반환합니다.
연산자 설명 예시 결과
and | 논리적 AND | True and False | False |
or | 논리적 OR | True or False | True |
not | 논리적 NOT | not True | False |
예제
x = True
y = False
print(x and y) # False
print(x or y) # True
print(not x) # False
할당 연산자 (Assignment Operators)
- 변수에 값을 할당하거나, 기존 변수의 값을 수정합니다.
연산자 설명 예시 결과
= | 값 할당 | a = 5 | a가 5 |
+= | 덧셈 후 할당 | a += 3 | a가 8 |
-= | 뺄셈 후 할당 | a -= 3 | a가 2 |
*= | 곱셈 후 할당 | a *= 3 | a가 15 |
/= | 나눗셈 후 할당 | a /= 3 | a가 1.67 |
//= | 몫 후 할당 | a //= 3 | a가 1 |
%= | 나머지 후 할당 | a %= 3 | a가 2 |
**= | 제곱 후 할당 | a **= 3 | a가 125 |
예제
a = 5
a += 3 # a = a + 3
print(a) # 8
a -= 3 # a = a - 3
print(a) # 2
a *= 3 # a = a * 3
print(a) # 15
a /= 3 # a = a / 3
print(a) # 5.0
a //= 3 # a = a // 3
print(a) # 1.0
a %= 3 # a = a % 3
print(a) # 1.0
a **= 3 # a = a ** 3
print(a) # 1.0
3. 추가 예제 및 실습
3.1 출력 함수 연습
# 문자열 출력
print('Hello Python!!')
# 잘못된 출력 예제
print(Hello Python!!)
# SyntaxError: invalid syntax
# 변수와 함께 출력
print('My age is', 20)
print('오늘의 걸음 수', 8000, '걸음')
# 문자열 반복 출력
print('Hello ' * 2)
print('Hello ' * 4)
# 스크립트 코드로 간단한 출력 프로그램 작성
print('나의 이름은 :', '홍길동')
print('나의 나이는 :', 27)
print('나의 키는', 179, 'cm 입니다.')
print('10 + 20 =', 10 + 20)
print('10 * 20 =', 10 * 20)
3.2 원의 반지름, 면적, 둘레를 출력하는 프로그램
# 상수와 변수 사용
radius = 4.0
print('원의 반지름', radius)
print('원의 면적', 3.14 * radius * radius)
print('원의 둘레', 2.0 * 3.14 * radius)
# 다른 반지름 값으로 수정
radius = 5.0
print('원의 반지름', radius)
print('원의 면적', 3.14 * radius * radius)
print('원의 둘레', 2.0 * 3.14 * radius)
3.3 변수를 이용하여 원의 면적과 둘레를 구하는 방법
radius = 4.0
print('원의 반지름', radius)
print('원의 면적', 3.14 * radius * radius)
print('원의 둘레', 2.0 * 3.14 * radius)
radius = 6.0
print('원의 반지름', radius)
print('원의 면적', 3.14 * radius * radius)
print('원의 둘레', 2.0 * 3.14 * radius)
3.4 변수에 값을 지정하고 출력하기
name = '홍길동'
print(name)
width = 10
height = 5
rectangle_area = width * height
print(rectangle_area)
3.5 변수에 새로운 값을 할당하기
name = '홍길동'
age = 27
print('안녕! 나는', name , '이야. 나는 나이가', age, '살이야.')
name = '홍길순'
age = 23
print('안녕! 나는', name , '이야. 나는 나이가', age, '살이야.')
3.6 다양한 연산 예제
print(4 + 10) # 덧셈 연산
print(4.0 - 0.1) # 뺄셈 연산
print(20 * 20) # 곱셈 연산
print(11 / 2) # 실수 나눗셈 연산
print(11 // 2) # 정수 나눗셈 연산 - 몫을 구함
print(11 % 2) # 정수 나눗셈후의 나머지 연산
print(4 ** 0.5) # 거듭제곱 - 4의 제곱근을 구함
print(4 ** 5) # 거듭제곱 - 4의 5승을 구함
3.7 다양한 자료형의 이해와 type 함수
num = 85
print(type(num)) # int
pi = 3.14159
print(type(pi)) # float
message = "Good morning"
print(type(message)) # str
# 동적 형결정(dynamic typing)의 이해
foo = 100
print(type(foo)) # int
foo = 'Hello'
print(type(foo)) # str
제어문(조건문과 반복문)
1. 조건문 (Conditional Statements)
if 문
- if 문은 조건이 참일 때 특정 코드를 실행하는 제어문입니다.
- 조건이 참이면 코드 블록을 실행합니다.
예제
age = 18
if age >= 18:
print("성인입니다.") # 출력: 성인입니다.
if-else 문
- if 문과 else 문을 사용하여 조건이 참일 때와 거짓일 때 실행할 코드를 각각 지정할 수 있습니다.
예제
age = 16
if age >= 18:
print("성인입니다.")
else:
print("미성년자입니다.") # 출력: 미성년자입니다.
if-elif-else 문
- 여러 조건을 검사할 때 elif 문을 사용합니다.
예제
score = 85
if score >= 90:
print("A학점")
elif score >= 80:
print("B학점") # 출력: B학점
elif score >= 70:
print("C학점")
else:
print("F학점")
중첩 조건문
- 조건문 안에 또 다른 조건문을 사용할 수 있습니다.
예제
age = 20
is_student = True
if age < 18:
if is_student:
print("학생 미성년자입니다.")
else:
print("미성년자입니다.")
else:
if is_student:
print("학생 성인입니다.") # 출력: 학생 성인입니다.
else:
print("성인입니다.")
2. 반복문 (Loops)
for 문
- for 문은 시퀀스(리스트, 튜플 등)의 각 요소를 반복할 때 사용됩니다.
예제
fruits = ["사과", "바나나", "체리"]
for fruit in fruits:
print(fruit)
# 출력:
# 사과
# 바나나
# 체리
range 함수
- range 함수를 사용하여 일정 범위의 숫자를 생성하고 반복할 수 있습니다.
예제
for i in range(5):
print(i)
# 출력:
# 0
# 1
# 2
# 3
# 4
while 문
- while 문은 조건이 참인 동안 반복되는 루프를 생성합니다.
예제
count = 0
while count < 5:
print(count)
count += 1
# 출력:
# 0
# 1
# 2
# 3
# 4
3. 중첩 루프 (Nested Loops)
- 루프 안에 또 다른 루프를 사용할 수 있습니다.
예제
for i in range(3):
for j in range(3):
print(f"i: {i}, j: {j}")
# 출력:
# i: 0, j: 0
# i: 0, j: 1
# i: 0, j: 2
# i: 1, j: 0
# i: 1, j: 1
# i: 1, j: 2
# i: 2, j: 0
# i: 2, j: 1
# i: 2, j: 2
4. break와 continue
break 문
- break 문은 루프를 즉시 종료시킵니다.
예제
for i in range(10):
if i == 5:
break
print(i)
# 출력:
# 0
# 1
# 2
# 3
# 4
continue 문
- continue 문은 루프의 현재 반복을 건너뛰고 다음 반복을 실행합니다.
예제
for i in range(10):
if i % 2 == 0:
continue
print(i)
# 출력:
# 1
# 3
# 5
# 7
# 9
6. 예제 및 실습
예제 1: 짝수 출력
for i in range(1, 11):
if i % 2 == 0:
print(i)
# 출력:
# 2
# 4
# 6
# 8
# 10
예제 2: 구구단 출력
for i in range(2, 10):
for j in range(1, 10):
print(f"{i} * {j} = {i * j}")
print()
# 출력: 각 단의 곱셈 결과
예제 3: 사용자 입력을 받아 조건문 실행
age = int(input("나이를 입력하세요: "))
if age >= 18:
print("성인입니다.")
else:
print("미성년자입니다.")
# 출력: 나이에 따라 "성인입니다." 또는 "미성년자입니다."
예제 4: 합계 구하기
numbers = [1, 2, 3, 4, 5]
sum = 0
for num in numbers:
sum += num
print("합계:", sum)
# 출력: 합계: 15
예제 5: 리스트에서 특정 값 찾기
numbers = [10, 20, 30, 40, 50]
target = 30
found = False
for num in numbers:
if num == target:
found = True
break
if found:
print("찾았습니다!")
else:
print("찾지 못했습니다.")
# 출력: 찾았습니다!
예제 6: 사용자로부터 입력받은 숫자까지의 합을 구하는 프로그램
n = int(input("숫자를 입력하세요: "))
sum = 0
for i in range(1, n + 1):
sum += i
print("합계:", sum)
# 출력: 입력한 숫자까지의 합계
예제 7: 리스트 내포(list comprehension)를 사용하여 1부터 20까지의 숫자 중 짝수만 포함된 리스트를 만드세요.
even_numbers = [x for x in range(1, 21) if x % 2 == 0]
print(even_numbers)
# 출력: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
7. 고급 주제: 리스트 내포 (List Comprehensions)와 조건문 결합
예제 1: 조건부 리스트 내포
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
squared_even_numbers = [x**2 for x in numbers if x % 2 == 0]
print(squared_even_numbers)
# 출력: [4, 16, 36, 64, 100]
예제 2: 중첩된 리스트 내포
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened = [num for row in matrix for num in row]
print(flattened)
# 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9]
8. 사용자 정의 함수와 제어문
예제 1: 팩토리얼 계산 함수
def factorial(n):
result = 1
for i in range(1, n + 1):
result += i
return result
print(factorial(5))
# 출력: 15
예제 2: 피보나치 수열 생성 함수
def fibonacci(n):
sequence = [0, 1]
while len(sequence) < n:
sequence.append(sequence[-1] + sequence[-2])
return sequence
print(fibonacci(10))
# 출력: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
함수(Functions)
1. 함수 (Functions)
함수란?
- 함수의 정의: 함수는 재사용 가능한 코드의 묶음으로, 특정 작업을 수행하는 독립적인 코드 블록입니다. 함수는 프로그램의 구조를 개선하고, 코드의 재사용성을 높이며, 유지 보수를 쉽게 만들어줍니다.
- 함수의 목적:
- 코드 재사용: 동일한 작업을 여러 번 수행해야 할 때, 함수를 정의하고 이를 호출하여 중복되는 코드를 피할 수 있습니다.
- 코드의 가독성 향상: 함수는 코드를 논리적인 단위로 나누어, 각 단위가 하나의 작업을 수행하도록 합니다. 이는 코드를 더 읽기 쉽고 이해하기 쉽게 만듭니다.
- 유지 보수 용이: 함수는 독립적인 코드 블록이기 때문에, 코드를 수정할 때 함수 내부만 수정하면 됩니다. 이는 버그를 수정하거나 기능을 개선하는 데 도움이 됩니다.
- 함수 정의 방법: 함수는 def 키워드를 사용하여 정의하며, 함수 이름, 매개변수 목록, 그리고 함수 본문으로 구성됩니다.
함수의 기본 구조
def 함수이름(매개변수1, 매개변수2, ...):
"""문서화 문자열 (옵션)"""
함수 본문
return 반환값 (옵션)
예제: 간단한 함수 정의 및 호출
def greet(name):
"""주어진 이름을 인사하는 함수"""
print(f"안녕하세요, {name}님!")
greet("홍길동") # 출력: 안녕하세요, 홍길동님!
- 함수 이름: 함수의 이름은 함수의 목적을 나타내는 의미 있는 이름이어야 합니다. 이름은 소문자로 작성하고, 필요시 언더스코어(_)로 단어를 구분합니다.
- 매개변수: 매개변수는 함수가 작업을 수행하는 데 필요한 입력값입니다. 함수 정의 시 매개변수 목록을 괄호 안에 작성하며, 함수 호출 시 해당 값들을 전달합니다.
- 반환값: 함수는 return 키워드를 사용하여 결과를 반환할 수 있습니다. 반환값이 없는 함수는 묵시적으로 None을 반환합니다.
반환값이 있는 함수
def add(a, b):
"""두 수의 합을 반환하는 함수"""
return a + b
result = add(3, 5)
print(result) # 출력: 8
기본 매개변수 값
- 함수 정의 시 매개변수에 기본값을 설정할 수 있습니다. 기본값이 설정된 매개변수는 함수 호출 시 해당 값을 생략할 수 있습니다.
def greet(name="친구"):
print(f"안녕하세요, {name}님!")
greet() # 출력: 안녕하세요, 친구님!
greet("홍길동") # 출력: 안녕하세요, 홍길동님!
가변 매개변수 (*args, **kwargs)
- 가변 인자: 함수에 전달되는 인자의 개수가 가변적일 때 사용합니다.
- args: 위치 인자를 튜플로 받습니다.
- *kwargs: 키워드 인자를 딕셔너리로 받습니다.
def print_numbers(*args):
for number in args:
print(number)
print_numbers(1, 2, 3, 4) # 출력: 1, 2, 3, 4
def print_info(**kwargs):
for key, value in kwargs.items():
print(f"{key}: {value}")
print_info(name="홍길동", age=27) # 출력: name: 홍길동, age: 27
2. 입출력 (Input/Output)
표준 입력 (Standard Input)
- input() 함수를 사용하여 사용자로부터 입력을 받을 수 있습니다.
- input() 함수는 항상 문자열을 반환하므로 필요에 따라 형 변환을 해야 합니다.
name = input("이름을 입력하세요: ")
print(f"안녕하세요, {name}님!") # 출력: 안녕하세요, 입력한 이름님!
age = int(input("나이를 입력하세요: "))
print(f"10년 후 나이는 {age + 10}살 입니다.") # 출력: 10년 후 나이는 입력한 나이 + 10살 입니다.
표준 출력 (Standard Output)
- print() 함수를 사용하여 값을 출력할 수 있습니다.
- 여러 값을 쉼표로 구분하여 출력하거나, 문자열 포매팅을 사용할 수 있습니다.
print("Hello", "Python", "!") # 출력: Hello Python !
print("10 + 20 =", 10 + 20) # 출력: 10 + 20 = 30
# 문자열 포매팅
name = "홍길동"
age = 27
print(f"안녕하세요, {name}님! 나이는 {age}살 입니다.") # 출력: 안녕하세요, 홍길동님! 나이는 27살 입니다.
파일 입출력 (File Input/Output)
- 파일을 읽거나 쓰기 위해 open() 함수를 사용합니다.
- 파일 모드: 읽기('r'), 쓰기('w'), 추가('a'), 바이너리 모드('b')
# 파일 쓰기
with open("example.txt", "w") as file:
file.write("Hello, Python!\\n")
file.write("파일 입출력 예제입니다.")
# 파일 읽기
with open("example.txt", "r") as file:
content = file.read()
print(content) # 출력: 파일의 내용
3. 예제 및 실습
예제 1: 두 수의 합을 구하는 함수 작성 및 호출
def add(a, b):
return a + b
num1 = int(input("첫 번째 숫자를 입력하세요: "))
num2 = int(input("두 번째 숫자를 입력하세요: "))
result = add(num1, num2)
print(f"두 수의 합은 {result}입니다.") # 출력: 두 수의 합은 입력한 숫자의 합입니다.
예제 2: 리스트의 평균을 구하는 함수 작성
def calculate_average(numbers):
return sum(numbers) / len(numbers)
scores = [80, 90, 85, 70, 95]
average = calculate_average(scores)
print(f"평균 점수는 {average}입니다.") # 출력: 평균 점수는 점수의 평균입니다.
예제 3: 파일에 사용자 입력 저장
filename = input("저장할 파일명을 입력하세요: ")
with open(filename, "w") as file:
while True:
data = input("파일에 저장할 내용을 입력하세요 (종료하려면 '끝' 입력): ")
if data == '끝':
break
file.write(data + "\\n")
print(f"{filename} 파일에 내용이 저장되었습니다.")
예제 4: 파일에서 데이터 읽고 출력
filename = input("읽을 파일명을 입력하세요: ")
try:
with open(filename, "r") as file:
content = file.read()
print("파일의 내용:")
print(content)
except FileNotFoundError:
print("파일을 찾을 수 없습니다.")
4. 고급 주제: 재귀 함수 (Recursive Functions)
재귀 함수란?
- 재귀 함수는 함수가 자기 자신을 호출하는 함수입니다.
- 재귀 함수는 문제를 작은 문제로 나누어 해결할 때 유용합니다.
예제: 팩토리얼 계산
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
print(factorial(5)) # 출력: 120
예제: 피보나치 수열
def fibonacci(n):
if n <= 1:
return n
else:
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(10)) # 출력: 55
5. 예제 및 실습 문제
문제 1: 구의 부피를 계산하는 함수 작성
def calculate_sphere_volume(radius):
# TODO:
문제 2: 파일에서 특정 단어 개수 세기
filename = input("읽을 파일명을 입력하세요: ")
word_to_count = input("세고 싶은 단어를 입력하세요: ")
# TODO:
문제 3: 두 수의 최대공약수를 구하는 함수 작성
def gcd(a, b):
# TODO:
num1 = int(input("첫 번째 숫자를 입력하세요: "))
num2 = int(input("두 번째 숫자를 입력하세요: "))
result = gcd(num1, num2)
print(f"두 수의 최대공약수는 {result}입니다.")