❤️‍🔥 WIL : Weekly I Learned

금주를 다시 살펴보며 저의 상태를 확인해 볼까요~?


2024년 12월 2일 월요일 🙄

Class와 __init__()을 공부한 날이었어요

객체를 생성해야 하는 Class였는데 🤔

그냥 스쳐 지나가는 개념이었어요

자주 쓰는 거라고 하셨지만,, 네,,

제 머리가 거부하네요 🤯

알아야 하는 게 많은데, 한꺼번에 파도처럼 밀려오니까

그대로 휩쓸렸습니다 키키

계속 반복해서 해봐야겠어요

화가 잔뜩 난다죠. 🙄 


2024년 12월 3일 화요일 🫠

씁쓸한 맛을 남긴 Pivot_table 공부한 날이었습니다

이야,,

이야,,

이야,,

과제 너무 어려운 거 아니에요??

병아리한테 수탉처럼 짖어보란 느낌이었어요 🤔

제가 자신 있게 아는 코드와 함수가 적어서 이런 느낌을 받았겠죠 😝

어쨌거나 튜터 님을 괴롭히며 해냈기에, 뿌듯했지만

머리에 남는 건 없어서 공허했습니다 🫠


2024년 12월 4일 수요일 😤

오늘은 Ch.1의 과제를 해설하는 강의가 있었어요

히히 튜터님을 갈고닦아서 같이 만든 하나의 작품이(ㅋㅋ)

동기분들 앞에 전시돼서 뭔가 기분이 묘했어요

스스로에 대해서 좀, 부끄럽단 생각이 들더라구요

해낸 결과물이긴 하지만, 설명하라고 하거나 다시 해보라 하면

못한다는 걸 스스로 알고 있었거든요 ㅠ

너무 조급하게 마음을 잡고 있는 거 같긴 해요

여유를 가져봐야겠어요 😤


2024년 12월 5일 목요일 🤪

오늘부터 머신러닝을 배워야 했어요

아직 파이썬도 잘 모르거든요?

게다가 라이브러리까지 다루는 진도까지 나가버렸는데

아무것도 따라가지 못했어요

스트레스 너무 심해요,, 하,,

잘하고 싶은 욕심은 많은데 

해야 할 게 쏟아지듯이 들어오니까, 

너무 조바심 들어서 힘드네요

게다가 머신러닝까지 해야 하다니요 ㅋㅋㅋ,,

에라 모르겠다~ 🤪

주말에 천천히 파이썬부터 시작해서 해야겠어요


2024년 12월 6일 금요일 😞

오늘 하루종일 집중하지 못했습니다. 예.

이리될 줄 알았어요

차라리 처음부터 차근차근해야 할 리스트를 짜서

일정을 짜볼 걸 그랬어요

머릿속이 구름으로 가득 차서 멍~만 때리네요

구름 다 걷어내야겠어요

내일 주말입니다! 오로지 저를 위한 시간이에요

내일 틀을 가다듬어볼 거예요

다음 주엔 코드카타가 생겨서 매일 1문제씩 들어야 하거든요

기운을 내봅시다,, 차라리 문제 풀며 머리 굴릴 때가 더 행복해요

이번주도 수고 많으셨습니다

파이팅!


12시간 공부 시간을 넘어서도 같이 문제 풀어주신 ㅂㅁㄴ님 넘 감사해요

덕분에 기운차리고 흥미를 다시 느끼게 되었습니다

격려 해주시고 자존감 챙겨주는 말로 저를 채워주셔서 감사해요 😽

열심히 해보겠습니다 (◍⁃͈ᴗ•͈) 

인사말

안녕하세요!

오늘도 머신러닝에 대해서 공부를 해볼 겁니다

처음 접하는 생소한 내용이라서 너무 막막하네요

오늘은 오전에 Zoom으로 하는 Git 수업이 있어서

오전 시간 동안은 Zoom 수업을 들어주었습니다

오후부터 본격적으로 머신러닝을 공부하였어요!

오늘의 일정
오전 (09 : 00 ~ 13 : 00) 10:00 ~ 12:15 Zoom 수업_Git
오후 (14 : 00 ~ 18 : 00) 14:00 ~ 15:30 전처리 공부
16:00 ~ 16:30 튜터님과 면담
16:30 ~ 16:40 매니저님의 순회 방문
16:40 ~ 17:40 전처리 공부한 내용을 TIL 작성
저녁 (19 : 30 ~ 21 : 00) 19:30 ~ 20:00 팀 회의
20:00 ~ 20:55 백준 문제 풀이
새로 알게 된 코드
a, b = map(int,input().split()) input()을 문자열로 받게 되었을 때 하나하나씩 매핑해주고, 공백을 기준으로 나눔

 

오전( 09 : 00 ~ 13 : 00 )

깃허브 설치됐는지 확인하기

처음에는 Markdown에 대해서 배웠어요

재밌더라구요 히히

Markdown.md
0.00MB

# 오늘 배운 markup
## 1. 두 번째 제목
## 2. 종류
2.1 제목
2.1.1 #

2.2 리스트
2.2.1 그냥 숫자 입력하면 들여쓰기가 돼요

2.3 코드블럭
2.3.1
```python
def hi():
    print(Hello)
```
2.3.2 인라인 코드 블럭
문장 적어주시고 `print()`를 백틱으로 감싸주시면 돼요

2.4 링크
2.4.1 [str],(url) <- 콤마는 빼주세요
2.4.2 예시
[네이버](http:/www.naver.com)
이렇게 적으면 뜨죠?

2.5 이미지 넣기
2.5.1 ![str](이미지 파일 이름)
![고양이](imgs/고양이.jpeg)

2.6 텍스트 강조
2.6.1 볼드체
2.6.1.1 **로 글자를 감싸주세요

2.6.2 기울림체
2.6.2.1 *로 글자를 감싸주세요

2.6.3 취소선
2.6.3.1 ~~로 글자를 감싸주세요

2.7 인용문
2.7.1 다음 줄에 >로 시작해주세요
> 그렇게 하시면 이렇게 됩니다

진짜 진짜 재밌었어요

문서 작성하고 편집하고 만드는 거 좋아하거든요

이번에 Markdown으로 배울 수 있어서 좋았습니다 😋


오후 ( 14 : 00 ~ 18 : 00 )

데이터 전처리에 대해서 이론 공부를 진행시켰어요!


요약

  1. 데이터 전처리란?
    1. 데이터 전처리 개념
    2. 특징
    3. 전처리 방법
    4. 전처리의 효과
    5. 주요 기법

1. 데이터 전처리란?

  1. 개념 : 데이터 분석 및 머신러닝 모델링을 위해 데이터를 준비하는 과정
  2. 특징
    1. 원시 데이터(raw data)는 종종 불완전하거나, 노이즈가 많거나, 형식이 일관되지 않아 직접 모델링에 사용하기 어려움
    2. 데이터 전처리는 데이터의 품질을 높이고, 분석 결과의 신뢰성을 확보하기 위한 필수적인 과정임
  3. 전처리 방법
결측값 처리 데이터셋에서 누락된 값을 처리하는 작업
이상값 처리 데이터셋에서 비정상적으로 큰 값이나 작은 값을 처리하는 작업
중복 데이터 제거 동일한 데이터가 여러 번 나타나는 경우, 이를 제거
데이터 타입 전환 데이터의 타입을 적절하게 변환하는 작업
데이터 정규화 데이터이 범위를 일정하게 맞추는 작업
인코딩 범주형 데이터를 수치형 데이터로 변환
샘플링 데이터셋의 크기를 줄이거나 늘리는 작업
특징 선택 및 추출 모델 성능을 높이기 위해 중요한 특징을 선택하거나 새로운 특징을 추출

 

4. 데이터 전처리의 효과

데이터 품질 향상 결측치, 이상치, 중복 데이터를 처리하여 데이터의 품질을 높임
모델 성능 향상 적절한 스케일링, 정규화를 통해 모델의 학습 속도와 성능을 개선함
데이터 일관성 확보 서로 다른 출처에서 수집된 데이터를 일관된 형식으로 변환함
특성 공학
(Feature Engineering)
유용한 특성(Feature)을 생성하거나 변환하여 모델의 예측 능력을 향상시킴

 

5. 데이터 전처리의 주요 기법

  1. 결측치 처리(Handling Missing Data) : 데이터셋에 누락된 값을 처리함
    • 삭제: 결측치가 있는 행이나 열을 삭제.
      • 결측치가 적을 때 유용하지만, 데이터 손실이 발생할 수 있음
    • 대체: 평균, 중앙값, 최빈값 등으로 결측치를 대체
    • 예측: 다른 특성을 사용하여 결측치를 예측하고 채움
  2. 이상치 처리(Handling Outliers) : 데이터에서 비정상적으로 크거나 작은 값을 처리
    • 제거: 이상치를 데이터셋에서 제거
    • 변환: 이상치를 다른 값으로 변환
      • 예: 상한선이나 하한선으로 대체
    • IQR 방법: IQR(Interquartile Range)을 사용하여 이상치를 탐지하고 처리
  3. 데이터 정규화 (Normalization) : 정규화는 데이터를 일정한 범위로 스케일링하는 과정
    • 일반적으로 [0, 1] 범위로 변환함
      • Min-Max 정규화: 최소값을 0, 최댓값을 1로 변환
  4. 데이터 표준화 (Standardization) : 표준화는 데이터를 평균 0, 분산 1로 변환하는 과정
  5. 특성 공학 (Feature Engineering) : 데이터로부터 새로운 유용한 특성을 생성하는 과정
    • 특성 생성: 기존 데이터를 기반으로 새로운 특성을 생성함
      • 예: 날짜 데이터를 사용하여 요일 특성 생성
    • 특성 선택: 모델 성능에 중요한 특성을 선택하고, 중요하지 않은 특성을 제거함
  6. 데이터 인코딩 (Data Encoding) :  비정형 데이터를 모델이 이해할 수 있는 형태로 변환함
    1. 레이블 인코딩 (Label Encoding): 범주형 데이터를 숫자로 변환
    2. 원-핫 인코딩 (One-Hot Encoding): 범주형 데이터를 이진 벡터로 변환
  7. 데이터 분할 (Data Splitting) : 데이터를 학습용(train), 검증용(validation), 테스트용(test)으로 분할. 이를 통해 모델의 일반화 성능을 평가할 수 있음
    1. 학습 데이터 (Training Data): 모델 학습에 사용되는 데이터
    2. 검증 데이터 (Validation Data): 모델 튜닝 및 성능 검증에 사용되는 데이터
    3. 테스트 데이터 (Test Data): 최종 모델 평가에 사용되는 데이터

저녁 ( 19 : 30 ~ 21 : 00 )

히히 오후 회의를 끝내고 20시부터 백준코딩 해봤어요

프로그래머스로만 풀어보다가 백준코딩으로 풀어보니까

구조가 달라서 애먹었어요 😂

문제 푸니까 바로 깃허브로 잘 들어와서 다행이에요 히히

문제 1. Hello World! 를 출력하시오.

print("Hello World!")

문제 푸니까 너무 재밌어요 ㅋㅋㅋㅋ

차라리 문제를 풀어야 공부에 집중을 하게 되네요

히히

 

문제 2. A+B

# 1트
a, b = int(input())
print(a+b)

처음에는 이렇게 입력하였어요

안 되더라구요

# 2트
a, b = int(input().split())
print(a+b)

이렇게 하니까 TypeError가 나네요,, 🤦🏻‍♀️ 

# 3트
a, b = input().split()
a = int(a)
b = int(b)
print(a+b)

TypeError가 났다고 하길래

input으로는 잘 받았다는 거니까

형변환을 밑에서 따로 해줬어요 🤔

끼야아아아아아ㅏㅇㄱ

꺄아아아아아아악

맞췄어요 ㅠㅠㅠㅠㅠㅠㅠ 흐엉

순간적으로 스트레스받았어요 허엉ㅇ

백지에다가 창의력을 발휘하려 하니까

뇌정지 쩔게 오네요,, 하하하하,,

 

a, b = map(int,input().split())
print(a+b)

언니한테 물어봤을 때

이렇게 쉽게 푸시더라구요,, 🙄

제가 map함수를 이해 못 한 거 같아요

split()도 들었던 거 같은데 제 머리엔 없던 함수였어요

하하하

오늘도 배워갑니다.. 👍🏻

 

문제 3. A-B

# 1트
a, b = input().split()
a = int(a)
b = int(b)
print(a-b)

앞선 문제와 비슷한 구조이기 때문에

똑같은 방식으로 코드를 짜주었습니다 😊

히히 넘 뿌듯하네요 🤭 


마무리

하하,,

머신러닝과 친해질 수 있을지 잘 모르겠어요

확실히 주말에 더 공부해야겠습니다

다른 추가 자료들 찾아보며 공부해야겠습니다

한 주 동안 수고 많으셨어요!

편안함 밤 되시길 바랍니다

주말에 푹 쉬시고 다음 주도 달려봅시다!

파이팅!! 🔥

감사합니다

인사말

안녕하세요~!

오늘부터 팀이 바뀌어서 5조에서 10조로 가게 되었어요!

새로운 분들과 대화를 나누고, 팀 노션도 같이 짜고

공부 내용도 새롭게 하나 더 추가 되었어요!

새로운 규칙들과 새로운분들과 함께 하니 낯설지만

환경을 주기적으로 바꿔주는 것도 좋은 거 같아요!

잘해봅시당! >_<

