2022.07.11~2022.07.15
구름 X 전주 ict 이노베이션 스퀘어의 온라인 코딩교육 내용을 정리하였습니다.
이번 주의 주된 내용이 저번주에 배운 크롤링, 스크레이핑 활용이라 다수 생략하였습니다.
그러다보니 내용이 정말 없습니다...
웹 제어 함수(Web Control Function)
1. 마우스 제어- 클릭(element.click()), submit(element.submit())
2. 키보드 제어- element.send_keys(text)(엔터 입력 시 element.send_keys(Keys.Enter))
#0 포함한 두자리숫자 만들기
f'{1:02}', f'{1:04}' #('01', '0001')
#판다스를 활용한 날짜 생성
pd.date_range('2022-07-15', '2022-07-20') #freq의 default='D'(Day)
#['2022-07-15', '2022-07-16', '2022-07-17', '2022-07-18', '2022-07-19', '2022-07-20']
https://school.programmers.co.kr/learn/courses/30/lessons/72410
def solution(new_id):
#1: new_id의 모든 대문자를 대응되는 소문자로 치환합니다.
answer = new_id.lower()
#2: new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거합니다.
for i in answer:
if i not in 'abcdefghijklmnopqrstuvwxyz1234567890-_.':
answer = answer.replace(i, '')
#3: new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환합니다.
while '..' in answer:
answer = answer.replace('..', '.')
#4: new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거합니다.
if answer.startswith('.'):
answer = answer[1:]
if answer.endswith('.'):
answer = answer[:-1]
#5: new_id가 빈 문자열이라면, new_id에 "a"를 대입합니다.
if len(answer)==0:
answer = "a"
#6: new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거합니다.
#만약 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거합니다.
if len(answer)>=16:
answer = answer[:15]
if answer.endswith('.'):
answer = answer[:-1]
#7: new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙입니다.
while len(answer)<3:
answer += answer[-1]
return answer
solution("z-+.^.")
예 위의 허접하고 길기만 한 코드가 제 코드구요..^^
import re
def solution(new_id):
st = new_id
st = st.lower() #1단계
st = re.sub('[^a-z0-9\-_.]', '', st) #2단계
st = re.sub('\.+', '.', st) #3단계
st = re.sub('^[.]|[.]$', '', st) #4단계
st = 'a' if len(st) == 0 else st[:15] #5단계, 6단계
st = re.sub('^[.]|[.]$', '', st)
st = st if len(st) > 2 else st + "".join([st[-1] for i in range(3-len(st))]) #7단계
return st
이게 다른 분들의 코드입니다..
정규표현식을 쓰는 게 좋겠다는 생각은 들었는데 안 쓴 이유가 우선 1. 다른 라이브러리를 불러오는 건 가급적이면 자제해야한다고 들어서(아닌가용..?) 2. 사실 어떻게 쓰는건지도 몰라서 입니다!..^^ 참 당당하다 그쵸?
일단 1단계 말고는 저와 조금씩 코드가 다르니 뜯어보도록 하겠습니다
2. new_id에서 알파벳 소문자, 숫자, 빼기(-), 밑줄(_), 마침표(.)를 제외한 모든 문자를 제거
- 저는 'abcdefg...'등 알파벳 소문자, 숫자, 빼기, 밑줄, 마침표를 포함하는 문자열을 만든 뒤 not in의 경우 공백으로 replace(=삭제)하는 방식을 취했습니다
- 다른 분들은 역시, 정규표현식 [^a-z0-9\-_.]를 사용해 제가 쓴 'abcdefg...'를 짧게 대체하셨어요..^^ 참고로 \-는 -를 일반 문자로 사용하기 위해 넣으신 것 같습니다. 저기서 괄호 안에 있는 ^는 not이라는 뜻이래요. not(a-z, 0-9, -, _, .)인 거죠. 공백으로 대체했다는 것 자체는 같습니다.
3. new_id에서 마침표(.)가 2번 이상 연속된 부분을 하나의 마침표(.)로 치환
- 저는 while문을 사용해 ..가 있는 경우 .로 대체하라고 하였습니다. 이렇게 하면 점이 하나만 남으니까요!
- 다른 분들은 정규표현식 [\.+]를 사용하셨습니다. 마찬가지로 저기의 역슬래시 또한 .이 메타문자가 아닌 일반 문자라는 것을 인식시키려고 한 것 같아요. +는 반복을 의미한다고 합니다.
4. new_id에서 마침표(.)가 처음이나 끝에 위치한다면 제거
- 저는 startswith, endswith를 사용하여 슬라이싱했습니다. startswith조건에 걸린다면 [1:], endswith조건에 걸린다면 [:-1]. replace를 쓰면 중간에 있는 마침표들도 같이 제거되길래 이 방법을 채택했습니다.
- 다른 분들은 여기에서도 정규표현식 ^[.] | [.]$를 사용하셨습니다. []앞의 ^는 ~로 시작하는 것, []뒤의 $는 ~로 끝나는 것, 중간의 |는 or에요. 저 조건에 해당하는 .들만 사라지는건가봐요? 매커니즘 신기하네요..
5. new_id가 빈 문자열이라면, new_id에 "a"를 대입
- 조금 많이 정직하게.. new_id의 len이 0이라면 new_id="a"라고 썼습니다.
- 다른 분들은 매우 효율적으로 쓰셨더라구요. 6단계와 같이... ㅇㅅㅇ
6. new_id의 길이가 16자 이상이면, new_id의 첫 15개의 문자를 제외한 나머지 문자들을 모두 제거. 제거 후 마침표(.)가 new_id의 끝에 위치한다면 끝에 위치한 마침표(.) 문자를 제거.
- 위와 같게, new_id의 len이 16이상이라면 new_id = new_id[:15], endswith(.)인 경우 [:-1]을 사용했습니다
- 다른 분들은 len을 잴 필요 없이 new_id[:15], ^[.] | [.]$를 사용했습니다.
7. new_id의 길이가 2자 이하라면, new_id의 마지막 문자를 new_id의 길이가 3이 될 때까지 반복해서 끝에 붙임.
- while문으로 new_id의 길이가 3미만이면 new_id += new_id[-1]을 사용했습니다.
- 다른 분들은 new_id의 길이가 2초과일때까지 new_id에 new_id[-1]를 3-len(st)번 더해주신 것 같습니다. 음.. 이번에 한해서는 제가 더 효율적인 것 같기도.. 하네요 아님 말구..ㅎㅅㅎ
다음번에는 중간중간 진행한 세미 프로젝트들 모아서 가져올게요. 수학 정리도 가능하면 하겠습니다..!!!
프로그래머스 문제를 처음 풀어봤는데 하나하나 깨나가는 맛이 있네요! 앞으로도 조금씩 풀어보겠습니다!
'STUDY' 카테고리의 다른 글
파이썬 스터디 ver3. 6주차 (3) | 2022.08.06 |
---|---|
파이썬 스터디 ver3. 5주차 (0) | 2022.07.30 |
파이썬 스터디 ver3. 3주차 (0) | 2022.07.14 |
파이썬 스터디 ver3. 2주차 (1) | 2022.07.06 |
파이썬 스터디 ver3. 1주차 (0) | 2022.06.27 |