종합문제2
참고:위키독스
Q11
C:\doit 디렉터리에 mymod.py 파이썬 모듈이 있다고 가정해 보자.
명령 프롬프트 창에서 파이썬 셸을 열어 이 모듈을 import해서 사용할 수 있는
방법을 모두 기술하시오.
import sys
sys.path.append('C;\doit')
import mymod
Q12 오류와 예외 처리
다음 코드의 실행 결과를 예측하고 그 이유를 설명하라
result = 0
try:
[1,2,3][3]
"a" + 1
4 / 0
except TypeError:
result += 1
except ZeroDivisionError:
result += 2
except IndexError:
result += 3
finally:
result += 4
# 첫번째 [1,2,3][3]은 indexError이 나서 3이더해지고 finally구문이 실행되어 4가 더해진다.
print(result)
7
Q13 DashInsert 함수
DashInsert 함수는 숫자로 구성된 문자열을 입력받은 뒤 문자열 안에서 홀수가 연속되면
두 수 사이에 - 를 추가하고, 짝수가 연속되면 * 를 추가하는 기능을 갖고 있다.
DashInsert 함수를 완성하시오.
data = "4546793"
numbers = list(map(int,data))
result = []
for i,num in enumerate(numbers):
result.append(str(num))
if i < len(numbers) -1:
is_odd = num %2 ==1
is_next_odd = numbers[i+1] % 2 ==1
if is_odd and is_next_odd:
result.append("-")
elif not is_odd and not is_next_odd:
result.append("*")
print("".join(result))
454*67-9-3
Q14 문자열 압축하기
문자열을 입력받아 같은 문자가 연속적으로 반복되는 경우에
그 반복 횟수를 표시해 문자열을 압축하여 표시하시오.
def str_iter(s):
_c = ""
cnt = 0
result = ""
for c in s:
if c!=_c:
_c = c
if cnt: result += str(cnt)
result += c
cnt = 1
else:
cnt +=1
if cnt: result += str(cnt)
return result
str_iter("aaabbbcc")
'a3b3c2'
Q15 Duplicate Numbers
“0~9”의 문자로 된 숫자를 입력받았을 때,이 입력값이 0~9의 모든 숫자를
각각 한 번씩만 사용한 것인지 확인하는 함수를 작성하시오.
def duplicate(s):
result = []
for num in s:
if num not in result:
result.append(num)
else:
return False
return len(result) == 10
print(duplicate("0123456789"))
True
Q16 모스 부호 해독
모스 부호(dot:. dash:-)를 해독하여 영어 문장으로 출력하는 프로그램을 작성하시오.
dic = {
'.-':'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'
}
def mose(src):
result = []
for i in src.split(" "):
for char in i.split(" "):
result.append(dic[char])
result.append(" ")
return "".join(result)
mose(".... . ... .-.. . . .--. ... . .- .-. .-.. -.--")
'HE SLEEPS EARLY '
Q17 기초 메타 문자
import re
p = re.compile("a[.]{3,}b")
print(p.match("accb"))
print(p.match("a....b"))
print(p.match("aaab"))
print(p.match("a.cccb"))
None
<re.Match object; span=(0, 6), match='a....b'>
None
None
Q18 문자열 검색
#이 코드의 결과값은?
import re
p = re.compile("[a-z]+")
m = p.search("5 python")
m.start() + m.end()
10
위 식은 p의 시작위치인 2와 끝값이 n의 위치인 8이 더해져 10이라는 결과가 나온다
Q19 그루핑
다음과 같은 문자열에서 휴대폰 번호 뒷자리인 숫자 4개를 “####”로 바꾸는 프로그램을
정규식을 사용하여 작성하시오.
a = """
park 010-9999-9988
kim 010-9909-7789
lee 010-8789-7768
"""
p = re.compile("(\d{3}[-]\d{4})[-]\d{4}")
p.sub("\g<1>-####",a)
'\npark 010-9999-####\nkim 010-9909-####\nlee 010-8789-####\n'
Q20 전방탐색
긍정형 전방 탐색 기법을 사용하여 .com, .net이 아닌 이메일 주소는
제외시키는 정규식을 작성하시오.
p = re.compile(".*[@].*[.](?=com$|net$).*$")
print(p.match("pahkey@gmail.com"))
print(p.match("kim@daum.net"))
print(p.match("lee@myhome.co.kr"))
<re.Match object; span=(0, 16), match='pahkey@gmail.com'>
<re.Match object; span=(0, 12), match='kim@daum.net'>
None