오늘의 일정
오전 11:00 ~ 17:00 -> 머신러닝 강의 2개 듣기
오후 17:00 ~ 18:00 과제1 해설 Zoom 수업 듣기
저녁 19 : 30 ~ 21 : 30 캐글 설치 및 설정하기

요약

  1. 머신러닝이란?
    1. 전통적 프로그래밍 vs 머신러닝 
    2. 머신러닝 구성 요소들(데이터셋, feature, 레이블, 훈련, 테스트)
    3. 머신러닝의 학습
      1. 학습 과정
      2. 학습 방법
  2. 과적합이란?
    1. 과적합 방지
  3. 머신러닝 실습

 


오전 ~ 오후( 11 : 00 ~ 17 : 00)

Zoom 수업이 있기 전까진 새로 받은 머신러닝에 대해 공부하려 합니다!

아직 SQL, 파이썬, 파이썬 라이브러리에 대해 제대로 습득을 하지 못 했는데

또 새로운 걸 머리에 집어 넣으려 하니까

스트레스가 폭발을 하려 하네요 🤯

 

음,, 어떻게 해야 할까요 🤔

뭐 어쩌겠어요 일단 해야죠

안 하면 안 할수록 미룬 일만 많아지니까,,

할 일을 미룬다는 게 더 싫어요 저는,,

 

1. 머신러닝이란?

  1. 개념
    1. 컴퓨터가 명시적으로 프로그래밍 되지 않아도 데이터를 통해 학습하고, 예측할 수 있도록 하는 기능
    2. 대량의 데이터를 알고리즘에 입력하여 학습과정을 통해 모델을 생성하고 예측을 수행함

1.1 전통 프로그래밍 vs 머신러닝

전통적인 프로그래밍 머신러닝
규칙과 논리를 프로그래머가 직접 정의 데이터를 이용해 패턴과 규칙을 스스로 학습
명시적 명령과 조건문을 통해 문제 해결 예측 모델을 통해 새로운 데이터에 대한 결과 도출
  프로그램이 아닌 모델이 중심

 

1.2 머신러닝의 구성 요소

  1. 데이터셋
    1. 개념 : 모델을 학습시키기 위한 데이터 모음
    2. 구성
      • 입력 데이터 : 모델이 학습할 수 있느 정보
      • 출력 데이터 : 모델이 예측해야 하는 목표값
  2. 특징(Feature)
    1. 개념 : 데이터셋에서 모델이 학습할 수 있는 개별 속성
    2. 예시 : 주택가격 예측할 시, 주택의 크기, 위치 , 방의 개수 등이 feature에 해당됨.
  3. 레이블(Label) = 정답
    1. 개념 : 예측하고자 하는 목표 변수
    2. 특징
      • 지도학습 모델에서는 레이블이 있는 데이터셋을 이용하여 모델을 학습시킴
      • 어떤 주제냐에 따라 레이블(정답)이 달라짐
  4. 모델
    1. 개념
      • 데이터의 특징으로부터 레이블(정답)을 예측할 수 있는 지식을 학습할 수 있는 프로그램/함수
    2. 특징 
      • 입력 데이터와 출력 데이터 간의 관계를 학습하여 새로운 데이터에 대한 예측 수행
  5. 학습
    1. 개념
      • 모델이 데이터를 통해서 패턴을 인식하고 이를 기반으로 예측을 수행할 수 있도록 함수 내의 가중치를 조정하는 과정
    2. test : 학습이 끝난 후 새로운 data, 실제 data로 모델의 성능을 검사함

 

1.3 머신러닝의 학습

<학습 과정>

 

  1. 데이터 수집 : 모델을 학습시키기 위한 필요 데이터 수집 단계
    • 예) 과일 가게에 가서 과일 사진 찍어오기
  2. 데이터 전처리 : 결측값 처리, 이상치 제거, 정규화 등등의 작업 단계
    • 예) 사과랑 오렌지만 비교할 건데, 바나나 사진이 있는 경우 이를 삭제
  3. Feature 선택 : 중요 feature을 선택하고 불필요한 피쳐를 제거하여 학습 효율을 높이는 단계
    • 예) 과일 모양, 가격, 무게, 구매한 갯수 중 불필요한 "구매한 갯수"는 제거
  4. 모델 선택 : 문제에 적합한 머신러닝 알고리즘을 선택
    • 예) 사과와 오렌지의 비교에 가장 적절한 머신러닝(모델)을 선출
  5. 모델 훈련 : 트레이닝 데이터셋을 사용하여 모델을 학습시킴
    • 예) 사과는 빨간색이야, 오렌지는 주황색이야 / 사과가 오렌지보다 크기가 더 작아
  6. 모델 평가 : 테스트 데이터셋을 사용하여 모델 성능을 평가
    • 예) 사과와 오렌지를 한 공간에 잔뜩 놓고 비교하는지 확인하기
  7. 모델 배포 : 학습된 모델을 실제 환경에 배포하여 예측 수행

 

<학습 방법>

  1. 지도학습(Supervised Learning)
    1. 개념 : 레이블(정답)이 있는 데이터셋을 이용하여 모델을 학습시키는 방법
      1. 회귀(Regression) : 연속적인 값을 예측하는 문제
        1. 예) 주택 가격 예측, 주식 가격 예측
      2. 분류(Classification) : 이산적인 값을 예측하는 문제
        1. 예) 이메일 스팸 필터링, 이미지 분류
  2. 비지도 학습(Unsupervised Learning)
    1. 개념 : 레이블(정답)이 없는 데이터셋을 이용하여 모델을 학습시키는 방법
      1. 군집화(Clustering) : 데이터를 유사한 그룹으로 묶는 문제
        1. 예) 고객 세분화, 이미지 세그멘테이션
      2. 차원 축소(Dimensionaliy Reduction) : 고차원 데이터를 저차원으로 변환
        1. 예) PCA, t-SNE
  3. 앙상블 학습(Ensemble Learning)
    1. 개념 : 여러 개의 머신러닝 모델을 결합하여 더 나은 성능을 얻는 방법
      1. 배깅(Bagging) : 여러 모델을 독립적으로 학습시키고, 예측을 평균내거나 다수결 투표로 최종 예측
        1. 예) 랜덤 포레스트
      2. 부스팅(Boosting) : 여러 모델을 순차적으로 학습시키고, 이전 모델의 오차를 보완하여 최종 예측을 수행
        1. 예) 그래디언트 부스팅, XGboost
      3. 스태킹(Stacking)
        1. 개념 : 여러 모델을 학습시키고 예측 결과를 새로운 데이터로 사용하여 메타 모델을 학습

2. 과적합이란?

과적합(Overfitting)

  1. 개념
    1. 모델이 훈련 데이터에 지나치게 적응하여 새로운 데이터에 대한 일반화 기능이 떨어지는 현상
    2. 모델이 너무 복잡하여 훈련 데이터의 노이즈까지 학습해버리는 경우에 발생함

 

2.1 과적합 방지

  1. 더 많은 데이터를 수집
  2. 교차 검증(Cross-validation) 사용
  3. 정규화(Regularization) 기법 적용
  4. 간단한 모델 사용

🔥머신러닝에서는 "절대로 좋다"라는 개념은 없음! 상황에 따라, 주제에 따라, 성능에 따라 다 다름🔥


저녁 ( 20 : 00 ~ 21 : 00)

19시 30분부터 20시까지 팀별 회의를 마치고 실습을 진행해보았습니다

1주차 강의를 2번 돌려봤더니 생각보다 시간이 많이 걸리네요 😭

처음 접하는 개념이라서 한 바퀴는 그냥 들어보고

두 바퀴로는 강의 자료랑 함께 보고

세 바퀴로는 공책에 적어가며 했더니 시간이 생각보다 오래 걸려요

주말에도 공부 해야겠어요,,

파이썬 라이브러리도 제대로 이해 못 했거든요,,

 

3. 머신러닝 실습

2주차 강의에서는 데이터셋을 다운받는 내용이 나왔어요

그 중에서 kaggle을 다운받는 절차를 따라 해봅시당

공식 홈페이지에 들어가셔서

회원가입부터 해주세요,,

그래야 프로필이 쓰고 settings에 들어갈 수 있더라구요

프로필 눌러주시면

Settings가 있습니다

스크롤하셔서 내려주시면

API가 있어요

거기에서 Create New Token을 눌러주시면

파일이 하나 다운로드 되실 겁니다

이걸 또 눌러주시면

이렇게 key를 받으실 거예요! 파일 저장해주세요!

~/.kaggle/kaggle.json

 

이렇게 되면 명령어를 통해서 다운로드 받을 수 있게 된대요!

kaggle datasets download -d <dataset-identifier>

 

음,, 저는 프로그래머가 아니기 때문에

그냥 공식 홈페이지에서 다운받았습니다.

https://www.kaggle.com/c/titanic/data

 

Titanic | Novice

Kaggle profile for Titanic

www.kaggle.com

이제서야 진행할 수 있겠네요!

휴우 😤

 


마무리

오늘은 뭔가 한 게 없는 날인 거 같아요

근데 벌써 내일이 금요일이래요! 🫠

내일 다시 머신러닝 2주차부터 해서 실습 하려구요,,

ㅠㅠ

화이팅입니다 ㅠㅠ

 

감사합니다!

 

 

 

인사말

오늘 과제 제출을 하고!

내일부터 새로운 강의를 받은 후 공부하기 때문에

이전에 받았던 파이썬 라이브러리 강의를 완강하려 합니다!

그러고 저녁(20 : 00 ~ 21 : 00)엔 Zoom으로 회의가 있고

새로운 과제를 받는다고 하네요 😅

파이팅,,,,


오전 ( 09 : 00 ~ 13 : 00 )

Git Hub에 폴더 생성 완료해주고! ( ~10 : 00)

파이썬 라이브러리 강의를 시청하였습니다.


<10 : 00 ~ 20 : 00>

요약

  1. Pandas 개념
  2. 시리즈(Series)
  3. 데이터프레임(DataFrame)
  4. 시리즈(Series) vs 데이터프레임(DataFrame)
  5. Numpy(Numerical Python)
    1. 연산
    2. 기타 메서드
    3. 배열의 인덱싱, 슬라이싱

<Pandas>_데이터 처리가 필요한 모든 분야에서 사용됨

  1. 개념 
    1. 파이썬에서 데이터를 쉽게 다룰 수 있게 해주는 데이터 분석 라이브러리
    2. 데이터를 표(테이블) 형식으로 다루기 쉽게 만들어 줌
    3. 다양한 데이터 조각 기능을 제공함
    4. 데이터를 정리하고 분석하는 데 아주 강력한 도구임.
      1. 데이터 프레임(DataFrame)
        1. 판다스의 핵심 자료 구조임
        2. 엑셀의 스프레드 시트처럼 행(row)과 열(column)로 구성된 2차원 데이터 구조
      2. 시리즈(Series)
        1. 단일 열을 나타내는 1차원 데이터 구조
        2. 데이터 프레임의 구성 요소 중 하나
  2. 특징 : 판다스를 이용하면 데이터의 필터링, 정렬, 집계 등 다양한 작업을 간단한 코드로 수행 가능함

 

<시리즈 (Series) >

시리즈(Series)

  1. 개념 : 인덱스(Index)와 데이터 값(Value)이 쌍으로 구성됨
  2. 특징
    1. 인덱스를 통해 데이터에 빠르게 접근할 수 있음
    2. 데이터 타입은 자동으로 설정되지만, 원하는 타입으로 변경 가능함
  3. 예시
import pandas as pd

# 시리즈 생성
s = pd.Series([10, 20, 30, 40], index = ['a', 'b', 'c', 'd'])
print(s)
a    10
b    20
c    30
d    40
dtype: int64

pd.Series()를 쓸 때 시리즈는 꼭 대문자로 작성해주셔야 오류가 안 나요!!

 

<데이터프레임(DateFrame)>

데이터프레임(DateFrame)

  1. 개념
    1. 2차원의 표 형태 데이터 구조
    2. 엑셀의 전체 시트(Sheet)처럼 생김
    3. 여러 개의 시리즈(Series)가 모여서 만들어짐.
  2. 특징
    1. 행(row)과 열(column)로 구성된 2차원
    2. 다양한 데이터 타입을 각 열에 담을 수 있음
    3. 인덱스와 컬럼명을 사용해 특정 데이터에 접근할 수 있음
  3. 예시
# 예시: 데이터 프레임 생성
data = {
    '이름': ['철수', '영희', '민수'],
    '나이': [25, 30, 35],
    '직업': ['학생', '회사원', '프리랜서']
}

df = pd.DataFrame(data)
print(df)
   이름  나이     직업
0  철수  25     학생
1  영희  30    회사원
2  민수  35  프리랜서
# data의 컬럼만 뽑아보기

data["이름"]

결괏값
['철수', '영희', '민수']
# 인덱스와 칼럼명을 사용해 특정 데이터에 접근하기

파일명["이름"][0]

결괏값
'철수'

 

<시리즈(Series) vs 데이터프레임(DataFrame)>

차이점 공통점
시리즈는 1차원, 데이터프레임은 2차원 둘 다 인덱스를 가지고 있어서 데이터에 쉽게 접근 가능
시리즈는 하나의 데이터 타입,
데이터 프레임은 다양한 데이터 타입 기입 가능 (리스트, 튜플, 딕셔너리 등등)
판다스에서 가장 기본적인 구조

 

