본문 바로가기

STUDY

파이썬 스터디 ver3. 4주차

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

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