- 도전과제 1번
- 도전과제 2번
- 도전 과제 3번
- 총평
- 새롭게 알게 된것
- 까먹은 것
- 궁굼한 것
도전과제 1번
숫자 맞추기 게임 (선택)
추가 도전 과제
- 플레이어가 입력한 숫자가 범위를 벗어날 경우, 적절한 안내 메시지를 출력하여 유효한 범위 내의 숫자를 입력하도록 유도하세요.
if user_num > 10: #입력 값이 10보다 클 때 작동
print(f'숫자가 너무 큽니다. 10 이하의 숫자만 입력해주세요.') #위 조건이 충족 되었을 때 출력 되는 메세지 작성
- 플레이어가 게임을 반복하고 싶을 경우, 게임 재시작 여부를 묻고 그에 따라 게임을 초기화하거나 종료하는 기능을 추가하세요.
restart = input('다시 시작하겟습니까? (y/n)') #다시 시작여부 입력 받는 restart 생성
if restart != 'y': #y가 아닐 때 작동
print('게임이 끝났습니다.') #위 조건에 맞으면 출력 되는 메세지
break #조건 충족 시 멈춤
도전과제 2번
추가 도전 과제
- Person 클래스 생성자에서 사용자의 성별 입력값에 대한 유효성 검사를 추가해주세요.
while True:
gender = input('성별을 입력해주세요 (male OR female): ').strip().lower() # 소문자로 변환하여 비교를 용이하게 함
if gender == 'male' or gender == 'female': # gender 조건
break
else:
print('male과 female 중 하나만 입력해주세요.')
- Person 클래스에 나잇대에 맞는 인사 메시지를 출력할 수 있도록 greet() 함수를 추가해주세요
def greet(self): #조건식에 따라 성인 미성년자를 구분해서 인사하는 함수 추가
if age >= 20:
print("안녕하세요!name님 성인이군요!!")
else:
print("안녕하세요!name님 미성년자군요!!")
위 코드를 실행 시킬 때
person1.display(), person1.greet() 각각 호출해서 함수를 작동 시켜야하는데 한번에 작동 시키는 방법이있을까?
도전 과제 3번
추가 도전 과제
1. Python 라이브러리 함수를 사용하여 인구 데이터(pop_kor.csv) 파일을 불러오고, DataFrame을 출력해주세요.
- Quiz에서 수행한 DataFrame의 구별 index를 기준으로 merge를 할 것이므로, index를 셋팅해서 불러와 주세요.
pop_kor_df = pd.read_csv("pop_kor.csv", index_col='구별', encoding='utf-8')
#csv파일 가져오기, '구별' 열을 인덱스 지정, 한글파일 읽어오기
df_csv = pd.DataFrame(pop_kor_df)
#df_csv라는 데이터 프레임 생성
df_csv2 = df_csv.dropna()
df2 = df.dropna()
#결측치 존재하는 행 제거
2. join 을 사용하여 Quiz에서 수행한 DataFrame과 인구 데이터 DataFrame을 merge하고, DataFrame을 출력해주세요.
df3 = df2.join(df_csv2)
#df2와 df_csv2를 join해서 df3 생성
df3.dropna()
#df3에서 결측치가 존재해 sort가 진행 되지않아 제거
3. 새롭게 merge 된 DataFrame에서 검거율 기준으로 오름차순 정렬 후, DataFrame을 출력해주세요.
sort_df = df3.sort_values(by = '검거율',ascending=True)
#검거율을 기준으로 정렬
총평
도전과제 1-1: 간단한 조건문은 쓰는데 익숙해지고있다.
도전과제 1-2: 조건을 추가 할 때 위치는 어느정도 감을 잡은 듯. 약간 복잡해져도 잘 모르겟어서 검색을 통해 진행했다. 코드 전체를 보는 감각이 부족하다.
도전과제 2-1번: 어제 걸었던 조건식으로 해결 가능할 것 같아 건들이지 않았다.
도전과제 2-2번: 처음에는 greet함수 문법이 생각 나지 않아 검색해서 첫 줄 문법만 보고
작성하였고 매개변수인 self, 조건식, print문은 직접 작성했다.
도전과제 3-1번: 데이터 불러오기는 익숙해 져서 코드를 보지 않아도 작성 가능해졌다..
도전과제 3-2번: 데이터끼리 병합하는 단계는 강의보고 따라 했었지만 기억나지 않았고 검색을 통해 작성하였다.
병합하는 방법과 예시들이 많았기에 실습을 더 진행해 보아야 할 것 같다.
도전과제 3-3번: 결측치 확인을 하지 않아 진행이 안되었지만 결측치 제거 후 진행이 깔끔해짐
결측치 처리의 중요성을 인지 했습니다.
총평: 조금씩 익숙해지고 있지만 문법, 함수 / 메서드의 기능 등 부족한 부분이 많다.
새롭게 알게 된것
1. 파일을 read 할 때 인덱스를 정해서 가져오는 방법
df = pd.read_csv('test.csv', index_col = "")
#index_col = " "과 숫자로 가져오는 방법이있다.
2. join 사용 문법
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
- other: 결합할 다른 데이터프레임
- on: 결합할 기준이 되는 열이나 인덱스 (기본값은 인덱스)
- how: 결합 방식 (left, right, outer, inner)
- lsuffix, rsuffix: 동일한 열 이름이 있을 때 구분을 위한 접미사
- sort: 결합된 결과를 정렬할지 여부 (기본값은 False)
3. `\t`는 탭을 의미
4. `\n'`은 줄바꿈을 의미
5. 같은 줄에 여러 함수 쓰는 법
print("first");print("second")
6. 줄바꿈 없이 출력 방법 end = ""
print("first", end=""); print("second")
7. 바인딩이란
변수 속성을 이름, 자료형, 자료값으로 할당 하는 것
8. 변수를 출력할 때 기호 붙이기(s와t는변수)
print(s+"!",t)
9. 슬라이싱의 기능
string = "홀짝홀짝홀짝"
print(string[::2])
시작인덱스:끝인덱스:오프셋(오프셋은 몇칸씩 건너 뛸지 지정)
(오프셋을 -1로 지정하면 문자열을 뒤집어서 출력 한다.)
10. 문자열에 값 넣기 % formatting
포맷 코드설명
%s | 문자열 (String) |
%d | 정수 (Integer) |
%f | 부동소수점 (Float) |
%x | 16진수 (Hexadecimal) |
%o | 8진수 (Octal) |
%% | 퍼센트 기호 출력 |
문자열 포맷팅 ex)
name = "Alice"
greeting = "Hello, %s!" % name
print(greeting) # Hello, Alice!
2가지 다른 문자열 포맷팅 ex)
message = '이름: %s, 나이: %d' %(name, age)
11. 문자열에 값 넣기 .format()
print("이름: {} 나이: {}".format(name, age))
12. 문자열에 값 넣기 f"
print(f"이름: {name} 나이: {age}")
13. 첫글자만 대문자로 .capitalize()
#첫 글자에 숫자나 기호가 있을 때는 변화 없음
14. 특정 접미사로 끝나는지 확인 .endswith()
string.endswith(suffix[, start[, end]])
- suffix: 확인할 접미사 문자열 또는 문자열의 튜플.
- start (선택적): 검색을 시작할 위치(인덱스).
- end (선택적): 검색을 끝낼 위치(인덱스).
15. 특정 접두사로 확인
file_name.startswith("2020")
까먹은 것
1. merge 사용 문법
DataFrame.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, suffixes=('_x', '_y'))
- right: 결합할 다른 데이터프레임.
- how: 조인 방식 (default: 'inner').
- 'left': 왼쪽 데이터프레임을 기준으로 결합.
- 'right': 오른쪽 데이터프레임을 기준으로 결합.
- 'inner': 교집합 (공통된 값만 결합).
- 'outer': 합집합 (모든 값 결합, 일치하지 않는 값은 NaN).
- on: 결합할 공통 열의 이름 (열 이름이 같을 때 사용).
- left_on: 왼쪽 데이터프레임에서 결합할 열 이름.
- right_on: 오른쪽 데이터프레임에서 결합할 열 이름.
- left_index, right_index: 인덱스를 기준으로 결합할지 여부.
- suffixes: 동일한 열 이름에 대한 접미사 (기본값: ('_x', '_y')).
2. 변수에서 글자 지정해서 출력
letters = 'python'
print(letters[0], letters[2])
3. replace 메서드
text = "banana"
new_text = text.replace("a", "o") # new_text = text.replace("a", "o", 1) # 1번만 치환
print(new_text) # "bonono" # "bonana"
text = "apples are red, apples are sweet"
new_text = text.replace("apples", "oranges") # ("apples", "oranges",1)을 하면 1번만 치환
print(new_text) # "oranges are red, oranges are sweet" # "oranges are red, apples are sweet"
4. 문자열을 나누어 리스트로 반환 .split()
text.split(sep=None, maxsplit=-1)
- sep: 문자열을 분리할 때 사용할 구분자. (기본값은 공백)
- maxsplit: 분리할 최대 횟수. (기본값은 -1, 즉 제한 없음)
4-1 공백 기준 분리 # words = text.split()
4-2 특정 구분자를 기준으로 분리 # fruits = text.split(",")
4-3 최대 분리 횟수 지정 # parts = text.split(", ", 2) => ['one', 'two', 'three, four']
4-4 한 글자씩 분리 list로 분리하는게 적합하다. # letters = list(text)
5. .apply() 적용 방법
apply(func, axis=0, raw=False, result_type=None, args=(), **kwds)
- func: 적용할 함수. 직접 정의한 함수나 내장 함수를 사용할 수 있습니다.
- axis: 함수를 적용할 축을 선택.
- 0 (기본값): 열(column) 단위로 함수 적용.
- 1: 행(row) 단위로 함수 적용.
- raw: True일 경우, 행이나 열을 ndarray로 전달. (기본값은 False)
- result_type: 결과 형식을 지정 (expand, reduce 등).
- args: 추가적인 인자를 전달.
6. 대/소문자 upper()/lower()
대문자로 바꾸는 ex)
ticker = "btc_krw"
ticker1 = ticker.upper()
print(ticker1)
입력값을 대/소문자로 바꿔서 받게하는 ex)
data = input("적어 봐").upper() / .lower()
7. 리스트 사이에 요소 넣기 .insert()
movie_rank = ['닥터 스트레인지', '스플릿', '럭키', '배트맨']
movie_rank.insert(1,'슈퍼맨')
#(위치 지정, 넣을 요소 지정)
궁굼한 것
1번은 y가 아닌 다른 어떤 문자나 숫자가 와도 프로그램이 종료 되는데 해결 방법을 못찾음
1번에서 숫자가 아닌 다른 문자나 공백이 써졌을때를 대비한 조건문도 넣어보자
2번은 person1.display(), person1.greet() 각각 호출해서 함수를 작동 시켜야하는데 한번에 작동 시키는 방법이있을까?
3번은 정확한 건지 모르겟음
'TIL' 카테고리의 다른 글
내일배움캠프 12일차 TIL + 지도학습, GITHUB (0) | 2024.10.15 |
---|---|
내일배움캠프 11일차 TIL + 머신러닝 (1) | 2024.10.14 |
내일배움캠프 9일차 TIL + 개인과제 2번 3번, 알게 된 것들/까먹은 것들 (2) | 2024.10.10 |
내일배움캠프 8일차 TIL + 판다스 심화 (3) | 2024.10.08 |
내일배움캠프 weekend 1일차 TIL + 데이터 활용 (2) | 2024.10.06 |