<Numpy(Numerical Python)>

  1. 개념
    1. 과학 계산에 강력한 성능을 제공하는 파이썬 라이브러리
    2. 다차원 배열 객체인 ndarray와 배열을 효율적으로 처리할 수 있는 다양한 함수들을 제공함.
    3. 데이터 분석, 머신러닝, 딥러닝에서 기초가 되는 라이브러리
    4. 판다스와 함께 자주 사용됨
  2. 특징
    1. 고속 배열 연산 : C언어로 작성돼 있어, 파이썬 기본 리스트 보다 훨씬 빠른 연산 가능
    2. 다양한 수학 함수 : 배열 간의 덧셈, 뺄셈, 곱셈 등의 연산을 효율적으로 수행
    3. 선형대수, 통계함수 : 복잡한 수학 계산도 간단히 처리 가능
  3. 예시
  • 배열(ndarray) 생성하기
import numpy as np

# 리스트로 생성하기
## 1차원 배열 생성

arr = np.array([1, 2, 3, 4, 5])
print(arr)
[1 2 3 4 5]

 

  •  배열의 연산
arr = np.array([1, 2, 3, 4, 5])

# 각 원소에 2를 더하기
arr_add = arr + 2
print(arr_add)

# 각 원소에 2를 곱하기
arr_mul = arr * 2
print(arr_mul)
[3 4 5 6 7]
[ 2  4  6  8 10]

 

  • 배열간의 연산
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])

# 배열 간 덧셈
arr_sum = arr1 + arr2
print(arr_sum)

# 배열 간 곱셈
arr_mul = arr1 * arr2
print(arr_mul)
[5 7 9]
[ 4 10 18]

 

  • 배열의 기타 메서드
메서드 설명 메서드 코드 결괏값
0으로 채워진 배열 np.zeros() zero_arr = np.zeros((2, 3)) # 2x3 크기의 배열
print(zero_arr)
[[0. 0. 0.]
 [0. 0. 0.]]
1로 채워진 배열  np.ones() ones_arr = np.ones((3, 2))  # 3x2 크기의 배열
print(ones_arr)
[[1. 1.]
 [1. 1.]
 [1. 1.]]
특정 값으로 채워진 배열  np.full() # 2x2 크기의 7로 채워진 배열
full_arr = np.full((2, 2), 7)
print(full_arr)
[[7 7]
 [7 7]]
연속적인 값으로 채워진 배열 np.arange() # 0부터 9까지의 연속된 값
range_arr = np.arange(10)
print(range_arr)
[0 1 2 3 4 5 6 7 8 9]
메소드 설명 메소드
array 속 개수 확인 arr.size()
array의 데이터 타입 확인 arr.dtype()
array의 용량 차지 확인 arr.nbytes()
array의 차원 확인 arr.ndim()
array를 1차원으로 입력하기 arr.ravel()
array의 차원은 바꾸지 않고 평탄화 arr.flatten()
array의 sum arr.sum(), arr.sum(axis = 1), arr.sum(axisi = 0)
*axis = 1는 열, axis = 0은 행

 

  • 배열의 인덱싱과 슬라이딩

인덱싱(Indexing)

: 배열의 특정 위치의 값을 가져옴

arr = np.array([10, 20, 30, 40, 50])

# 첫 번째 원소
print(arr[0])

# 마지막 원소
print(arr[-1])
10
50

 

슬라이싱(Slicing)

: 배열의 일부분을 잘라내는 방법

arr = np.array([10, 20, 30, 40, 50])

# 두 번째부터 네 번째 원소까지
sliced_arr = arr[1:4]
print(sliced_arr)
[20 30 40]

 

다차원 배열의 인덱싱과 슬라이싱

: 콤마(,)로 구분해서 함

arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])

# 특정 원소 접근 (2행 3열)
print(arr2d[1, 2])

# 슬라이싱 (2행까지, 2열까지)
sliced_arr2d = arr2d[:2, :2]
print(sliced_arr2d)
6
[[1 2]
 [4 5]]

저녁 ( 20 : 00 ~ 21 : 00)

오늘까지 과제였던 걸 리뷰도 하면서,

새로운 과제를 설명 듣는 Zoom 수업에 참여하였습니다


마무리

벌써 내일이면 새로운 강의를 받게 되고

새로운 과제도 시작하고

새로운 팀에서 새로운 팀원과 공부하게 되네요 😢

시간 너무 빠른 거 같아서 서운할 정도입니다

그래도

모든 분들을 한 번씩은 뵈어야

나중에 팀 프로젝트를 진행할 때 유리할 거 같아요

좋게 생각하려구요,, 아쉽지만 🥲

 

공부할 게 많이 쌓여있어서

스트레스도 쌓이고 있지만

그래도 해야 하는 걸 어떡합니까!

오늘도 수고 많으셨어요 ㅎㅎ

감사합니다.

인사말

오늘은 1시간 일찍 와서 시작했답니당!

그리고

어제부터 Pandas를 통해서 문제를 풀어보았어요!

갈수록 많은 것들을 머리에 집어넣고

복잡한 코드를 짜게 되니까 머리가 아프네요 😖

그래도 해야죠 어떡하겠어요 🤪

오늘도 파이팅입니다!

감기 조심하세요 ㅠㅠ


오전 ( 08 : 00 ~ 13 : 00)

<pivot_table 생성 후 Index 변경하기>

import pandas as pd

# 데이터프레임 예시
data = {
    '날짜': ['2023-01-01', '2023-01-01', '2023-01-02', '2023-01-02'],
    '제품': ['A', 'B', 'A', 'B'],
    '판매': [10, 20, 30, 40]
}

df = pd.DataFrame(data)

# 피벗 테이블 생성
pivot = df.pivot_table(
    values='판매',         # 집계할 값
    index='날짜',          # 행으로 사용할 컬럼
    columns='제품',        # 열로 사용할 컬럼
    aggfunc='sum',         # 집계 함수 (기본값: 'mean' 또는 'sum' 가능)
    fill_value=0           # 결측값을 채울 값
)

print(pivot)

pivot_table을 gpt한테 물어보았어요

피벗 테이블이 저렇게 구성되었군요..!

집계할 때 쓰나봐요!

3번 문제 내용

드래그를 옆으로 하면

소계(검거), 소계(발생)을 하라고 돼 있더라구요

그래서

pivot_table = df.pivot_table(
    values = '' # 집계할 값
    index = '구 별' # 행으로 사용할 컬럼
    columns = '' # 열로 사용할 컬럼
    aggfunc = 'sum' # 집계 함수
    fill_value = '집계할 값 없음'
)

여기까지는 작성하였으나,,

values에 넣을 값이랑 columns에 넣을 값을 모르겠더라구요

pvt = pd.pivot_table(
    dataframe,
    index = '구 별', # 행으로 사용할 컬럼
    aggfunc = 'sum', # 집계 함수
    fill_value = 0, # 결측 값
    #margins = True # 총 계가 생김
)
print(pvt)

그래서

넣지 않았습니다! 🤣

어차피 다 할 건데 굳이 계산하려는 값이랑

열을 정할 필요가 없더라구요

그래서 깔끔하게 없애버리고!

불러올 값들이 있는 파일명인 "dataframe"을 기입해주었습니다

그리고!

굳이 해보았는데 margins = True으로 기입해주면 총 계가 생기게 됩니다

margins는 기본값이 False기 때문에 True로 바꿔줘야 합니다!

 

<Quiz 4_drop 써서 삭제하기>

데이터프레임명.drop([row])

퀴즈 자체에서 코드를 주셨길래

그대로 따라써보았습니다

근데 "구 없음"만 지워야 하잖아요? 🧐

KeyError: "['구 없음'] not found in axis"

엥??

dataframe에는 "구 없음"이 존재한단 말이죠? 🤨

그래서 dataframe 파일 말고,

pivot_table을 끌고 와보았습니다

pvt2 = pvt2.drop(['구 없음'])

원래의 pvt 파일에는 "광진구"와 "구로구" 사이에 "구 없음"이 존재했거든요!

짜잔 - ✨

없애버렸습니다 😎

pivot_table을 기준으로 해야 하는 이유가

저희가 강남서 -> 강남구 이런 식으로 바꾸었잖아요

그 파일을 기준으로 pivot_table을 만들었구요

그래서 데이터의 이 되는 게 "pivot_table"이 된다고 생각합니다!

그래서 pivot_table로 drop 해주니까 변경되네요! 🤪

 

<Quiz 5_각 범죄별 검거율 구하기 및 Columns 추가>

일단은 컬럼을 먼저 추가 해주었어요

검거율은 평균값을 구하고 나눠야 한다 생각을 해서

간단한 컬럼부터 추가해주었습니다

# 컬럼 추가하기
파일명['추가할 컬럼명'] = 시리즈 객체
ex) data['강도 검거율'] = data['강도(발생)'] / dataf['강도(검거)'] * 100
# Quiz 5_컬럼 추가하기 및 검거율 계산
## 리스트로 시도해보려 했으나, 실패

add_value_name = ['강간 검거율','강도 검거율','살인 검거율', '절도 검거율','폭력 검거율', '검거율']
add_value_happen = []
pvt2['강도 검거율'] = pvt2['강도(발생)'] / pvt2['강도(검거)'] * 100
print(pvt2['강도 검거율'])

생성해야 할 컬럼들이 많이 때문에

한 번에 처리하고 싶어서 이리저리 머리를 굴려봤습니다

처음에는 리스트로 시도해보았는데

생각해보니까,, 데이터 파일 자체가 큰 애였다면

리스트로 하기엔 무리라고 생각이 들더라구요 🫠

다른 방법을 생각해보았습니다,,

data['강도 검거율'] = data['강도(발생)'] / data['강도(검거)'] * 100

어쨌거나 이 문장이 반복되어야 한단 말이죠? 🧐

반복..?

반복..!?!?

for문을 가져와보았습니다

for crime in ['강간', '강도', '살인', '절도', '폭력']:

일단 이렇게 만들고 밑에는

for crime in ['강간', '강도', '살인', '절도', '폭력']:
        pvt2[f'{crime} 검거율'] = pvt2[f'{crime}(발생)'] / pvt2[f'{crime}(검거)'] * 100

이렇게 해서 넣어주었어요 (파일 이름 : pvt2)

crime이라는 이름의 리스트를 만들어주었구요

f{} 이렇게 써서 편하게 쓸 수 있어요!

이걸 포매팅이라고 하거든요! 종류가 다양한데,

포매팅은 내일 공부할 겁니다 😎

결과물 아 ~ 주 예뻐서 맘에 들어용 ㅎㅎㅎ


오후 ( 14 : 00 ~ 18 : 00 )

정신없이 찾아보고 물어보고

팀원 분들이랑 소통도 하니까 점심 시간이더라구요

그래서 후다닥 밥 챙겨 먹고,

매니저 님께 git hub 꿀팁 얘기도 듣고 난 후에

남은 문제들 풀어보았습니다!

 

<Quiz 6_필요없는 column을 del을 써서 삭제하기>

삭제 해봅시다 😎

# Quiz 6_del 사용해서 필요없는 컬럼 삭제하기

for delete_columns in ['강간(검거)','강도(검거)','살인(검거)','절도(검거)','폭력(검거)','소계(발생)','소계(검거)']:
    if delete_columns in pvt2:
        del pvt2[f'{delete_columns}']
print(pvt2)

앞서 컬럼을 한 번에 생성했듯이

삭제도 같은 방식으로 해보았어요

되네요..?

됐다고 나오니까 오히려 불안했어요,, 👀

그래서 확인 받으러 튜터 님께 갔죠?

# Quiz 6_del 사용해서 필요없는 컬럼 삭제하기

for delete_columns in ['강간(검거)','강도(검거)','살인(검거)','절도(검거)','폭력(검거)','소계(발생)','소계(검거)']:
    if delete_columns in pvt2:
        del pvt2[delete_columns]
print(pvt2)

수정된 코드입니다

뭐가 달라졌냐구요?

포매팅 중에서 f{}가 있잖아요

그게 print할 때만 쓰는 거라고 하셨어요

그래서 포매팅에 대해서 공부하였습니다..

(내일 제대로 각 잡고 하려고 했는데,, 쩝 👀)

 

< f{}(f-string) 쓰는 방식>

When :  Python에서 문자열을 조작할 때

How : print(f"{}")

Ways :

1. 기본형

  • f를 문자열 앞에 추가
  • {} 안에 변수를 넣으면, 해당 변수의 값이 문자열 안에 삽입됨
# 예시
name = "민경"
score = 95
print(f"이름: {name}, 점수: {score}")
이름: 민경, 점수: 95

 

2. 표현식

x = 5
y = 10
print(f"두 수의 합은 {x + y}입니다.")
두 수의 합은 15입니다.

 

3. 숫자 포매팅 (소수점)

pi = 3.141592653589793
print(f"원주율은 {pi:.2f}입니다.")  # 소수점 2자리로 출력
원주율은 3.14입니다.

.2f는 f는 실수를 의미, 2는 소수점 2자리까지를 의미

 

4. 중첩 변수

name = "Alice"
greeting = f"Hello, {name}!"
message = f"Message: {greeting}"
print(message)

greeting에서 {name}에 들어가는 값을 쓸 거고

message에서 {greeting}의 문장을 쓸 구조로 돼 있어요

Message: Hello, Alice!

 

5. 함수 호출

word = "Python"
print(f"단어 '{word}'의 길이는 {len(word)}입니다.")

함수 len()이 들어가서도 작동이 가능해요!

대신 {len()} 구조로 들어가야 하네요!

단어 'Python'의 길이는 6입니다.

 

6. 할당하기 (=)

x = "배"
y = "민경"
print(f"{x=}, {y=}")  # 변수명과 값 출력

