1. 실전 함수 만들기 (프로그램 활용)
- 3과 5의 배수를 모두 더하는 문제는 기본적인 알고리즘 구현 능력을 키우는 데 도움이 된다.
- 예를 들어, 1부터 999까지의 수 중 3 또는 5의 배수를 모두 더하는 프로그램을 작성할 수 있다.
# 3과 5의 배수를 모두 더하기 예시
total = sum(x for x in range(1000) if x % 3 == 0 or x % 5 == 0)
print(total) # 출력: 233168
- 게시판에서 한 페이지에 게시물을 몇 개씩 보여줄지를 결정하는 페이징 기능을 구현해 본다.
- 예를 들어, 총 50개의 게시물을 10개씩 나누어 페이지 수를 계산할 수 있다.
# 게시판 페이징 예시
def get_total_pages(total_items, items_per_page):
return (total_items + items_per_page - 1) // items_per_page
print(get_total_pages(50, 10)) # 출력: 5
- 텍스트 파일에 간단한 내용을 저장하고 읽어 들이는 메모장을 만든다.
- 이를 통해 파일 입출력의 기본을 배울 수 있다.
# 간단한 메모장 예시
with open("memo.txt", "w") as f:
f.write("이것은 메모장입니다.")
with open("memo.txt", "r") as f:
content = f.read()
print(content) # 출력: 이것은 메모장입니다.
- 탭 문자를 공백 문자 4개로 변경하는 간단한 변환 프로그램을 작성한다.
- 이를 통해 문자열의 기본적인 처리를 배울 수 있다.
# 탭을 공백 4개로 바꾸기 예시
text = "Hello\tWorld"
converted_text = text.replace("\t", " " * 4)
print(converted_text) # 출력: Hello World
- 지정된 디렉터리 아래의 모든 파일을 검색하는 프로그램을 작성한다.
- 이를 통해 파일 시스템을 탐색하는 방법을 배울 수 있다.
# 하위 디렉터리 검색 예시
import os
def search_subdirectories(directory):
for root, dirs, files in os.walk(directory):
for file in files:
print(os.path.join(root, file))
search_subdirectories(".")
2. 파이썬과 유니코드
- 아스키코드는 최초의 문자 셋으로 영어 알파벳과 일부 특수 문자를 표현한다.
- 이는 총 128개의 문자로 구성되어 있다.
- 유니코드는 아스키코드의 한계를 극복하고 다양한 언어의 문자를 표현하기 위해 등장했다.
- 유니코드는 전 세계의 거의 모든 문자를 표현할 수 있다.
- 파이썬에서는 유니코드 문자열을 기본으로 지원하며, str 타입은 유니코드로 다룬다.
# 유니코드 문자열 예시
text = "안녕하세요"
print(text) # 출력: 안녕하세요
3. 클로저(Closer)와 데코레이터(Decorator)
- 클로저는 함수 내부에 정의된 함수를 의미하며, 외부 함수의 변수를 참조하는 함수를 클로저라고 한다.
- 클로저는 함수의 상태를 유지하면서 함수를 사용할 수 있게 해 준다.
# 클로저 예시
def outer_function(msg):
def inner_function():
print(msg)
return inner_function
closure = outer_function("안녕하세요")
closure() # 출력: 안녕하세요
- 데코레이터는 함수를 감싸는 함수로, 기존 함수의 기능을 변경하거나 확장하는 데 사용된다.
- 데코레이터를 사용하면 코드의 중복을 줄이고 기능을 쉽게 확장할 수 있다.
# 데코레이터 예시
def decorator_function(original_function):
def wrapper_function():
print("함수가 호출되기 전입니다.")
original_function()
print("함수가 호출된 후입니다.")
return wrapper_function
@decorator_function
def say_hello():
print("Hello!")
say_hello()
4. 이터레이터(Iterator)와 제너레이터(Generator)
- 이터레이터는 반복 가능한 객체를 의미하며, __iter__()와 __next__() 메서드를 통해 순차적으로 값을 반환한다.
- 클래스를 통해 직접 이터레이터를 만들 수 있다.
# 이터레이터 만들기 예시
class Counter:
def __init__(self, low, high):
self.current = low
self.high = high
def __iter__(self):
return self
def __next__(self):
if self.current > self.high:
raise StopIteration
else:
self.current += 1
return self.current - 1
counter = Counter(1, 3)
for count in counter:
print(count) # 출력: 1, 2, 3
- 제너레이터는 yield 키워드를 사용하여 값을 하나씩 반환하는 함수이다.
- 이터레이터보다 간단하게 반복 작업을 구현할 수 있다.
# 제너레이터 예시
def my_generator():
yield 1
yield 2
yield 3
for value in my_generator():
print(value) # 출력: 1, 2, 3
- 제너레이터 표현식을 사용하면 메모리를 절약하면서 간단하게 반복 작업을 수행할 수 있다.
# 제너레이터 표현식 예시
gen_exp = (x ** 2 for x in range(5))
for num in gen_exp:
print(num) # 출력: 0, 1, 4, 9, 16
5. 파이썬 타입 어노테이션
- 파이썬은 동적 타이핑 언어이다.
- 변수의 타입을 명시적으로 선언하지 않아도 된다.
- 반면에 정적 언어는 변수의 타입을 미리 선언해야 한다.
- 파이썬 3.5부터 타입 어노테이션을 지원하여, 함수나 변수의 타입을 명시적으로 지정할 수 있다.
- 이를 통해 코드의 가독성을 높이고, 오류를 줄이는 데 도움이 된다.
# 타입 어노테이션 예시
def add_numbers(a: int, b: int) -> int:
return a + b
print(add_numbers(3, 5)) # 출력: 8
6. 정규 표현식
- 정규 표현식은 문자열에서 특정 패턴을 찾거나, 대체하는 작업을 쉽게 처리하기 위해 필요하다.
- 이를 통해 복잡한 문자열 처리를 간단하게 수행할 수 있다.
- 정규 표현식의 기초인 메타 문자와 파이썬의 re 모듈을 사용해 본다.
- 메타 문자는.(임의 문자), *(0개 이상의 반복), +(1개 이상의 반복) 등이 있다.
- 파이썬에서는 re 모듈을 사용하여 정규 표현식을 지원한다.
# re 모듈 사용 예시
import re
pattern = r"ab*"
text = "abbb abb aab"
matches = re.findall(pattern, text)
print(matches) # 출력: ['abbb', 'abb']
- match(), search(), findall() 메서드를 사용해 문자열에서 패턴을 찾을 수 있다.
- group(), start(), end() 등을 사용하여 매칭된 문자열의 정보를 얻을 수 있다.
- 정규식을 컴파일할 때 re.IGNORECASE, re.MULTILINE 등의 옵션을 줄 수 있다.
- 정규식에서 역슬래시(\)를 사용할 때 파이썬 문자열에서 두 번 사용해야 하는 문제를 해결하기 위해 raw string(r"...")을 사용한다.
- (?=...), (?!...) 등의 메타 문자를 사용하여 문자열을 소비하지 않고도 패턴을 검색할 수 있다.
- ()를 사용하여 부분 문자열을 그룹으로 묶고, group() 메서드를 통해 그룹화된 문자열을 참조할 수 있다.
- 전방 탐색은 특정 패턴 앞이나 뒤에 있는 문자열을 찾는 데 사용된다.
- sub() 메서드를 사용하여 정규식을 통해 문자열을 다른 문자열로 바꿀 수 있다.
- *, + 등은 기본적으로 최대한 많이 매칭하려고 하지만, *?, +?+? 와 같은 방식으로 최소 매칭을 할 수도 있다.
'IT & AI > AI 지식' 카테고리의 다른 글
C 언어 연산자와 제어문 총정리 (0) | 2024.11.18 |
---|---|
C 언어 기본 개념과 프로그램 구조, 변수, 상수, 데이터 입력과 출력 (1) | 2024.11.17 |
파이썬 활용 (1): 클래스, 모듈, 패키지, 예외처리 (0) | 2024.11.14 |
파이썬(Python) 제어문과 입출력 정리 (1) | 2024.11.14 |
파이썬(Python) 자료형과 변수 쉽게 배우기 (1) | 2024.11.13 |