일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 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 |
- GA4
- 머신러닝
- 최종 프로젝트
- 시각화
- 서브쿼리
- streamlit
- 태블로
- Python
- 프로젝트
- 전처리
- 데이터 분석
- jd
- 클러스터링
- SQL
- 군집화
- data analyst
- lambda
- 프롬프트 엔지니어링
- Chat GPT
- pandas
- da
- 데이터분석
- 히트맵
- If
- SQLD
- 기초프로젝트
- cross join
- 기초통계
- 크롤링
- 팀프로젝트
- Today
- Total
세조목
PYTHON 정리(개인과제 오답 풀이)(24.01.10) 본문
Python 개인과제 오답 풀이
Q.2
# 출제자의 의도
1. 문자열 처리방법을 알아내고, 메소드를 활용
● str.split
2. domain에 .이 있는 것을 확인하는 방법
● in
3. 문제 설명에 따르면 .com도 옳은 도메인으로 판단
4. (Advanced)re모듈의 정규표현식을 이용해 판단할수도 있다.
email_list = [
"example@example.com",
"wrongemail@.com",
"anotherexample.com",
"correct@email.co.uk"
]
for email in email_list:
split_list = email.split('@')
if len(split_list) == 1:
print(f'{email}은 유효하지 않은 이메일입니다.')
else:
if '.' in split_list[1]:
print(f'{email}은 유효한 이메일입니다.')
내가 놓친 부분
1. 두번째 이메일도 나는 유효하지 않다고 나오게끔 코드를 작성했다.
elif '@.' in i:
print(f'{i}는 유효하지 않은 이메일 주소입니다.')
- 상식적으로는 '@.com'이 올바른 도메인은 아니지만 문제에서는 '도메인명은 '.'을 포함한 하나 이상의 문자로 구성되어야 합니다.'라는 부분이 있었기 때문에 'wrongemail@.com' 도 유효한 이메일이 된다(아래 이미지 참고).
- 바로 위에 있는 코드는 내가 작성한 코드로, '@.'를 가지고 있는 element는 유효하지 않다고 출력되게끔 해버렸다.
2. split 메소드를 활용한 문자열 처리방법을 확인하고자 했는데 나는 split 메소드를 활용하지 않고
'@'가 element에 있는지 없는지를 확인했음
for email in email_list:
split_list = email.split('@')
if len(split_list) == 1:
print(f'{email}은 유효하지 않은 이메일입니다.')
else:
if '.' in split_list[1]:
print(f'{email}은 유효한 이메일입니다.')
위 코드는 정답 코드로 split 메소드를 활용해서 하나의 도메인을 두 개로 나눠서(split해서) 리스트의 전체 길이가 2가 되도록 만든 것을 알 수 있다.
def validate_emails(email_list):
for i in email_list:
if '@' not in i:
print(f'{i}는 유효하지 않은 이메일 주소입니다.')
elif '@.' in i:
print(f'{i}는 유효하지 않은 이메일 주소입니다.')
else:
print(f'{i}는 유효한 이메일 주소입니다.')
그러나 나의 경우 위 코드에서 확인할수 있는것처럼 '@', '@.'이 email_list의 원소에 들어있는지 없는지를 하나씩 확인하는 코드를 작성했다.
Q.3
# 출제자의 의도
1. 단순한 반복문과 조건문을 통해 체크할 수 있다.
2. 자료를 적절히 선정해야한다. 자료형의 중요성
- set자료형을 통해 쉽게 접근하려고 했다면 lisa의 동명이인의 등장으로 원활하게 구현하기 어려울 수 있다.
- disctionary를 통해 count할 수 있다.
- (Advanced)Counter Module을 이용해 구현할 수도 있다.
튜터님 답안
participant = ["mike", "lisa", "tom", "lisa"]
completion = ["tom", "mike", "lisa"]
def find_non_completer(participant, completion):
my_dict = {}
for name in participant:
my_dict[name] = my_dict.get(name, 0) + 1
for name2 in completion:
my_dict[name2] = my_dict[name2] - 1
for name3 in my_dict:
if my_dict[name3] == 1:
print(name3)
find_non_completer(participant, completion)
나의 답안
def find_non_completer(participant, completion):
for i in completion:
for j in participant:
if i == j:
participant.remove(j)
print(participant)
participant = ["mike", "lisa", "tom", "lisa"]
completion = ["tom", "mike", "lisa"]
find_non_completer(participant, completion)
정답은 동일하게 나왔으나 출제자의 의도인 dictionary를 통해 count하지는 못했다.
튜터님의 경우 get메소드를 사용하셨는데
get(name, 0)는 딕셔너리에 name에 해당하는 element가 없으면 0을 반환한다는 의미이다.
participant 리스트에 mike, lisa(2번), tom이 있는데
mike의 경우 my_dict 리스트에 존재하지 않기때문에 0이 반환되어 0+1의 결과값인 1이 들어가고
lisa의 경우는 처음 비교할 때는 my_dict 리스트에 존재하지 않으므로 mike와 동일하게 1이 들어가지만
그 다음 lisa가 한 번 더 비교될 때는 my_dict 리스트에 존재하기때문에 lisa의 value인 1에 +1을 해서 2가 들어가게되며
마지막 tom의 경우는 mike의 경우와 동일하다.
Q.4
# 출제자의 의도
1. 클래스 개념과 메소드를 생성하는 방법에 대한 이해
2. init 이니셜을 생성하는 것이 기본이나 수준을 고려하여 생략
튜터님 답안
class customer():
def join_customer(self, name, email, point):
self.name = name
self.email = email
self.point = point
def add_points(self, plus):
self.point = self.point + plus
print(f'정상적으로 추가되었습니다. 현재 포인트는 {self.point}입니다.')
def reduce_points(self, minus):
if minus > self.point:
print(f'포인트가 부족합니다. 현재 포인트는 {self.point}입니다.')
else:
self.point = self.point - minus
print(f'정상적으로 차감되었습니다. 현재 포인트는 {self.point}입니다.')
c = customer()
c.join_customer('Alice', 'alice@example.com', 50)
c.add_points(50)
c.reduce_points(20)
c.reduce_points(150)
나의 답안
class customer():
def join_customer(self, name, email, point):
self.name = name
self.email = email
self.point = point
def add_points(self, plus):
self.point = self.point + plus
print(self.point)
def reduce_points(self, minus):
self.point = self.point - minus
print(abs(self.point))
c = customer()
c.join_customer('Alice', 'alice@example.com', 50)
c.add_points(50)
c.reduce_points(20)
c.reduce_points(150)
클래스를 활용할 수 있는지를 확인하고자했던 문제였기에
튜터님의 답안과 나의 답안이 큰 차이는 없었지만
튜터님 답안의 경우
'정상적으로 추가되었습니다. 현재 포인트는 ~~점입니다.'
와 같은 안내 메시지를 추가했다는 점에서 나의 답안보다 훨씬 재미있었던 것 같다.
'데이터 분석 공부 > Python' 카테고리의 다른 글
PYTHON 정리(IDE(VSCode, Pycharm등)에서의 라이브러리 사용을 위한 라이브러리 설치)(24.01.12) (0) | 2024.01.12 |
---|---|
PYTHON 정리(원하는 row만 제거, 컬럼 순서 바꾸기, 컬럼명 변경)(24.01.10) (0) | 2024.01.10 |
PYTHON 정리(알고리즘, 큐 예제)(24.01.08) (0) | 2024.01.08 |
PYTHON 정리(점프투파이썬 - 함수: 파일 읽고 쓰기)(24.01.07) (1) | 2024.01.07 |
PYTHON 정리(점프투파이썬 - 함수: 사용자 입출력)(24.01.07) (1) | 2024.01.07 |