오,, ㅋㅋㅋㅋㅋㅋㅋㅋ

재밌네요! 되게 유용하네요

다양하게 많이 쓰이니까, 신기한 거 같아요

한 번 더 파일명을 언급하지 않아도 된다는 것도 너무 좋구요!

 

<Quiz 7_ rename>

드디어 마지막 문제입니다!!

rename을 해볼게요!

이번에도 for문으로 해결할 겁니다!

# Quiz 7. rename하기

# 1트
for rename_columns in {'강간(발생)':'강간','강도(발생)':'강도','살인(발생)':'살인','절도(발생)':'절도','폭력(발생)':'폭력'}:
     if rename_columns in pvt2:
         pvt2.rename(rename_columns)

될 줄 알았는데 안 되더라구요

# 오류 내용
TypeError: Index(...) must be called with a collection of some kind, '강간(발생)' was passed

타입이 다르대요,,

고칠 줄 아는 정도였으면 좋았을 텐데

도저히 뭐라는지 모르겠어서 그냥 .rename()으로 했습니다.

# 2트
rename_columns_on = pvt2.rename(columns = {'강간(발생)':'강간','강도(발생)':'강도','살인(발생)':'살인','절도(발생)':'절도','폭력(발생)':'폭력'})

print(rename_columns_on)

이게 의문점이 들었던게요

중괄호{}면 딕셔너리란 말이죠?

근데 왜 key가 먼저 들어가지 않고, value가 먼저 들어갔는지

그게 너무 궁금했습니다

일단 결과는 잘 나왔어요 👀

제가 생각하기에는 이미 기존 파일에

key 문자 그대로 잘 들어가 있어서 바로 value로 들어간 거 같아요 🧐

그리고 문제의 문장을 보면 "컬럼명을 rename으로 변경하세요" 잖아요

그래서 앞전에 피벗 테이블을 작성했듯이

'columns도 그대로 집어넣으면 "열로 사용한 컬럼"의 뜻이니까 그대로 되겠지 뭐'

라는 생각으로 그대로 rename 뒤에 집어넣었거든요

근데,, 되네요? 🙄

알다가도 모르겠어요

일단 저렇게도 넣을 수 있구나를 깨달았습니당!


저녁 ( 18 : 00 ~ 19 : 00)

숙제도 이제 다 끝냈기 때문에!

git에 대해서 공부 좀 하고, 생성 하려구요!

git을 어떻게 해야 하는지 전혀 몰라서

팀원 분들이랑 얘기 나눴습니다!

homework라는 공간 속에

숙제한 파일을 넣을 거라서, 팀원 분께 물어봤어요

이렇게 파일을 업로드 하였는데,

폴더를 생성해서 하는 게 어떻냐고 하시더라구요

저기 파란색 칸 보이시나용?

저기에서 슬래시(/)를 쓰면 폴더로 생성되고, 그 뒤로는 파일명으로 되나봐요!

이렇게 생성하면 됩니다!

제출은 내일 하려구요 ㅎㅎ


마무리

오늘 뭔가 휘익 휘익 지나간 거 같아요

이리 치이고 저리 치여서 체력 소모가 컸지만

팀원 분들과 막힐 때마다 소통하고,

튜터 님께 가서 힌트 얻고, 다시 해보고

이걸 반복하니까 너무 재밌었습니당 ㅎㅎㅎ

 

아직 안개가 사라지지 않아서 앞이 잘 보이진 않지만

희미하게라도 앞이 보이는 느낌이에요!

적극적으로 배움을 이어 나가려 해서 제가 너무 좋아요 🥰

주변 분들도 너무 좋구요 히히 🥰

 

한 번 할 거면 제대로 해야죠 히히

내일도 파이팅!!

감사합니당

인사말

안녕하세요~

벌써 교육 2주차가 됐네요!

12월 4일까지 과제 제출이 있기 때문에

그 날까지는 과제 중심으로 공부를 하게 될 것 같습니다!

그래도 프로그래머스의 0단계 문제를 꼬박 꼬박 3개씩 풀어보려구요!


오전 ( 09 : ~ 13 : 00)

오늘은 과제 2를 공부했답니다!

class를 써서 인적사항을 정리하는 내용인데요

과제의 조건을 저렇습니다.

그래서 class에 대해 제대로 강의 영상을 보지 않고,

알고 있는 내용만으로 작성을 해보았어요

 

<11월 29일 금요일_1트>

11월 29일 금요일에 새벽까지 남아서 해봤거든요?

해야 할 일은 빨리빨리 끝내고 싶어해서, 해보았는데

감이 전혀 잡히지 않아서,, 그냥 자러 갔습니다

 

<12월 1일 일요일_2트>

될리가 없죠 🧐

다시 보고, 계속 뭐가 문제인지 생각해보니까

"객체"를 설정하지 않았더라구요

그리고 첫 번째의 def __init__(): 에서

한 번에 다 적어내려도 됐던 거였어요..!

유튜브 강의를 보고 깨달았답니다 ㅠㅠ

 

<12월 1일 일요일_3트>

객체를 이런식으로 설정하는 게 아닌가봐요? 🧐

영상을 좀 더 찾아보고 해봐야겠어요

 

<12월 2일 월요일_4트>

# 4트
class person:
    def __init__(self):
        self.name = input("이름을 입력해주세요 -> ")
        self.gender = input("성별을 입력해주세요 -> ")
        self.age = int(input("나이를 입력해주세요 -> "))
        
    def display(self):
        print("이름 : {}, 성별 : {}, 나이 : {}".format(self.name, self.gender, self.age))
        
# 객체 생성(=person_info)
person_info = person()
person_info.display()

display() = show()랑 같더라구요

처음엔 show()로 입력하였는데, 과제 내용을 보니까

display()로 하라고 해서 수정하였습니다!

그리고

이해하지 못 했던 "객체 생성"도 영상을 여러개 보다 보니,

이해하게 되었습니다. 😝

# 4트
    def display(self):
        print("이름 : {}, 성별 : {}, 나이 : {}".format(self.name, self.gender, self.age))
print("이름 : ", self.name, "성별 : ", self.gender, "나이 : ", self.age)

그리고 .format() 함수를 이렇게도 표현할 수 있다는 걸

튜터 님한테 상담했을 시, 알게 되었습니다

근데 .format()을 쓰는 게 더 편한 거 같아요 😋

추가 정보를 알려주셔서 감사합니다 히히 😉

 

11 : 00 ~ 13 : 00

이제 마지막 과제인 "Python 라이브러리로 데이터 분석하기" 만 남았는데요

아직 라이브러리에 대한 개념이 없어서,

스파르타 내일배움캠프에서 지급해준

파이썬 라이브러리 강의를 시청해주었습니다 😋

그래서 pandas라는 것도 깔아보았습니다

Terminal에서 설치를 설정하면 되더라구요..

강의로 설치를 따라가려 했는데

강의 보면서 하니까 전혀 모르겠어서 튜터 님께 찾아가서 해결했습니다 😢

이제 import pandas 해서 쓰면 된다고 하셨어요!

 

과제 3번은 시작부터 어렵네요 ㅠㅠ

 

<가상환경 활성화 하기>

1. conda 공식 사이트에 들어가서 설치를 합니다.

2. 가상환경 이름을 만들어주고 생성 해줄게요

<VSCode> Terminal에서 써주시면 됩니다!

 conda create -n <환경이름> python=3.10
Ex) conda create -n myenv python=3.10

3. 가상환경을 활성화 해줄 겁니다

conda activate <환경이름>
conda activate myenv

4. 주피터도 설치해주고요

conda install jupyter

5. ipykernel도 설치해줍니다.

conda install ipykernel

6. 가상환경을 jupyter 커널로 추가해줍니다.

python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"

7. 주피터 노트북을 실행해서 브라우저에서 잘 되고 있는지 확인 해줄게요

jupyter notebook

8. 버전 확인 및 파일이 잘 열어지는지 확인해볼게요

import numpy as np
import pandas as pd

print("NumPy version:", np.__version__)
print("Pandas version:", pd.__version__)
df = pd.read_excel('crime.xlsx')
df

9. 다시 VSCode로 돌아가서 ipynb 파일을 찾아갑니다.

그러면 오른쪽에 Select Kernel이 떠요 그걸 누르시면

이렇게 이전까지 생성 중이었던 가상환경이 보이실 겁니다.

그걸 눌러주세요.

최종 화면이 이렇게 된다면

준비 끝입니다 😭

팀원 언니의 도움이 없었더라면 여기까지 절대 못 왔어요 ㅠㅠ

설정을 끝내고 나니까, 꼬질꼬질한 시골 강아지가 된 기분이네요

하필 오늘 입은 옷도 누렁이 옷이었구요 🤣


오후 ( 14 : 00 ~ 18 : 00)

15시까지가 되어서야 가상환경 설정을 끝냈습니다 ⛳️

이제  과제 3번을 해보아야겠지요,,

과제 3번에는 총 7가지의 Quiz가 있습니다

첫 번째 퀴즈

import pandas as pd
df = pd.DataFrame('crime.xlsx')
print(df)

왜 안 되는지 모르겠어요

뭐가 문제였을까요 🧐

 

그래서 다시 인강으로 돌아가보았습니다

데이터 프레임이라는 내용이 있거든요

import pandas as pd

# 예시: 시리즈 생성
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s)

약간 딕셔너리와 비슷한 구조더라구요

Series는 리스트 느낌이었고, index는 딕셔너리 느낌이었습니다.

 

15 : 30 ~ 16 : 30

<Data Frame 생성하기>

import pandas as pd
dataframe = pd.read_excel('crime.xlsx')
dataframe

일단 첫 번째 퀴즈는 완수를 해냈어요!

강의를 듣다가도 첫 번째 퀴즈를 풀어낼 수 있을 거 같아서

계속 고민을 해봤더니 처음에 테스트겸 파일 불러왔잖아요?

그거를 그냥 data frame으로 적었습니다

여기서 추출이 돠냐 안 되냐는 다음 문제를 풀어보면서 확인하려구요 😤

 

16: 35 ~ 18 : 00

<유튜브에 있는 파이썬 판다스 강의 시청>

기본 개념이 있어야 할 수 있겠다 싶어서

기초부터 차근차근 쌓아가려구요,,

오늘의 문제 풀이는 여기까지만 하고

개념 정리 후에 저녁 시간엔 프로그래머스 문제 풀 겁니다 😉


저녁 ( 19 : 00 ~ 21 : 00)

벌써 오늘의 저녁 시간이 됐네요

과제 3번의 2번 문제를 풀어보았습니다!

문제에서 힌트를 얻어서 만들어보았어요

dataframe['구 별'] = dataframe['관서명'].map(df).fillna('구 없음')

dataframe

새롭게 만들 열을 dataframe['컬럼 명']으로 추가해주고

그와 참조할 열 이름을 dataframe['관서명'].map(df)으로 해준 뒤!!

여기서!! 처음 알은 함수!! .fillna()는 fill in처럼 ~을 채우다 라는 의미라고 하더라구요

그래서 .fillna()만 적으면 NaN으로 출력되는 걸 확인했습니다!

그래서 원하는 값으로 .fillna('구 없음')을 적어주어 문제 해결했습니다!


마무리

하,, 머리 너무 아픕니다

판다스가 확실히 데이터가 없고, 배운 적도 없어서 감이 안 잡혀요

하나 푸니까 다음 문제에 또 막히고

하나 푸니까 다음 문제에 또 막혀요

알아낼 때 재밌긴 한데!

과정이,, ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

과정 덕분에 해결이 되었을 때만큼 짜릿한 게 없는 거 같아요 😁

내일은 더 파이팅 해야겠어요

4일에 제출해야 하기 때문에 담은 4문제 풀어야 해요!!

파이팅!! 🔥

인사말

안녕하세요~!

제가 또 돌아왔습니다!

오늘은 14시에 팀별로 발표가 있기 때문에

오전 시간에는 발표 준비로 시간을 보냈구요,

오후 19시부터 저녁까지 본격적으로 공부를 시작하였습니다!

14시부터 17시 30분까지 1조부터 12조까지 ZOOM으로 발표가 있어서

오늘은 많은 공부를 하진 못 했답니다 😓


 

오전(09 : 00 ~ 13 : 00)

오전 시간에는

발표 스크립트를 재검토하고, 어떻게 해야 막힘없이 전달하고

집중하게 만들 수 있을지 고민을 하며 시간을 보냈습니다.

저희팀은 딕셔너리에 대해서 발표를 하기 때문에

질리도록 발표 자료를 확인하였더니

딕셔너리에 대한 이해도가 단단해진 기분이었어요 😙

무엇보다, 50명의 교육생들 앞에서 발표를 할 생각에

잘하고 싶다는 욕심이 생겨서 "굳이?"라는 말이 나올 정도로

긴장하며 발표 준비를 하였습니다 😋

이왕에 할 거면 확실하고 깔끔하게 하는 것이 좋잖아요 ㅎㅎ

 

11 : 00 ~ 11 : 50 프로그래머스 3문제 풀이

<첫 번째 문제_각도 합치기>

이 상태에서 버그를 찾아서 수정하면 되거든요!

한 줄만 수정하면 됩니다!

280 + 485 = 45도로 표시가 되어야 하기 때문에

sum_angle = (angle1 + angle2) %360

%360으로 전환하여서 정답을 맞추었습니다! 😘

 

<두 번째 문제_피타고라스>

제곱을 해주기 위해서 **을 해주시고

**뒤에 얼만큼 제곱을 할 건지 숫자를 넣어주시면

