- Q15에서부터 Q20까지의 문제를 풀었다.
- 코드는 직접 작성하였으며 풀이와 다른 경우 표시를 해두었다.
- 난이도는 책에서와 같이 ⭐로 표기했다(최대 3개).
Q15 Duplicate Numbers ⭐⭐
#Q15 Duplicate Numbers
'''
입력값: 0-9까지의 숫자
DupNum(): 입력값이 0-9의 모든 숫자를 각각 한 번씩 사용한 것인지 확인
'''
def DupNum(x):
x = list(map(int,x))
x.sort()
y = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
if x == y:
return True
else:
return False
x = input('숫자를 입력하세요: ')
result = DupNum(x)
print(result)
- 0부터 9까지 하나씩 담겨있는 리스트 y를 만들어 입력 값과 비교하는 코드를 작성했다.
- 풀이에서는 빈 리스트를 만들고 반복문으로 중복된 값이 있는지 조사했다.
Q16 모스 부호 해독 ⭐⭐⭐
#Q16 모스 부호 해독
morseCode = {'A':'.-', 'B':'-...', 'C':'-.-.', 'D':'-..', 'E':'.', 'F':'..-.', 'G':'--.', 'H':'....', 'I':'..', 'J':'.---', 'K':'-.-', 'L':'.-..', 'M':'--', 'N':'-.', 'O':'---', 'P':'.--.', 'Q':'--.-', 'R':'.-.', 'S':'...', 'T':'-', 'U':'..-', 'V':'...-', 'W':'.--', 'X':'-..-', 'Y':'-.--', 'Z':'--..'}
list_val = list(morseCode.values())
list_key = list(morseCode.keys())
def MorseCode(x):
list_x = x.split(' ')
for i in range(0, len(list_x)):
for j in range(0, len(list_val)):
if list_x[i] == list_val[j]:
list_x[i] = list_key[j]
if list_x[i] == '':
list_x[i] = ' '
return ''.join(list_x)
x = input('모스부호를 입력하세요: ')
result = MorseCode(x)
print(result)
- 모스부호를 딕셔너리로 만들고 key와 value를 구분해 코드로 작성했다.
- 풀이에서는 모스부호 입력값을 공백으로 구분하고 해당 값을 딕셔너리에서 찾는 방법을 사용했다.
Q17 기초 메타 문자 ⭐
#Q17 기초 메타 문자
#정규식 a[.]{3,}b와 매치되는 문자열 맞추기
'''
a[.]b: a와 b사이에 Dot(.)문자가 있으면 매치
a[.]{3,}b: Dot(.)문자가 3이상 반복되면 매치
= 2번 a....b
'''
Q18 문자열 검색 ⭐⭐
#Q18 문자열 검색
#코드의 결괏값 예측하기
import re
p = re.compile("[a-z]+") #a부터 z까지 1회 이상 반복
m = p.search("5 python")
print(m.start() + m.end()) #m.start()는 2(5 이후의 python과 매치), m.end()는 8
Q19 그루핑 ⭐⭐⭐
#Q19 그루핑
#문자열에서 휴대폰 번호 뒷자리 숫자 4개 ####으로 정규식을 사용해서 바꾸기
import re
p = re.compile(r"\w+\s+\d+[-]\d+[-](\d+)")
m = p.search("lee 010-8789-7768")
test = re.sub(m.group(1), '####', "lee 010-8789-7768")
print(test)
'''
1) 문자클래스 []: [] 사이의 문자들과 매치
2) 정규 표현식
- \w : 문자+숫자와 매치, [a-zA-Z0-9_]와 동일한 표현식
- \s : whitespace 문자(space나 tab처럼 공백을 표현하는 문자)와 매치
- \d : 숫자와 매치, [0-9]와 동일한 표현식
'''
휴대폰 뒷자리 4개를 그룹으로 묶고 sub함수를 사용해 '####'으로 바꾸었다.
풀이에서의 방법은 아래와 같다.
#Q19 풀이
import re
s = """
park 010-0000-0000
kim 010-1111-1111
lee 010-2222-2222
"""
p = re.compile("(\d{3}[-]\d{4})[-]\d{4}")
result = p.sub("\g<1>-####", s)
print(result)
Q20 전방 탐색 ⭐⭐⭐
#Q20 긍정형 전방탐색
import re
p = re.compile(".*[@].*[.](?=com$|net$).*$")
print(p.match("ldonghae320@gmail.com"))
전방 탐색은 풀이를 보고 코드를 작성했다.
이 글은 책 『Do it! 점프 투 파이썬』을 읽은 후 작성한 글입니다.
'Programming > Python' 카테고리의 다른 글
[PYTHON] shallow copy와 deep copy를 알아보자 🌱 (0) | 2023.08.28 |
---|---|
[PYTHON] Variable Scope를 알아보자 🌱 (0) | 2023.08.21 |
Do it! 공부단 10일차 | 문제 풀이 (2) (0) | 2021.03.31 |
Do it! 공부단 9일차 | 문제 풀이 (1) (0) | 2021.03.26 |
Do it! 공부단 8일차 | ch06 간단한 스크립트와 함수 만들기 (0) | 2021.03.25 |