[5일차] ABC 부트캠프 : 파이썬프로그래밍3 (24.07.10)
ABC부트캠프 #유클리드소프트 #고용노동부 #대한상공회의소 #미래내일일경험사업 #인공지능 #파이썬 #머신러닝 #딥러닝
기술배움 3일차의 날이 밝았습니다!!~~
오늘은 비가 거의 안와서 자전거를 타고 가보았습니다 (3분 컷)
오늘도 화이팅해서 배워봅시다!!

오늘은 이전 내용 정리와 Python 함수, 표준 라이브러리에 대해 배워보았습니다
오전에는 정리를 하고 오후부터 본격적인 진도를 나갔기에 간단한 정리 후 내용 이어나가겠습니다
파이썬을 이용한 데이터 분석
파이썬 활용의 장점 및 데이터 타입 소개
파이썬은 빅데이터 처리에 용이하며 직관적인 도구를 제공합니다. 파이썬에서 지원되는 다양한 데이터 타입과 그 활용법을 이해하는 것이 중요합니다. 이러한 데이터 타입들은 데이터 형성과 수정이 용이하도록 설계되어 있어 데이터 분석 작업을 편리하게 합니다.
파이썬의 내장 함수와 데이터 타입
파이썬에서는 데이터를 생성하고 조작할 수 있는 다양한 내장 함수와 데이터 타입이 제공됩니다. 각 데이터 타입의 특성과 용도를 이해하고 적절히 활용하는 것이 중요합니다. 특히 불필요한 데이터를 최소화하기 위해 적절한 데이터 타입을 선택하는 것이 중요합니다.
파이썬의 연산자와 중요성
파이썬의 기본 연산자(더하기, 빼기, 곱하기 등)는 다양한 데이터 처리 작업에 필수적입니다. 연산자들은 연산 목적에 따라 다르게 적용되며, 특정 연산의 순서를 결정합니다. 특히 비선형 연산(예: 홀짝 검토)은 강력한 데이터 처리 능력을 요구합니다.
프로그래밍 언어를 이용한 데이터 처리 방법
다양한 연산자의 이해 및 활용
프로그래밍 언어에서 연산자는 계산과 논리적 판단을 수행하는 중요한 도구입니다. 다양한 연산자(논리 연산자, 산술 연산자 등)의 특성과 사용법을 이해하는 것이 중요합니다. 조건문에서 사용되는 논리 연산자는 코드의 목적에 따라 달리 적용될 수 있습니다.
문자열 데이터 타입과 그 활용
문자열 데이터 타입은 특정한 표현을 지정하는 도구로, 다양한 연산이 가능합니다. 문자열에서는 더하기(+)와 곱하기(*) 연산을 통해 패턴을 검사하거나 생성할 수 있습니다. 인덱스와 슬라이싱을 활용하면 문자열 데이터를 효율적으로 조작할 수 있습니다.
데이터 형식 및 이해
데이터 형식과 종류
데이터는 기본 정보부터 복잡한 형태까지 다양한 유형이 있습니다. 데이터의 형식을 이해하고 적절히 활용하는 것이 중요합니다. 논리 연산자는 논리 관계를 명료하게 표현하여 의사결정을 지원합니다.
인덱스와 슬라이싱
인덱스는 개별 요소를 특정 순서로 배열하는 값을 나타내며, 슬라이싱은 여러 개의 요소 중 일부를 선택하는 방법입니다. 적절한 인덱스와 슬라이싱의 사용은 데이터 처리에 강력한 통제력을 제공합니다.
강좌 내용 정리 - 개발 프로그래밍 언어와 그래픽 활용 능력 향상
단계별 표현 및 코딩 이해
개발 프로그래밍 언어의 코딩 체계에 대한 이해를 위해 단계별 표현을 설명합니다. 구체적인 코딩 명령어의 예시를 통해 구현 방법을 제시합니다.
위치 및 방향의 선언
개발 프로그래밍 언어에서 위치 및 방향을 선언하여 특정 값을 계산하는 과정을 설명합니다. 이는 프로그램의 실질적 원리를 이해하는 데 도움을 줍니다.
그래프와 모델링
그래프의 연결 관계 이해
그래프 상의 노드 간 연결 관계와 자원량 변화율을 이해하는 것이 중요합니다. 이를 통해 그래프의 경사와 형태를 파악할 수 있습니다.
그래프 모델링 방법
G^M 모형을 통해 노드 간의 연결 관계와 상태 변화를 계산합니다. 연결 관계는 인접 리스트나 인접 행렬을 통해 표현됩니다.
프로그래밍 언어 C++의 이해와 활용
프로그래밍 기본 원칙 및 C++ 특징
C++는 객체지향 프로그래밍 언어로, 데이터와 연산을 통해 프로그램을 구성합니다. C++의 선언과 문법을 이해하는 것이 중요합니다.
C++ 예제 및 실습
C++에서 특정 동작을 처리하는 예제를 통해 실제 응용 능력을 학습합니다. 입력에 따른 결과를 분석하고 프로그램의 안정성을 유지하는 방법을 학습합니다.
확률과 그래프
임의점에서 데이터 수집
확률 분포도를 작성하고 이를 설명하는 방법을 학습합니다. 간단한 확률 관계 설정이 중요하며, 데이터 특성에 따라 확률 분포도가 달라집니다.
확률 분포도 개선
데이터 특성에 따라 확률 분포도를 개선하는 방법을 설명합니다. 데이터 수집과 분석을 통해 새로운 확률 분포도를 구성할 수 있습니다.
중요한 점심시간