제곱으로 값이 출력이 됩니다! 😘

 

<마지막 문제_두 수의 차>

코드를 보고 num1과 num2의 할당된 값이 없길래

 

num1과 num2 값을 리스트[]로 할당해주고

print(solutiion) 해주어서 문제를 해결하였습니다! 😎

 

12 : 00 ~ 13 : 00

점심 시간이 되기 전에,

팀원분들과 예상 질문에 관해서 논의를 하고

식사를 하러 갔습니다.

점심 시간 끝나자마자 발표가 있다고 하니,

굉장히 설레고 떨리네요 😖


오후(14 : 00 ~ 17: 20)

3시간 20분 동안의 발표가 끝난 후

개인 과제를 받았기 때문에 팀원 분들과 과제 관련 논의를 18시까지 진행하였습니다


저녁(19 : 00 ~ 21 : 00) - 과제 첫 번째 문제 풀기

이게 12월 4일까지의 제출해야 할 과제 3가지 중 첫 번째 과제 내용입니다

문장 하나하나 읽어보면서 어떻게 코드를 짜야할지 생각해보았고,

시작의 접근성이 맞는지 튜터 님께 검토 받은 후 코드를 싸보았습니다.

import random

일단은 파이썬에서 import random이 뭐가 있는지를 파이썬 홈페이지에서 찾아보았습니다.

https://docs.python.org/3/library/random.html#random.randint

그 안에 Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).가 있길래

적용해서 코드를 짜보았습니다.

우선

# 출력 예시
1과 10 사이의 숫자를 하나 정했습니다.
이 숫자는 무엇일까요?
예상 숫자: 5
너무 큽니다. 다시 입력하세요.
예상 숫자: 4
너무 큽니다. 다시 입력하세요.
예상 숫자: 3
정답입니다!

이렇게 출력이 되도록 해야 하거든요?

input_random_numbers = random.randint(1, 10)
start_sentence = int(input("숫자를 입력해주세요: "))

그래서 여기까지 코드를 짜주었습니다

while input_random_numbers == start_sentence:
    print("정답입니다!")
    break
else:
    print("땡! 다시 입력해주세요")

그리고 정답이 나올 때까지 반복을 해주어야 하기 때문에

반복문 while을 써주고 정답일 시 멈추도록 break도 입력해주었습니다

정답이 아닐 때에 출력될 값도 입력을 해주었구요

잘 작동하는구나 싶었는데

2를 입력하였을 때 왜 저런 문장이 발생하는지 모르겠더라구요

그리고 왜 멈춰버렸는지 왜인지 모르겠어요,, 😩

그래서 튜터 님께 찾아가 여쭈었습니다.

<수정 전>

while input_random_numbers == start_sentence:
    print("정답입니다!")
    break
else:
    print("땡! 다시 입력해주세요")

<수정 후>

while True:
    start_sentence = int(input("숫자를 입력해주세요: "))
    if input_random_numbers == start_sentence:
        print("정답입니다!")
        break
    else:
        print("땡! 다시 입력해주세요")

while문에 True:를 입력하면 무한 동력이라고 알려주셨습니다!

기존에 while문에다가 input_random_numbers == start_sentence: 이렇게 적었잖아요 😅

그래서 무한 동력이 되진 않았더라구요

그래서 if문으로 내려보냈습니다 ㅎㅎ

꺄아아아악 실행 되었습니다!

8트만에 정답 맞춘 게.. ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

import random

input_random_numbers = random.randint(1, 10)
print(input_random_numbers)

while True:
    start_sentence = int(input("숫자를 입력해주세요: "))
    if input_random_numbers == start_sentence:
        print("정답입니다!")
        break
    elif start_sentence < input_random_numbers:
        print("보다 큽니다, 다시 입력해주세요!")
    elif start_sentence > input_random_numbers:
        print("보다 작습니다, 다시 입력해주세요!")
    else:
        print("땡! 다시 입력해주세요")

elif를 써서 좀 더 조건을 붙여주었습니다

순차적으로 검사하면서 입력값이 출력되도록 만들었습니다! ㅎㅎ

"보다 작습니다, 다시 입력해주세요!"

"보다 큽니다, 다시 입력해주세요!"

을 추가하였던 것도 잘 출력되었습니다 ㅎㅎ


마무리

오늘은 while을 무한 동력으로 돌릴 때 True: 을 써야한다는 것을 배웠습니다!

이건 이제 까먹진 않을 거 같아요!

그리고 강의로만 배웠던 elif를 직접 써보면서 게임을 만들 수 있어서

너무 재밌었습니다 🤪

얼른 아는 게 많아져서 이런 저런 게임을 만들어 보고 싶어요 ㅎㅎ

배울수록 너무 매력적으로 느껴지고 재미를 느끼고 있습니다 히히

이제 주말이네요!

평일 동안 고생 많으셨습니다, 푹 쉬세요!

감사합니다!

인사말

안녕하세요~!

오늘도 문제 푼 걸 리뷰하도록 하겠습니다

어제처럼 오전 ~ 저녁으로 나눠서

무엇을 했는지 시간 흐름대로 기록하도록 하겠습니다!

 

내일이 딕셔너리 개념 발표가 있기 때문에

오늘도 딕셔너리 문제를 풀어보려 합니다!

그 뒤로는 파이썬 문제를 풀어볼 거구요 😜

 

TMI(To0 Much Imformation)

비염과 감기 때문에 너무 힘드네요 ㅠㅠ

그래도 한 건 해야죠 😎


오전 (09 : 00 ~ 13 : 00)

오늘은 딕셔너리 중급 수준 문제 5번부터 고급 수준 문제 10번까지

총 6문제를 풀어볼 겁니다!

 

<문제 5. 딕셔너리 여러 개 합치기>

#딕셔너리 여러 개 합치기
# 문제 5: 두 개의 딕셔너리가 주어졌을 때, 두 딕셔너리를 합친 새로운 딕셔너리를 만들어 출력하세요. (중급)
# 출력 예시 : {'name': '최준호', 'score': 75, 'age': 24, 'major': '영문학'}
student1 = {
    'name': '최준호',
    'score': 75
}

student2 = {
    'age': 24,
    'major': '영문학'
}

두 딕셔너리를 합쳐서 새로운 딕셔너리를 만들어야 하는데,

두 딕셔너리를 합치는 함수가 뭔지 모르거든요,,

그래서

팀원분들께 물어본 결과, | 이걸 쓰면 합쳐진다고 하더라구요

print(student1 | student2)

역 슬레쉬 위에 있는 일자 모양을 적어주시면

{'name': '최준호', 'score': 75, 'age': 24, 'major': '영문학'}

이렇게 합쳐집니다!

알아야 할 함수랑 수식이 정말 많은 거 같아요 😣

무작정 외울 생각은 안 할 거구요,

계속 문제를 많이 풀어보면서 익숙해질 생각입니다

문제 풀면서 공부하는 게, 차라리 더 재밌거든요 😝

 

<문제 6. 딕셔너리에서 특정 키가 존재하는지 확인>

#딕셔너리에서 특정 키가 존재하는지 확인 
# 문제 6: 주어진 딕셔너리에서 name 키가 존재하는지 확인하고, 존재하면 "키가 존재합니다"를 출력하고,
# 존재하지 않으면 "키가 없습니다"를 출력하세요. (중급)
# 출력 예시 : 키가 존재합니다
student = {'name': '이하늘','age': 28}
#1트
for i in student6:
    if student6 == 'name':
        print("키가 있습니다")
    else:
        print("키가 없습니다")
키가 없습니다
키가 없습니다

??????

왜 print()가 두 번이 되는지도 궁금하고

