KPMG Future Academy AI 활용 데이터 분석가 3기 7일차 수업을 2024년 11월 26일에 참석했다.
오전, 오후에 파이썬 제어문 복습 후 함수 수업을 들었다.
while, if 섞어서 써보기
List comprehension : 패션 코딩
[표현식 for 변수 in 시퀀스 if 조건문]
집합
[실습]
별찍기
Claude 3가 내 질문을 어떻게 오해한 건지는 모르겠지만, 아래와 같이 오류가 있었다.
결론 :
Claude 3가 처음에 star = star + star를 star = star * star로 오해해서 기하급수적 증가가 아닌 점진적 증가 star *= 2로 바꿔준 것 같다. (반박시 님의 말씀이 옳습니다)
반박 : star *= 2 는 이전 항의 2배씩 증가인 전형적인 기하급수 수열이 맞음. 다만 star = star * star 는 기하급수 수열 중에서도 제곱수열(squared sequence 혹은 squaring sequence)이라고 함.
근데 문자가 2배씩 증가하면 기하급수적증가인데 숫자가 두배씩 증가하면 점진적 증가(2, 4, 8, 16, 32)라서 각자 맞는 말을 한 듯하다. 숫자는 기하급수적 증가(2, 4, 16, 256, 65536)와 점진적 증가가 서로 다르니까 자료형에 따라 결과 상 드러나는 연산과정이 달라지므로 기계에게 말을 걸 때에는 똑바로 해야한다.
(이 말은 숫자는 그 자체로 이미 변수라는 뜻이다. 따라서 숫자형을 사용할 때는 문자형처럼 수치적 값이 없는 기호를 쓸 때와는 다름.)
그런데 틀렸다고 하면 답변할 때 무조건 사과부터 하게 진화한 Claude가 약간 짠하게 느껴져서 나도 AI에게 말을 더 정중히 하려고 노력하기로 했다.
실제로 파이썬 네이티브는 List comprehension을 좋아한다고 밝혔다.
for 리스트, 딕셔너리
7의 배수 리스트로 출력
5개 값을 입력받아 리스트로 정렬
딕셔너리
입력값에 따라 딕셔너리에서 다른 값 출력하기
6) [심화] 아이스크림 할인점에서 판매하는 아이스크림의 가격은 다음과 같습니다.
가격
메로나: 400원(할인가: 380원)
비비빅: 400원(할인가: 350원)
탱크보이: 500원(할인가: 450원)
월드콘: 1,000원(할인가: 900원)
과제1
아이스크림 이름을 키, [정가, 할인가]를 값으로 갖는 딕셔너리 icecream을 생성하세요.
과제2
변수 today에 요일을 대입해(예: today = '일')
주말(토, 일)이면, 아이스크림 이름과 할인가를 출력하세요.
평일이면, 아이스크림 이름과 정가를 출력하세요.
숫자 맞추기 게임
이 때 num1, num2는 매개변수.
매개변수에 들어가는 값은 인수.
재사용성, 가독성, 유지보수에 용이.
*args 튜플로 매개변수를 받아서 사용.
[lambda 함수]
sorted()는 내장함수
역순 정렬
람다 함수에서 매개변수 이름은 관례적으로 단수형을 사용:
리스트 words의 각 원소는 word
리스트 items의 각 원소는 item
[제너레이터 표현식]
제너레이터 표현식은 리스트 컴프리헨션과 비슷하지만, 메모리 효율적인 방식으로 값을 한 번에 하나씩 생성.
[파이썬 제너레이터]
제너레이터(Generator)는 Python에서 메모리 효율적으로 반복 가능한 객체를 생성하는 특별한 함수. 일반 함수와 달리 yield 키워드를 사용하여 값을 순차적으로 반환. 한 번에 모든 값을 메모리에 저장하지 않고, 요청할 때마다 값을 생성.
[제너레이터를 제공하는 모듈]
itertools: 반복 관련 제너레이터
random: 임의 값 생성 제너레이터
sys: 시스템 관련 제너레이터
re: 정규표현식 관련 제너레이터
[itertools 제너레이터]
itertools.count() : 무한 카운터
itertools.cycle() : 반복 시퀀스
itertools.repeat() : 값 반복
itertools.takewhile()
itertools.dropwhile()
itertools.islice()
[문제]
리스트를 입력받으면 리스트 안에 있는 요소들의 평균과 분산을 반환하는 함수를 작성하여 다음 리스트의 평균과 분산을 구해보세요.
코드에서 (i - mean) ** 2는 편차(평균과의 차이)의 제곱을 계산합니다.
분산(variance) 계산 과정:
각 데이터 포인트와 평균의 차이를 구함 (i - mean)
그 차이를 제곱함 (i - mean) ** 2
제곱된 차이들의 평균을 구해 분산을 계산
제곱을 하는 이유:
음수와 양수의 차이를 양수로 만들기 위해
큰 차이에 더 큰 가중치를 주기 위해
[예외 처리]
try except
오류명이 출력됨
[내장 함수]
1. abs(x) 절대값
2. all(x) 모두 참이어야 참
3. any(x) 하나라도 참이면 참
4. chr(x) ASCII 아스키 코드
5. dir(x) 객체 x의 변수, 메소드 목록 반환
6. divmod(x, y) x를 y로 나눈 몫과 나머지를 튜플 형태로 반환
7. enumerate(x) 리슽, 튜플, 문자열을 받아 인덱스와 값을 반환
8. eval(x) 실행 가능한 문자열 x를 받아 그 문자열을 실행한 결과를 반환
9. help(x) 설명을 보여줌
10. id(x) 객체의 고유한 메모리 주소를 반환
11. input(x) 입력값 받기
12. int(x) x를 정수로 변환
13. len(x) 문자열의 길이
14. list(x)
15. map(f, x) f에 x 요소를 하나씩 전달해 얻은 결과를 반환
16. max(x) 최댓값
17. min(x) 최솟값
18. ord(x)
19. pow(x, y)
20. round(x, y)
21. range(x)
22. sorted(x)
23. str(x)
24. sum(x)
25. tuple(x)
26. zip(x, y) x, y 요소를 쌍으로 묶어서 반환
[문제]
위 방식은 보안상 권장되지 않고 실무시에도 거의 사용되지 않는다고 한다. 아래는 수정한 방식.
변수에 값을 저장하여 반환하기 위해서는 해당 함수에 값을 반환하는 return이 있어야함
이로써 파이썬 기초를 7일안에 마무리했다. 이제부터는 다양한 실습과 주 프로젝트 3개 등을 진행해볼 예정이라고 한다.