구내식당 밥 잘 나오죠?

점심을 다 먹고 A관에 있는 카페에 조원들과 다같이 갔는데요
오늘은 같은 조 누나가 커피를 사주셨어요!
오후 수업 1차 끝나고는 같이 지원한 형이 커피를 사주셔서 오늘 잘 버텼습니다ㅎㅎ
카페인 수혈 중


왼쪽(누나 기부품) 오른쪽(형 기부품)

Python 함수, 표준 라이브러리
주요 내용
함수의 정의 및 활용
다양한 표준 라이브러리 학습
목표
함수와 람다함수를 정의할 수 있다.
클래스의 개념을 이해하며, 정의할 수 있다.
1. 함수와 메서드
1-1. 함수 Function
함수는 반복되는 기능을 한 번 정의하여 여러 번 사용할 수 있게 해주는 코드 블록입니다. 이를 통해 코드의 중복을 줄이고 가독성을 높일 수 있습니다.
함수의 정의
함수를 정의하려면 def 키워드를 사용합니다. 예를 들어, 두 수를 더하는 add 함수를 정의할 수 있습니다
def add(a, b):
return a + b
함수의 호출
정의된 함수는 함수명과 괄호를 사용하여 호출할 수 있습니다
add(4, 10)
>>> 14
함수의 반환값 (return)
return 키워드를 사용하여 함수의 결과값을 반환하며, 반환과 동시에 함수가 종료됩니다
def test(a,b):
for x in range(a, b+1):
if x> 10:
return
print(x)
test(1,20)
>>>
1
2
3
4
5
6
7
8
9
10
함수의 매개변수
함수는 매개변수를 통해 데이터를 전달받아 처리할 수 있습니다
def sub(a, b):
return a - b
## 위치에 의한 매개변수 전달
sub(10, 7)
## 이름에 의한 매개변수 전달
sub(b=7, a=10)
가변 인자 (입력값의 개수가 미정일 경우)
가변 인자는 *를 사용하여 정의할 수 있습니다
def sum(*nums):
result = 0
for x in nums:
result += x
return result
sum(1, 2, 3)
키워드 매개변수
키워드 매개변수는 **를 사용하여 정의할 수 있습니다
def print_kwargs(**kwargs):
print(kwargs)
print_kwargs(name='홍길동', age=30)
>>> {'name': '홍길동', 'age': 30}
특별한 파라미터
파이썬에서는 특별한 파라미터 기호를 사용하여 매개변수의 사용 방식을 명시할 수 있습니다
def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2):
1.
def standard_arg(arg):
print(arg)
standard_arg(1)
standard_arg(arg=2)
>>>
1
2
2. 위치전용 매개변수
def pos_only_arg(arg, /):
print(arg)
pos_only_arg(3)
>>> 3
3. 키워드 전용 매개변수
def kwd_only_arg(*, arg):
print(arg)
kwd_only_arg(arg=4)
>>> 4
4. 혼합예제
def combined_example(pos_only, /, standard, *, kwd_only):
print(pos_only, standard, kwd_only)
combined_example(1, standard=2, kwd_only=3)
>>> 1 2 3
[연습] 함수 add를 선언하시오.
- 이 함수는 두 개의 숫자를 매개변수로 받아 그 합을 반환합니다.
- add 함수를 호출하여 3과 5, 10과 20의 합을 출력하세요.
def add(a,b):
print(a+b)
add(3,5)
>>> 8
[연습] 함수 find_max를 선언하시오.
- 이 함수는 리스트를 매개변수로 받아 리스트의 최대값을 반환합니다.
- find_max 함수를 호출하여 [1, 3, 2, 8, 5, 10]과 [-10, -20, -30, -5]의 최대값을 출력하세요.
def find_max(lst):
max_value = numbers[0]
for num in numbers:
if num > max_value:
max_value = num
return max_value
numbers = [-10, -20, -30, -5] #여기에 [1, 3, 2, 8, 5, 10]를 넣으면 10이 나옴
find_max(numbers)
>>> -5
[참고] 재귀함수
함수안에서 자신을 호출(재귀)하는 함수
def factorial(x):
if x > 1:
return x * factorial(x - 1)
else:
return x
[연습] 함수 fibo를 선언하시오.
- 피보나치 수열은 앞의 두 수를 계속 더해 가는 수열로 수식은 f(n+2) = f(n+1) + f(n)
def fibo(n):
if n <= 0:
return 0
elif n == 1:
return 1
a, b = 0, 1
for _ in range(2, n+1):
a, b = b, a + b
return b
for i in range(10):
print(fibo(i))
>>>
0
1
1
2
3
5
8
13
21
34
2. 유용한 기능
2-1. Python 내장함수
Python 자체에 내장된 기본 함수 기능을 살펴봅니다.
abs
abs(x)는 어떤 숫자를 입력받았을 때 그 숫자의 절댓값을 반환합니다.
print(abs(-5)) # 출력: 5
print(abs(3.2)) # 출력: 3.2
all
all(x)는 반복 가능한 데이터 x를 입력값으로 받으며, 이 x의 요소가 모두 참이면 True, 거짓이 하나라도 있으면 False를 반환합니다.
print(all([1, 2, 3])) # 출력: True
print(all([0, 1, 2])) # 출력: False
print(all([])) # 출력: True
any
any(x)는 반복 가능한 데이터 x를 입력으로 받아 x의 요소 중 하나라도 참이 있으면 True, x가 모두 거짓일 때만 False를 반환합니다.
print(any([0, 1, 2])) # 출력: True
print(any([0, 0, 0])) # 출력: False
print(any([])) # 출력: False
chr
chr(i)는 유니코드 숫자 값을 입력받아 그 코드에 해당하는 문자를 반환합니다.
print(chr(97)) # 출력: 'a'
print(chr(65)) # 출력: 'A'
dir
dir은 객체가 지닌 변수나 함수를 보여주는 함수입니다.
print(dir([])) # 리스트 객체가 지닌 변수나 함수 출력
print(dir({})) # 딕셔너리 객체가 지닌 변수나 함수 출력
divmod
divmod(a, b)는 2개의 숫자 a, b를 입력으로 받아 a를 b로 나눈 몫과 나머지를 튜플로 반환합니다.
print(divmod(7, 3)) # 출력: (2, 1)
print(divmod(9, 2)) # 출력: (4, 1)
enumerate
enumerate는 순서가 있는 데이터(리스트, 튜플, 문자열)를 입력으로 받아 인덱스 값을 포함하는 enumerate 객체를 반환합니다.
for i, name in enumerate(['body', 'foo', 'bar']):
print(i, name)
# 출력:
# 0 body
# 1 foo
# 2 bar
eval
eval(expression)은 문자열로 구성된 표현식을 입력으로 받아 해당 문자열을 실행한 결과값을 반환하는 함수입니다.
print(eval('1+2')) # 출력: 3
print(eval('3*4')) # 출력: 12
print(eval('abs(-7)')) # 출력: 7
filter
filter 함수는 주어진 함수의 조건을 만족하는 요소만을 걸러내어 반환합니다.
def is_positive(x):
return x > 0
print(list(filter(is_positive, [1, -3, 2, 0, -5, 6]))) # 출력: [1, 2, 6]
id
id(object)는 객체를 입력받아 객체의 고유 주소값(레퍼런스)을 반환하는 함수입니다.
a = 3
print(id(a)) # 출력: 객체 a의 고유 주소값
input
input([prompt])는 사용자 입력을 받는 함수입니다. 입력 인수로 문자열을 전달하면 그 문자열은 프롬프트가 됩니다.
name = input("Enter your name: ")
print("Hello, " + name)
len
len(s)는 입력값 s의 길이(요소의 전체 개수)를 반환하는 함수입니다.
print(len("hello")) # 출력: 5
print(len([1, 2, 3])) # 출력: 3
max
max(iterable)은 인수로 반복 가능한 데이터를 입력받아 그 최댓값을 반환하는 함수입니다.
print(max([1, 2, 3])) # 출력: 3
print(max("hello")) # 출력: 'o'
min
min(iterable)은 max 함수와 반대로, 인수로 반복 가능한 데이터를 입력받아 그 최솟값을 반환하는 함수입니다.
print(min([1, 2, 3])) # 출력: 1
print(min("hello")) # 출력: 'e'
pow
pow(x, y)는 x를 y 제곱한 결과값을 반환하는 함수입니다.
print(pow(2, 3)) # 출력: 8
print(pow(3, 3)) # 출력: 27
round
round(number [,ndigits])는 숫자를 입력받아 반올림한 값을 반환하는 함수입니다.
print(round(4.6)) # 출력: 5
print(round(4.4)) # 출력: 4
print(round(4.567, 2)) # 출력: 4.57
sorted
sorted(iterable)는 입력 데이터를 정렬한 후 그 결과를 리스트로 반환하는 함수입니다.
print(sorted([3, 1, 2])) # 출력: [1, 2, 3]
print(sorted("hello")) # 출력: ['e', 'h', 'l', 'l', 'o']
sum
sum(iterable)은 입력 데이터의 합을 반환하는 함수입니다.
print(sum([1, 2, 3])) # 출력: 6
print(sum((4, 5, 6))) # 출력: 15
type
type(object)는 입력값의 자료형이 무엇인지 알려주는 함수입니다.
print(type(3)) # 출력: <class 'int'>
print(type("hello")) # 출력: <class 'str'>
print(type([1, 2, 3])) # 출력: <class 'list'>
zip
zip(*iterable)은 동일한 개수로 이루어진 데이터들을 묶어서 반환하는 함수입니다.
print(list(zip([1, 2, 3], [4, 5, 6]))) # 출력: [(1, 4), (2, 5), (3, 6)]
print(list(zip([1, 2, 3], [4, 5, 6], [7, 8, 9]))) # 출력: [(1, 4, 7), (2, 5, 8), (3, 6, 9)]
print(list(zip("abc", "def"))) # 출력: [('a', 'd'), ('b', 'e'), ('c', 'f')]
map
map 함수는 반복 가능한 데이터의 각 요소에 함수를 적용한 결과를 반환합니다.
def square(x):
return x * x
result = map(square, [1, 2, 3, 4])
print(list(result)) # 출력: [1, 4, 9, 16]
파이썬 1 안 푼 문제 풀이
[연습] 사용자로부터 입력받은 문자열 word가 회문인지 확인하시오.
회문: 앞뒤가 똑같은 문자열 ex. level
str1 = 'level'
str1 == str1[::-1]
>>> True
[연습] 주어진 문자열 s에서 연속으로 반복되는 문자를 압축하여 출력하세요.
예: s = "aaabbccccdaa" -> "a3b2c4d1a2"
s = "aaabbccccdaa"
current_char = s[0]
count = 0
compressed_str = ''
for c in s:
if c == current_char:
count += 1
else:
compressed_str += f"{current_char}{count}"
current_char = c
count = 1
compressed_str += f"{current_char}{count}"
compressed_str
>>> "a3b2c4d1a2"
[연습] 두 문자열이 아나그램인지(같은 문자를 다른 순서로 가진 문자열) 확인하시오.
예: str1 = "listen", str2 = "silent"
str1 = "listen"
str2 = "silent"
sorted(str1) == sorted(str2)
파이썬 2 안 푼 문제 풀이
[연습] 주어진 2차원 리스트(행렬)의 주 대각선의 합 (왼쪽 상단에서 오른쪽 하단으로)과 부 대각선의 합 (왼쪽 하단에서 오른쪽 상단으로)을 각각 구하여 출력하시오.
matrix = [ [1,2,3], [4,5,6], [7,8,9] ]
def diagonal_sums(matrix):
primary_diagonal_sum = 0
secondary_diagonal_sum = 0
n = len(matrix)
for i in range(n):
primary_diagonal_sum += matrix[i][i]
secondary_diagonal_sum += matrix[i][n - 1 - i]
return primary_diagonal_sum, secondary_diagonal_sum
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
primary_sum, secondary_sum = diagonal_sums(matrix)
print("주 대각선의 합:", primary_sum)
print("부 대각선의 합:", secondary_sum)
>>>
주 대각선의 합: 15
부 대각선의 합: 15
[연습] 주어진 숫자 n을 기초로 n * n의 스파이럴 행렬을 만드시오.
예시)
n = 3 matrix = [ [1,2,3], [8,9,4], [7,6,5] ]
def generate_spiral_matrix(n):
matrix = [[0] * n for _ in range(n)]
directions = [(0, 1), (1, 0), (0, -1), (-1, 0)]
current_direction = 0 # 현재 방향 (오른쪽)
row, col = 0, 0 # 시작 위치
for num in range(1, n * n + 1):
matrix[row][col] = num
next_row, next_col = row + directions[current_direction][0], col + directions[current_direction][1]
if not (0 <= next_row < n and 0 <= next_col < n and matrix[next_row][next_col] == 0):
current_direction = (current_direction + 1) % 4
next_row, next_col = row + directions[current_direction][0], col + directions[current_direction][1]
row, col = next_row, next_col
return matrix
n = 3
spiral_matrix = generate_spiral_matrix(n)
for row in spiral_matrix:
print(row)
>>>
[1, 2, 3]
[8, 9, 4]
[7, 6, 5]
[연습] 주어진 행렬 matrix1과 matrix2 행렬을 곱셈연산 하고 결과를 출력하시오.
예시)
matrix1 = [ [1,2,3], [4,5,6] ] matrix2 = [ [1, 2], [3, 4], [5, 6] ]
def matrix_multiply(matrix1, matrix2):
# 결과 행렬의 크기: matrix1의 행 수 x matrix2의 열 수
result = [[0] * len(matrix2[0]) for _ in range(len(matrix1))]
# 행렬 곱셈 수행
for i in range(len(matrix1)): # matrix1의 행
for j in range(len(matrix2[0])): # matrix2의 열
for k in range(len(matrix2)): # matrix2의 행
result[i][j] += matrix1[i][k] * matrix2[k][j]
return result
# 예시 행렬
matrix1 = [
[1, 2, 3],
[4, 5, 6]
]
matrix2 = [
[1, 2],
[3, 4],
[5, 6]
]
# 행렬 곱셈
result_matrix = matrix_multiply(matrix1, matrix2)
# 결과 행렬 출력
for row in result_matrix:
print(row)
>>>
[22, 28]
[49, 64]
오늘은 여기까지 입니다~~
내일이 아마 마지막 파이썬 수업 시간이라고 들었어요.
잘 듣고 숙지하고 오겠습니다 내일 봐요~~