print(type(student6) 했을 때

dict로 나와서 그런 걸까요? 적용이 안 되네요..? 🧐

 

이 고민을 하면서 30분이나 걸린 문제입니다..

물론 튜터 님과 매니저 님께 자문을 구하였지만,

돌아와서 다시 혼자 생각을 해보니까

비슷한 문제가 생겼을 때,

스스로 해내진 못 할 거 같더라구요 🥲

그래서 

혼자 다시 생각해보았습니다

 

제가 간과했던 개념이, for은 순차적으로 순회 검사를 한다는 거였어요

그래서 결과값이 두 번이나 나왔던 거고, 

#2트
if i == 'name':
    print("키가 있습니다")
else:
    print("키가 없습니다")

if문 뒤에 적었던 student6는 dict의 타입이기 때문에

== 뒤에 오는 'name'과는 타입이 안 맞아서 오류가 났더라구요

그래서 if 뒤에 i를 적어주고 다시 돌려보았습니다.

Traceback (most recent call last):
  File "/Users/baeminkyung/Desktop/딕셔너리 문제.py", line 63, in <module>
    if i == 'name':
       ^
NameError: name 'i' is not defined. Did you mean: 'id'?

오류를 돌려받았습니다 ㅎ

생각해보니까 ㅋㅋㅋㅋㅋ i라는 거는 for을 위해서 만든 애기 때문에

지워주거나 student6로 바꿔줘야 했는데 말이죠 ㅋㅋㅋㅋ,,

# 3트
if student6 :
    print("키가 존재합니다")
else:
    print("키가 없습니다")

그래서 for문 지워주고, dict student6를 넣어줬는데

생각해보니까,, 딕셔너리의 'name'만 가져 오고 싶은 거잖아요,,

어떻게 해야 할지 고민 많이 했습니다,,

 

튜터 님께 어제 받은 사이트를 뒤적거리면서 알게 됐는데요

딕셔너리에 속한 Method가 되게 많더라구요

영어로 되어있긴 하지만 해석은 가능하니까 읽어보았습니다

get() : Returns the value of the specified key

https://www.w3schools.com/python/python_dictionaries_methods.asp

"구체적인 key의 value 값을 다시 보여준다"고 이해했거든요

그래서 .get()을 써서 활용해 보았습니다.

if student6.get('name'):
    print("키가 존재합니다")
else:
    print("키가 없습니다")
키가 존재합니다

전 저 자신에게 무궁무진한 박수와 칭찬을 해주고 싶어요

문제 풀다가 막혀서 혼자 처음엔 낑낑거리다가

자문을 구하러 여기저기 돌아다니고,

힌트를 받아서 혼자 생각하고 해낸 게 짜릿했습니다

어쨌든 해냈다는 거고? 도파민도 팡팡 터지네요 🤪

 

<문제 7 . 중첩된 딕셔너리>

#중첩된 딕셔너리
# 문제 7: 다음과 같은 중첩된 딕셔너리에서 address 값을 출력하는 프로그램을 작성하세요. (고급)
# 출력 예시 : 서울시 강남구
person = {
    'name': '김하나',
    'contact': {
        'email': 'hana@naver.com',
        'phone': '010-1234-5678'
    },
    'address': '서울시 강남구'
}

어찌하여 이런 시련을 주셨을까요..

머리 터질 것 같습니다..

아침을 잘 챙겨먹지 않는 편인데, 요즘 들어서 머리를 많이 썼더니

배가 너무 고프더라구요 😂

그리고 나중에 체력 때문에 지장이 생길까 봐,

교육 끝난 후 운동까지 했더니 배가 금방 고파져요

아주 바람직한 흐름인 거 같아요 😉

print(person.get('address'))
서울시 강남구

??????? 🧐????

뭐죠

일단 값을 불러오고 싶은 거니까 .get()을 써서 불러왔는데

바로 불러와지네요? 왜죠? 뭐죠?

어쨌든 문제를 풀었으니 된 거지만

만약 'adress'가 아니라 'email'이었으면 어떻게 가져와야 할지

잘 모르겠더라구요

궁금하고 찝찝한 건 못 참죠.

# email 꺼내기 1트
email = print(person.get('email'))
None

거참.. 단호하고 확실해서 좋네요 😤

# email 꺼내기 2트
email = print(person.get('contatct'), person.get('email'))
None None

이 접근 방식이 아닌가,,

그나저나 .get() 개념을 다시 확인 해봐야겠어요

dictionary.get(keyname, value)
Parameter : Description
keyname : Required. The keyname of the item you want to return the value from
value : Optional. A value to return if the specified key does not exist. Default value None

value가 옵션이군요? key가 있어야 있고, 없으면 없어지는 그런,,

호오 🧐

개념 설명은 알게 되었지만 활용 방법을 모르겠어서

튜터 님께 가져가보았습니다 ㅋㅋㅋㅋ..

# email 꺼내기 1트 (email에 할당하는 정의가 없음)
email = print(person.get('email'))

# email 꺼내기 2트 (email에 할당하는 정의가 없음)
email = print(person.get('contatct'), person.get('email'))

# email 꺼내기 3트 (튜터 님과 함께))
contact = person.get('contact')
email = contact.get('email')
print(email)
person.get('contact').get('email')
person['contact']['email']

전체적으로 제 흐름들을 설명드리며 자문을 구했는데요

기본 개념부터 차근차근 알려주시더라구요

접근법은 좋았다고 말씀 해주셨습니다 😳

그리고 코드를 완성시키는데 도움도 주시고 피드백도 해주셨어요!

email = print(person.get('email'))
email = print(person.get('contatct'), person.get('email'))

제가 다짜고짜 print()를 냅다 적었잖아요?

이렇게만 두면 값이 바뀌더라도 할당할수가 없어서 아쉽다고 하시더라구요

그래서 다음부턴 할당을 하고, print()해야겠다는 걸 깨달았습니다!

생각해보니, 변수값이라서 바뀔수도 있는데

변수에 대해서 할당하는 문장을 입력 안 했네요 🥵

# email 꺼내기 3트 (튜터 님과 함께))
contact = person.get('contact')
email = contact.get('email')
print(email)
person.get('contact').get('email')
person['contact']['email']

 

딕셔너리 내용이 뭐였죠?

person = {
    'name': '김하나',
    'contact': {
        'email': 'hana@naver.com',
        'phone': '010-1234-5678'
    },
    'address': '서울시 강남구'
}

첫 번째로

"person"의 딕셔너리 -> 'name', 'contact', 'address'가 있고

"contact"의 딕셔너리 -> 'email', 'phone'가 있습니다

총 두 개의 딕셔너리로 구성되어 있는 구조인 거죠!

contact = person.get('contact')
email = contact.get('email')

print(email)

그렇기에 할당값을 적어내리자면

'contact'는 'person' 딕셔너리 안에 있으니까 'person'에 있다고 해주구요

'email'은 'contact' 딕셔너리 안에 있으니까 'contact'에서 가져오겠다고 해주면 됩니다!

hana@naver.com

이렇게 값에 대한 할당을 해주고,

print()를 해준다면! 원하는 키 값 'email'에 대한 value 값 'hana@naver.com'이 나오는 거죠 😋

도파민 쩌는 깨달음이었습니다 😏

person.get('contact').get('email')
person['contact']['email']

그리고 이렇게도 표현이 가능하다고 알려주시더라구요!

person['contact']['email']

이때는 ['키 값']이 없을 경우 오류가 발생할 수 있습니다.

person.get('contact',{}).get('email',{})

그래서 이렇게 쓴다고 하시는데, 왜인지는 아직 이해 못 했어요

튜터 님께 숙제로 받은 ".get('키 값', {})에서 중괄호를 넣는 이유"는

오후에 고민해보려구요 🧐 (14시까지 오라고 하셧움,,)

 

<문제 8. 딕셔너리 값에 리스트 포함하기  >

#딕셔너리 값에 리스트 포함하기
# 문제 8: 주어진 student_scores 딕셔너리에서 각 학생의 점수를 평균을 구하여 출력하세요. (고급)
# 출력 예시
#홍길동의 평균 점수: 87.67
#이영희의 평균 점수: 85.00
#김철수의 평균 점수: 92.33
student_scores = {
    '홍길동': [85, 90, 88],
    '이영희': [78, 82, 95],
    '김철수': [92, 94, 91]
}
홍 = student_scores.get('홍길동')
이 = student_scores.get('이영희')
김 = student_scores.get('김철수')

# 1트
print(avg("홍길동의 평균 점수:" "홍","이영희의 평균 점수:" "이",
          "김철수의 평균 점수:" "김"))
Traceback (most recent call last):
  File "/Users/baeminkyung/Desktop/딕셔너리 문제.py", line 118, in <module>
    print(avg("홍길동의 평균 점수:" "홍","이영희의 평균 점수:" "이",
          ^^^
NameError: name 'avg' is not defined

?????? 아니 Python에 avg()가 없어요?????

SQL에만 있는 거예요??????

 

# 2트
평균 = sum(student_scores) / len(student_scores)
print("평균")
Traceback (most recent call last):
  File "/Users/baeminkyung/Desktop/딕셔너리 문제.py", line 122, in <module>
    평균 = sum(student_scores) / len(student_scores)
           ~~~^^^^^^^^^^^^^^^^
TypeError: unsupported operand type(s) for +: 'int' and 'str'
baeminkyung@baemingyeong-ui-MacBookAir Desktop %

'타입이 달라서 안 되는구나,,'

미치겠어요

와,, 머리가 안 굴러 가요 ㅠㅠㅠ

 

계속 머리를 굴리다가 점심 시간이 되어서 잠시 멈추었습니다..


오후 (14 : 00 ~ 18 : 00)

점심시간이 지난 후,

내일은 팀별로 발표가 있기 때문에 팀 회의가 조금 길어졌어요

16시부터 18시까지 회의를 하게 되어서

16시 전까지 발표장표를 각자 만들어 오기로 했거든요!

딕셔너리 (Dictionary).pdf
0.26MB

제일 마음에 드는 부분입니다

내일 제가 발표하기 때문에 파일을 계속 돌아보면서

모의 발표 연습도 해보았습니다

시간 정말 금방 가네요 😭


저녁 (19 : 15 ~ 21 : 00)

#딕셔너리 값에 리스트 포함하기
# 문제 8: 주어진 student_scores 딕셔너리에서 각 학생의 점수를 평균을 구하여 출력하세요. (고급)
# 출력 예시
#홍길동의 평균 점수: 87.67
#이영희의 평균 점수: 85.00
#김철수의 평균 점수: 92.33
student_scores = {
    '홍길동': [85, 90, 88],
    '이영희': [78, 82, 95],
    '김철수': [92, 94, 91]
}

저녁이 되어서는

오전에 풀다가 멈춘 8번 문제를 다시 보았습니다.

# 3트 - 튜터 님과 함께
for k in student_scores.keys():
    print(k)
total = 0

for v in student_scores.values():
    # print(v)
    total += v
    print(total)
    print(len(v))
    
# print(sum(v)) / len(v) -> for문 안이 아니라 밖에서 print() 돌려서 타입이 다름

튜터 님께서 딕셔너리에서 for문을 쓸 때는 달라진다고 하시더라구요

처음에는 무슨 말씀이신지 이해를 못 했는데

설명을 들으면 들을수록 느낌적으로 알 듯 말 듯 하더라구요 🤨

1시간 혼자 고민 하고

1시간 동안 튜터 님과 함께 교류하며

문제 해결 접근 방식을 논의해보았습니다

그래도 결론이 나지 않았지만요 😢

그래서

내일 마져 얘기 나누기로 했습니다!

저도 내일 발표 끝난 후 좀 더 생각해보고

내일 다시 얘기 해보려구요 ㅎㅎㅎㅎ

 

알듯 말듯한 이 기분이 간질거리고 흥미로워서

너무 재밌습니다 ㅎㅎ

배우면 배울수록 더 잘하고 싶어요 💪🏻


마무리

오늘이 제일 시간 빨리 갔던 거 같아요

튜터 님과 배움을 이어가던 중

오랜만에 list 얘기가 나왔는데, 뇌정지 왔어요 ㅋㅋㅋㅋㅋ

요즘 딕셔너리랑 for문만 보니까 기억이 안 나더라구요

튜터 님께서 당연히 지금은 익숙치 않아서 떠오르지 않다고 해주셔서 감사했습니다

갈고 닦아서 보석 같은 사람이 될게요 🤪

많이 혼내주시고 많이 가르쳐 주세요 😘

꾸준한 제가 되겠습니다!

감사합니다!

인사말

안녕하세요!
오늘은 문제를 더 많이 풀어보면서
제 코딩 실력을 확인하고, 증진하려고 해요!

하루종일 문제를 풀어댈 거랍니다 😋


오전(09 : 00 ~ 13 : 00)

오늘은 튜터 님께 어제 받은 6가지 문제를 풀어보았어요!

개념 강의는 많이 들었지만,

막상 문제를 풀려고 하니까 막막하더라구요..??

코드를 전혀 짜내질 못 했습니다 👀

 

그래서

이전에 공부하면서 손으로 적어두었던

노트와 python 자료들을 하나하나 다시 읽으면서 해보았어요

#1 숙제
Hello World를 5번 출력
#1 Hello World를 5번 출력
a = 5
print(type(a))
while a > 0:
    print("Hello World")
    a -= 1
    
#결과값
<class 'int'>
Hello World
Hello World
Hello World
Hello World
Hello World

 

a = 5라고 입력한 이유가

총 5번을 반복하려고 했기 때문에 넣었구요

혹시 타입이 뭘로 나오는지도 궁금해서 해봤습니다

정수로 표시되는 Int()로 나오더라구요!

그리고

조건식이 거짓이 되면 계산이 종료되는  while을 작성 후

범위값이 없으면 무한동력으로 돌아가기 때문에

a > 0:으로 범위값 설정해주고

제가 원하는 print("Hello World")를 입력해주었습니다

마지막으로

a 값이 점점 줄어들기 위하여

a -= 1이라는 조건을 넣어서 완성하였습니다!


#4 숙제
Hello World 4번 출력
b = [1,2,3,4]
print(type(b))
for i in b:
    print("Hello World")
    if b != [1,2,3,4]:
        break
        
#결괏값
<class 'list'>
Hello World
Hello World
Hello World
Hello World

앞서 동일안 문제이지만 이번엔 다르게 풀어보았습니다

for을 사용하여 풀어보았는데요!

for은 리스트, 튜플, 문자열을 받아서 하기 때문에

b = [1,2,3,4]로 설정하였습니다! 총 4개를 출력할 거니까요

b가 list로 잘 들어갔는지 type()으로 확인해주고

for i in b:

출력하려는 print("Hello World")을 입력 후

for은 순차적으로 계속 순회하기 때문에 break를 써서 멈춰주었습니다.

멈추기 위하여 조건식을 붙여줬구요

if b != [1,2,3,4]:

break으로요!

list에 4개의 값이 있기 때문에 결괏값에도 Hello World가 4개 출력되었습니다!

너무 재밌네요!


#5 숙제
numbers = [1, 2, 3, 4, 5]
순회를 돌아 numbers 요소 출력
#5 순회를 돌아 numbers 요소 출력
numbers = [1,2,3,4,5]
for i in numbers:
    print(i)
    
#결괏값
1
2
3
4
5

"순회"라는 단어에 힌트를 얻어서 for문으로 완성하였습니다

for문은 리스트, 튜플, 문자열 타입을 순차적으로 순회하죠?

그래서 for문 양식대로 입력하여 원하는 결괏값을 도출하였습니다.


#6 숙제
1부터 4까지 합 계산
e = [1,2,3,4]
print(sum(e))

#결괏값
10

[]이 괄호를 사용하면 그 값은 리스트가 되잖아요?

튜플()로 입력하려다가 값이 바뀔수도 있기 때문에

[]괄호를 써서 입력하였습니다

그 뒤로는 print(sum(e))를 작성하여 결괏값을 도출하였습니다.


#2 숙제
1부터 44까지 짝수만 출력
#2 1부터 44까지 짝수만 출력
c = 1
while c <45:
    if c %2 == 0:
        print(c)
    c += 1

#결괏값
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44

c로 시작 숫자를 알려주고

While c > 45:라는 범위값을 설정한 후

if c%2 ==0: 이면 짝수죠? 그래서 조건식을 붙였습니다

print(c)를 해준 뒤

c 값이 +=1 씩 증가할 거라고 조건식도 넣어주었습니다

그리하여 1 ~ 44까지의 범위 중 짝수들만 도출하였습니다!


#3 숙제
1부터 44까지 짝수는 *4, 홀수는 그냥 출력
#3 1부터 44까지 짝수는 * 4, 홀수는 그냥 출력 (모르겠음)
f = 1
while f <45:
    if f %2 == 0:
        if f %2 != 0:

여기서 뇌정지 왔습니다.. 모르겠더라구요

그래서 점심시간(13:00 ~ 14:00) 되기 전까지

계속 컨펌 받으면서 문제를 풀어 보았습니다.

 

[추가 숙제_1]
for문, range 함수를 사용해서 2부터 44까지 출력
g = range(2,45,1)
for i in g:
    print(i)
    
#결괏값
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44

range()함수를 마침 어제 배웠어서

아직은 따끈따끈하게 머리에 남아있었어요

그래서

g = range(2,45,1)로 하였고

for i in g:

print(i)를 하여 2부터 44까지 결괏값을 도출했습니다.

range()를 직접 써보니까 편하더라구요!

금방 숫자들이 우다다 나와서 편했습니다

 

[추가 숙제_2]
for문, range 함수를 사용해서 
2부터 44까지 짝수 출력
#3번을 풀기 위한 절차_2_짝수만
h = range(2,45,2)
for i in h:
    print(i)
    
#결괏값
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44

짝수만 출력할 거기 때문에

range(시작, 끝, 스탭) 중 스탭의 값을 2로 해주었습니다

h = range(2, 45, 2)

for i in h:

print(i)를 하니까 짝수만 도출되었습니다!

 

[추가 숙제_3]
1부터 44까지 짝수만 출력_for, range, if문으로
#2 1부터 44까지 짝수만 출력_for, range, if문으로
j = range(1,45,1)
for i in j:
    if i % 2 == 0:
        print(i)
        
#결괏값
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
44

이번에는 if문이 추가 되었습니다

range()로 범위값 설정해주고 for i in j:로 완성 후

if 조건문

if i %2==0:일 때 print(i)가 되도록 하였습니다

원하는 값도 그대로 도출되었구요!

이렇게 추가 숙제를 받으니까 숙제3 번도 풀 수 있겠지! 하고 다시 풀어봤습니다.

계속 문제로 던져주시면서 스스로 깨닫게 도와주셔서 튜터 님께 넘 감사하더라구요 ㅠㅠ

감사합니다 튜터 님 ㅠㅠㅠ ❤️

 

#숙제3
#1부터 44까지 짝수는 * 4, 홀수 그냥 출력
#3 1부터 44까지 짝수는 *4, 홀수는 그냥 출력_Retry
k = range(1,45,1)
for i in k:
    if i %2 == 0:
        print(i*4)
    if i %2 != 0:
        print(i)
        
#결괏값
1
8
3
16
5
24
7
32
9
40
11
48
13
56
15
64
17
72
19
80
21
88
23
96
25
104
27
112
29
120
31
128
33
136
35
144
37
152
39
160
41
168
43
176

해낸 제 자신한테도 너무 신기했어요!!! 진짜 재밌더라구요!!

역시 하다보면 재미를 붙일 거 같았습니다!

너무 짜릿하고 너무 행복했어요!! 😖

여기까지 올 수 있게끔 도와주신

팀원 분들, 9기 동기 분들, 튜터 님께 압도적 감사 인사를 드립니다 ㅠㅠ ❤️


오후 (14 : 00 ~ 16 : 00)

오후 시간이 되자마자 코드를 왜 이렇게 짰는지 설명 드렸어요!

컨펌 받은 문제는 이거였습니다!

#4 Hello World를 4번 출력
b = [1,2,3,4]
print(type(b))
for i in b:
    print("Hello World")
    if b != [1,2,3,4]:
        break

제가 여기서 for문을 썼죠?

for문에는 리스트 안에 있는 개수가 곧 횟수이기 때문에

굳이 break를 넣지 않아도 된다고 하시더라구요!

그러시면서 화면 공유로 예시를 들어서 설명 해주시는데 🥹

이해가 쏘옥 쏙쏙 잘 돼서 감격스러웠습니다 😖

역시! 매번 느끼지만,

모르겠을 땐 이해 될 때까지 질문하는 게 짱이에요!

 

컨펌의 결론은!

for문과 while문의 차이점을 알면 좋겠다고 하셨어요

그리고

for문과 range()함수를 같이 쓰면 편한데,

이 이유를 몸소 문제를 풀면서 깨달으면 좋을 거 같다는 말씀과 함께

숙제 4개를 더 받았습니다 ㅎㅎ;

그리고

for문을 쓸 때 in 뒤에 바로 range() 넣으면 편하다고 해주셨습니다!

다음엔 in 뒤에 바로 적용 해보려구요!

 

챙겨주시고, 마음 써주시는 튜터 님께 감사의 말씀 전하옵니다 🫶

 

저!

많이 틀릴 거구요!

많이 배워가겠습니다!

냠미~😋


오후2 (16 : 00 ~18 : 00) ~ 저녁 (19 : 00 ~ 21 : 00)

오늘은 Chat GPT가 만들어준 딕셔너리 문제들을 팀원분들과 풀어보고 해설하기로 해서

튜터 님께서 주신 문제는 내일 풀 예정이구요!

이제부터는 딕셔너리 문제를 풀어볼 겁니다!

 

문제는 Chat GPT한테 내달라고 해서 얻어냈구요

초급 ~ 고급까지 총 10문제 받았습니다

오늘은 초급 2문제 중급 2문제만 풀어보았습니다!

 

<문제 1_초급>

# 문제1 : 주어진 `student` 딕셔너리에서 학생의 이름과 점수를 출력하는 프로그램을 작성하세요.
# student = {'name': '홍길동','age': 20,'score': 85}
# 출력 예시
# 이름: 홍길동, 점수: 85

student = {
    'name': '홍길동',
    'age': 20,
    'score': 85}

print("이름:", student['name'],"점수:", student['score'])
#결괏값
이름: 홍길동 점수: 85

출력값에 "이름: 홍길동 점수: 85" 이렇게 출력해야 하잖아요

print("홍길동") 이렇게는 익숙한데 클론이 들어간 문장 만들기는 낯설더라구요

그래서

print("이름:", student['name'],"점수:", student['score'])

이렇게까지 시행착오가 많이 일어났습니다..

print("이름": student['name'],"점수": student['score'])
print("이름":, student['name'],"점수":, student['score'])
print("이름:", student['name'],"점수:", student['score'])

변천사입니다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

헷갈려 하는 모습이 눈에 잘 보여서 너무 웃기네요

어쨌든 해냈고! 알아내서 오히려 좋았습니다 😋

더 많이 틀려볼 예정입니다.

 

<문제 2_초급>

# 문제2 주어진 딕셔너리에서 score 값을 90으로 수정하고, 전체 딕셔너리를 출력하세요.
# student = {'name': '김철수','age': 22,'score': 78}
# 출력 예시 : {'name': '김철수', 'age': 22, 'score': 90}

student_2 = {'name': '김철수','age': 22,'score': 78}
student_2['score'] = 90
print(student_2)
#결괏값
{'name': '김철수', 'age': 22, 'score': 90}

우연찮게 유튜브로 "1분 파이썬 (22) 딕셔너리"를 보게 되어서

https://www.youtube.com/playlist?list=PLMsa_0kAjjrcxiSJnHNfzBN71D3zpYtkX

자주 쓰이는 메쏘드들을 막 배웠거든요!

그게 생각이 나서 바로 적용하였습니다

student_2['score'] = 90

추가하거나 수정할 때

student_2['key'] = 'value' 를 쓰면 됩니다!

 

<문제 3_중급>

# 문제 3: student 딕셔너리에 새로운 항목 major (전공)을 추가하고 출력하는 프로그램을 작성하세요. (중급)
# student = {'name': '이영희','age': 21,'score': 92}
# 출력 예시 : {'name': '이영희', 'age': 21, 'score': 92, 'major': '컴퓨터공학'}

student_3 = {'name': '이영희','age': 21,'score': 92}
student_3['major'] = '컴퓨터공학'
print(student_3)
student_3['major'] = '컴퓨터공학'

앞서  추가 및 수정 할 때 student_2['key'] = 'value' 를 쓰면 됩니다!

 

<문제 4_중급>

# 문제 4: 주어진 딕셔너리에서 age 키를 삭제하고, 삭제된 후의 딕셔너리를 출력하세요. (중급)
# student = {'name': '박민수','age': 23,'score': 88}
# 출력 예시 : {'name': '박민수', 'score': 88}

student_4 = {'name': '박민수','age': 23,'score': 88}
del student_4['age']
print(student_4)
del student_4['age']
student_4.pop('age')

삭제하기는 del 및 .pop()를 쓰면 삭제가 가능합니다!


마무리

오늘은 12시간 중 10시간 동안 문제를 풀어보았습니다

문제를 풀어보는 게 확실히 더 많이 배우게 되는 거 같아요

내일도 튜터 님께서 주시는 4문제랑 남은 딕셔너리 6문제 풀어볼 겁니다!

 

틀림으로써 배우는 과정이 너무 재밌습니다!

내일은 더 힘내볼게요 ㅎㅎㅎ

감사합니다~!

 

인사말

안녕하세요!

오늘은 아침부터 비가 보슬보슬 내려서 어두컴컴하네요

비 온 뒤, 기온도 떨어지고 급작스런 겨울이 시작될 거 같네요 🥲

모두 감기 조심하시고, 연말이니만큼 파이팅입니다!

 

오늘도 12시간 동안 공부한 내용을 포스팅해보겠습니다!

12시간이기 때문에 본문 내용이 아주 아주 깁니다!

 


요약

1. 제어문과 반복문

  1. 제어문이란?
  2. 반복문이란?
  3. 명령문과 반복문의 결합
  4. 프로그래밍에서의 중요성

2. Python 조건문

  1. If문 (True일 때)
  2. else문 (False일 때)
  3. elif문 (여러 개의 조건을 순차적으로 검사할 때)
  4. 중첩 구조문(조건문 안에 또 다른 조건문 사용)

3. Python 반복문

  1. for문 (리스트, 튜플, 문자열을 기반으로)
  2. while문 (조건문이 참인 동안 반복, 조건식이 거짓이면 종료)
  3. break문 (반복문 내에서 특정 조건이 만족되면 더 이상 반복할 필요가 없을 때 사용)
  4. continue문 (현재 반복을 건너뛰고, 다음 반복을 이어감)
  5. range() 함수 (특정 범위의 숫자 시퀀스를 생성)
  6. 중첩 반복문 (대표적 예시 : 구구단)

4. 들여 쓰기

5. 함수의 개념

6. 프로그래머스 문제 풀이


1. 제어문과 반복문

1.1 제어문이란?

  • 개념 : 프로그램의 실행 흐름을 제어하는 것
  • 특징
    1. 코드의 특정 부분을 조건에 따라 실행하거나, 실행하지 않게 할 수 있음
    2. 제어문은 프로그램을 더욱 유연하고, 다양한 상황에 대처할 수 있도록 만듦

 

1.2 반복문이란?

  • 개념 : 반복되는 작업을 자동화하는 것
    • 예시
      1. 리스트의 모든 요소를 출력 (age가 30개 이상일 때)
      2. 1부터 10까지의 합을 구할 때
    • 반복문이 없다면, 같은 코드를 여러 번 작성해야 하는 비효율적인 상황이 발생함
    • 사용처
      1. 데이터 처리 : 리스트나 배열의 모든 요소에 대해 동일한 작업을 수행할 때
      2. 자동화 작업 : 일정한 패턴의 작업을 반복해야 할 때. (100번의 반복 작업을 수행해야 하는 경우)
      3. 조건에 따른 반복 : 특정 조건이 만족될 때까지 작업을 반복하는 경우 (사용자가 올바른 값을 입력할 때까지 계속 입력을 요구하는 경우)

 

1.3 제어문과 반복문의 결합

  • 특징
    1. 더욱 복잡한 논리 흐름을 만들 수 있음
      • 반복문 앞에서 조건문을 사용하여 특정 조건을 만족할 때만 반복을 계속하거나, 반복을 중단할 수 있음
  • 사용처
    1. 조건부 반복 : 특정 조건이 만족될 때까지 반복을 실행
    2. 반복 중 조건 처리 : 반복 과정 중 조건을 체크하여 특정 작업을 수행하거나, 반복을 중단하는 기능을 추가.

 

1.4 프로그래밍에서의 중요성

  1. 유연성 : 제어문과 반복문을 사용하면 프로그램이 다양한 상황에 대처할 수 있음
  2. 코드 재사용 : 반복문을 통해 동일한 작업을 여러 번 반복할 수 있으므로, 코드의 길이를 줄이고 유지보수를 쉽게 할 수 있음
  3. 자동화 : 반복문을 활용하여 대량의 데이터 처리나 반복 작업을 자동화할 수 있음

2. Python 조건문

  • 개념 
    • 프로그램에서 주어진 조건에 따라 특정 코드 블록을 실행하거나 건너뛰는 기능을 함
    • 조건문을 통해 프로그램은 단순한 순차적 실행을 넘어서 결정을 할 수 있게 됨

2.1 If문

  • if 뒤에는 조건이 오고, 조건이 참(True)이면 해당 코드 블록이 실행됨.
if 조건식:
	실행할 코드
#If문
age = 20
if age > 19:
     print("성인입니다")
#결괏값 = 성인입니다

여기서 포인트가 되는 것은

하나의 코드를 입력 후 들여 쓰기를 해서 Print()를 하게 된다면

해당 코드에 관한 Print()가 됩니다!

들여 쓰기를 유용히 쓰면 될 거 같네요!

 

  • if문 예시
#If문 실습
## 사용자로부터 나이를 입력받아 성인인지 아닌지 판단하는 프로그램
age = int(input("나이를 입력하세요: "))

반드시 Int()를 입력하여야 문자열을 정수로 변환해 주기 때문에 꼭!! 입력하셔야 합니다!

 

  • 실습
#If문 실습
age = 20
if age >= 18:
     print("성인입니다")
#결괏값 = 성인입니다

 

2.2 else문

  • 개념 : else문은 if문의 조건이 거짓(False) 일 때 실행되는 코드 블록
  • else문 예시
if 조건식 :
 실행할 코드 (조건이 참일 때)
 else :
  실행할 코드 (조건이 거짓일 때)

 

  • 실습
#If + else문 실습
age = 17
if age >= 18:
     print("성인입니다")
else:
     print("미성년자입니다.")
#결괏값 = 미성년자입니다.

 

2.3 elif문

  • 특징
    1. 여러 개의 조건을 순차적으로 검사할 때 사용함
    2. if문 다음에 여러 개의 elif문을 사용하여 각 조건을 순서대로 검사함
    3. 처음으로 참인 조건이 발견되면 해당 코드 블록이 실행됨
  • 주의점
    • 큰 값이 위로 올라와야 하며 밑으로 내려갈수록 작은 값이어야 함!
  • elif문 예시
if 조건식1:
	실행할 코드1
elif 조건식2:
	실행할 코드2
elif 조건식3:
	실행할 코드3
else:
	실행할 코드4 (모든 조건이 거짓일 때)

 

  • 실습
#If + elif + else문 실습
age = 31
if age > 19:
    print("성인입니다.")
elif age > 30:
    print("확실한 성인입니다.")
else:
    print("미성년자입니다.")
#결괏값 = 성인입니다.

age가 31인데 결괏값이 "확실한 성인입니다."가 나오지 않았죠?

왜냐하면

elif문은 순차적으로 검사하기 때문에 그렇습니다.

 

그렇기 때문에 이렇게 수정해 준다면

#If + elif + else문 실습2 
age = 31
if age > 30:
    print("확실한 성인입니다.")
elif age > 19:
    print("성인입니다.")
else:
    print("미성년자입니다.")
#결괏값 = 확실한 성인입니다.

원하는 "확실한 성인입니다"가 도출됩니다!

 

2.4 중첩 구조문

  • 개념 : 조건문 안에 또 다른 조건문을 사용할 경우
  • 중첩 구조문 예시
#중첩 구조문
if 조건식1:
	if 조건식2:
    	실행할 코드1
    else:
    	실행할 코드2
else:
	실행할 코드3

 

  • 실습
#중첩 구조문1
age = 25
name = "배민경"

if age > 20:
    if name == "배민경":
        print("그래요, 저예요!")
#결괏값 = 그래요, 저예요!
#중첩 구조문2
age = 25
name = "김민경"

if age > 20:
    if name == "배민경":
        print("그래요, 저예요!")
    else:
        print("없어요")
#결괏값 = 없어요

중첩 구조문을 개념으로만 들었을 땐 짜증 났는데

직접 해보니까 재밌네요 😋

 

  • 중첩 구조문 심화 실습
#사용자로부터 나이와 학생 여부를 입력받아 상태를 출력하는 프로그램
age = int(input("나이를 입력하세요: "))
is_student = input("학생입니까? (yes/no): ")

if age >= 18:
	if is_student.lower() == "yes";
    	print("성인이며, 학생입니다.")
    else:
    	print("성인이며, 학생이 아닙니다.")
else:
	if is_student.lower() == "yes"
    	print("미성년자이며, 학생입니다.")
    else:
    	print("미성년자이며, 학생이 아닙니다.")

이 프로그램은 나이와 학생 여부에 따라 다양한 메시지를 출력하고, 소문자로 출력합니다.

 

  • 추가 개념
#and를 써서 똑같은 결괏값 도출하기
age = 25
name = "배민경"
if age > 20 and name == "배민경":
    print("그래요, 저예요!")
#결괏값 = 그래요, 저예요!

이렇게 and를 써서도 도출해 낼 수 있다는 것도 배웠습니다!


3. Python 반복문

  • 개념 : 프로그램 내에서 동일한 코드 블록을 여러 번 실행할 수 있도록 하는 구조
  • 특징
    1. 코드의 중복을 줄이고, 효율적인 프로그램을 작성할 수 있음
    2. 가장 기본적인 반복문은 for문과 while문임

 

3.1 for문

  • 개념 : 컬렉션(리스트, 튜플, 문자열)을 순차적으로 순회하여 코드 블록을 실행
#반복문
## for문 (컬렉션 기반)
for 변수 in 컬렉션:
	실행할 코드

 

  • for문 예시
#반복문
## for문 (컬렉션 기반)
list_sample = [2,4,6,8,10]

for element in list_sample:
    print(element)
#결괏값 = #2 4 6 8 10
## for문 (문자열)
list_sample_2 = "안녕"

for a in list_sample_2:
    print(a)
#결괏값 = 안 녕

그리고!

컬렉션 명 이름이 아니라 컬렉션 그 자체가 들어가도 결괏값이 도출됩니다!

또한 결괏값이 각각 낱개로 도출되더라구요

신기했습니다 🤨

 

  • for문 실습
## for문 (제곱 실습)
numbers = [5,6,7]

for number in numbers:
    square = number ** 2
    print(f"{number}의 제곱은 {square}입니다.")
#결괏값
5의 제곱은 25입니다.
6의 제곱은 36입니다.
7의 제곱은 49입니다.

 

3.2 while문

  • 개념 : 조건식이 인 동안 반복해서 코드 블록을 실행
  • 특징 : 조건식이 거짓이 되면 반복문이 종료됨.
## while문 (조건식이 참일 때 실행, 거짓이면 종료)
while 조건식:
	실행할 코드

 

  • while문 예시
## while문 (조건식이 참인 동안 실행됨, 거짓이 되면 종료됨)
age = 15

while age < 20:
    print("나이를 먹었습니다")

이 상태에서 실행을 한다면 무한 동력으로 실행된다고 하더라구요

이런 걸 활용할 때는 게임 서버를 운영할 때 쓰이는 구조라는 걸 배웠습니다!

 

하지만, 저희는 서버를 운영하는 것이 아니라

공부하기 위함이기 때문에 좀 더 붙여주었습니다.

## while문 (조건식이 참인 동안 실행됨, 거짓이 되면 종료됨)
age = 15

while age < 20:
    print("나이를 먹었습니다", age)
    age = age + 1
#결괏값
나이를 먹었습니다 15
나이를 먹었습니다 16
나이를 먹었습니다 17
나이를 먹었습니다 18
나이를 먹었습니다 19

언젠가 멈추어야 하기 때문에 거짓된 값을  만들어주어야 합니다!

재밌어요!

정말 코드를 자세히 쓸 때마다 결괏값이 달라진다는 게

너무 재밌습니다 😁

 

  • while문 실습
## while문 실습1
age = 15
while age <= 20:
    print(age)
    age += 1
15
16
17
18
19
20
## while문 실습2
age = 15
while age <= 20:
    age += 1
    print(age)
16
17
18
19
20
21

결괏값이 이렇게 두 가지로 나오게 되었습니다

이게 참이 되는 조건문이랑

조건문이 거짓이 되는 문장의

위치에 따라 결괏값이 달라지더라구요 

이 점을 주의해서 코드를 활용해야겠습니다!

 

  • 다르게 표현해 보기 (list)
## while을 다르게 표현해보기
start_position = 0
while start_position < len(list_sample):
    print(list_sample[start_position])
    start_position += 1
2
4
6
8
10

 

3.3 break문

  • 개념 : 반복문을 즉시 종료시킴
  • 특징 : 반복문 내에서 특정 조건이 만족되면 더 이상 반복할 필요가 없을 때 사용함

 

  • break문 예시
## break문 (반복문 자체를 멈추고 싶을 때)
a = 0

while a < 100:
    condition = int(input("10을 입력하면 출력이 안 돼요!"))
    if condition == 10:
        break
    a += 1
10을 입력하면 출력이 안 돼요!1
10을 입력하면 출력이 안 돼요!2
10을 입력하면 출력이 안 돼요!3
10을 입력하면 출력이 안 돼요!10
baeminkyung@baemingyeong-ui-MacBookAir Desktop %

break는 10을 입력하자마자 반복문이 끝나버렸습니다.

아예 반복문을 끝내고 싶을 때 반복문 밑에

break를 써주시면 됩니다!

  • for문에서도 사용 가능한 break
### for문에서도 사용 가능한 break
list_sample_3 = [1,2,3,4,5,6]

for i in list_sample_3:
    print(i)
    if i == 4:
        break
1
2
3
4

for문을 써도 적용이 가능하네요!

그냥 반복문 전체에서 사용 가능하기 때문에

여기저기 다 붙여 쓰시면 됩니다!

 

3.4 continue문

  • 개념 : 현재 반복을 건너뛰고, 다음 반복을 이어감
  • 특징 : 특정 조건에서 코드 블록의 일부를 실행하지 않고 다음 반복으로 넘어가고 싶을 때 사용

 

  • continue문 예시
## continue문 (특정 조건이 들어와도 다시 반복)
a = 0

while a < 100:
    condition = int(input("10을 입력하면 출력이 안 돼요!"))
    if condition == 10:
        continue
    print("hi")
    a += 1
10을 입력하면 출력이 안 돼요!10
10을 입력하면 출력이 안 돼요!10
10을 입력하면 출력이 안 돼요!2
hi
10을 입력하면 출력이 안 돼요!9
hi
10을 입력하면 출력이 안 돼요!10
10을 입력하면 출력이 안 돼요!

반면에 continue를 쓰게 되면 계속 반복문이 반복되는 걸 알 수 있습니다

break는 단어 그대로 끝! 내는 거고

continue도 단어 그대로 이어져 가는 거네요! 😉

 

3.5 range() 함수

  • 개념 : 특정 범위의 숫자 시퀀스를 생성함
  • 특징
    1. for문과 함께 자주 사용됨
    2. 반복 횟수를 지정할 때 유용함
# range() : 특정 범위의 숫자 시퀀스 생성
for i in range(시작, 종료, 단계):
	실행할 코드
  • 시작 : 시작할 숫자 (기본값 0).
  • 종료 : 종료할 숫자 (해당 숫자는 포함되지 않음).
  • 단계 : 숫자 간의 간격 (기본값 1).
  • range() 예시
# range()_1
for e in range(0,10,2):
    print(e)
2
4
6
8

이번 거는 range() 함수 안에 3개의 값 모두 서술한 경우이고,

# range()_2
for e in range(10):
    print(e)
0
1
2
3
4
5
6
7
8
9

이번 거는 range() 함수에 한 가지 값만 넣었더니

0부터 9까지 출력되었습니다!

한 가지 값만 넣으면 그 값이 "종료"값이 되네요! 😮

 

  • 몇 번째의 값인지 확인해 보는 코드
# range()_3
for e in range(len(list_sample_3)):
    print(list_sample_3[e])
    print(e,"번째")
1
0 번째
2
1 번째
3
2 번째
4
3 번째
5
4 번째
6
5 번째

list_sample_3에는 총 6개의 값이 들어가 있었음을 알 수 있네요!

재밌습니다 🤗

좀 더 보기 좋게 출력하려면

# range()_4
for e, f in enumerate(list_sample_3):
    print(e,f)
0 1
1 2
2 3
3 4
4 5
5 6

enumerate()를 써주시면 더 가독성이 좋아지게 도출됩니다!

 

3.6 중첩 반복문

  • 개념 : 반복분 안에 또 다른 반복문을 사용하는 것(=Nested Loop)
  • 특징
    1. 2차원 데이터 (예 : 행렬)를 처리할 때 씀
    2. 복잡한 반복 작업을 수행할 때 유용함
# 중첩 반복문
for i in range(첫 번째 범위):
	for j in range(두 번째 범위):
    	실행할 코드

 

  • 중첩 반복문 예시 (구구단)
# 중첩 반복문 (구구단)
for i in range(2,3):
    print(f"{i}단:")
    for j in range(1,10):
      print(f"{i} x {j} = {i*j}")
    print()
2단:
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18

오늘 한 것 중에 제일 재밌었던

결괏값이었습니다 🤣


4. 들여 쓰기

  • 개념 : 코드의 각 줄을 왼쪽에서 오른쪽으로 일정한 간격만큼 일어내는 것
  • 특징
    1. Python에서 들여 쓰기는 필수적
    2. Python은 들여 쓰기를 통해 코드 블록의 시작과 끝을 구분함
    3. 들여 쓰기가 잘못되면, Python 인터프리터가 코드의 구조를 이해하지 못하여 오류를 발생시킴
    4. 조건문, 반복문, 함수 등의 모든 구조적 코드에서 필수적으로 사용됨
    5. 들여쓰기가 오류가 생기면 indentationError라고 뜸
  • 규칙 
    1. 일관된 들여쓰기
    2. 공백 4칸이 표준
    3. 탭과 공백(띄어쓰기)의 혼용 금지
  • 들여쓰기 예시
#들여쓰기 예시

if True:
	print("이 코드는 실행됩니다.")
#결괏값 = 이 코드는 실행됩니다.

 

<조건문과 들여 쓰기>

# if문과 else문, elif문도 마찬가지

if 조건식:
    실행할 코드  # 조건이 참일 때 실행
else:
    실행할 코드  # 조건이 거짓일 때 실행

 

<반복문과 들여 쓰기>

# for문과 while문

for 변수 in 컬렉션:
    실행할 코드  # 반복할 코드 블록

while 조건식:
    실행할 코드  # 조건이 참인 동안 반복될 코드 블록

 

<함수 정의와 들여 쓰기>

# def 함수이름(매개변수)

def 함수이름(매개변수):
    실행할 코드  # 함수 본문

5. 함수의 개념

  • 개념 : 특정 작업을 수행하는 코드 블록을 정의하는 프로그래밍 구성 요소
  • 특징
    1. 함수는 각기 이름을 가지고 있고, 필요할 때마다 그 이름을 호출하여 코드 실행
    2. 함수는 입력값(매개변수)을 받아 처리하고, 결괏값을 반환할 수 있음
  • 함수의 사용처
    1. 반복되는 코드의 재사용
    2. 코드의 모듈화
      • 이때 모듈화란?
        • 프로그램을 여러 개의 작은 함수로 분할하여, 각 함수가 하나의 특정한 작업만 수행하도록 하는 것
    3. 복잡한 작업의 분할
  • 장점
    1. 코드 재사용성
    2. 가독성
    3. 유지보수 용이성
    4. 테스트 및 디버깅 용이성
  • 주의점
    1. 함수는 단일 작업을 수행하도록 설계해야 함
    2. 매개변수 수를 적절히 유지
    3. 함수 이름은 기능을 명확히 표현
    4. 부작용을 최소화

6. 프로그래머스 문제 풀이

처음에 못 풀었습니다 🙉

 

3번째 줄에서 멈추었는데요

\n을 입력하면 Enter 역할을 한다는 걸 배워서

3번째 줄에 \n을 입력하여 문제를 해결하였습니다 🙈

 

두 번째 문제는 무난히 풀었구요

 

마지막 문제 내용입니다

 

단순하게 생각해서 이렇게 입력하였더니

틀렸다고 해서

 

input()의 의미가 사용자가 입력하는 값을 넣겠다는 거니까

설마..? 하고

그냥 print(str) 입력하니까

 

정답이라고 떠서 해결하였습니다 👍🏻


마무리

오늘 정말 많이 공부한 거 같아요!!

정말 기네요! 😹

 

확실히 프로그래머에서 문제를 풀어봤기 때문에

저의 부족한 점과 이해 정도를 알게 됐어요!

프로그래머 해보라고 팀원분이 알려주셨는데

해보길 정말 잘했어요 🥰

 

개념을 공부한 것도 좋지만

문제를 먼저 켜보고 해결해 내는 게

저랑 맞는 공부법인 거 같아요!

덕분에 튜더 님이랑 다른 팀원분들과 소통을 많이 할 수 있어서

좋았습니다 🥰

 

내일도 문제 많이 풀어서 가져오겠습니다!

 

감사합니다~!

감기 조심하세요!

+ Recent posts