List
- 종합문제
a:b:c:d
a#b#c#d
정답
>>> s 'a:b:c:d' >>> s = "a:b:c:d" >>> s 'a:b:c:d' >>> s.split(":") ['a', 'b', 'c', 'd'] >>> a = s.split(":") >>> a ['a', 'b', 'c', 'd'] >>> "#".join(a) 'a#b#c#d'
>>> a = {'A':90, 'B':80}
>>> a['C']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'C'
정답
>> a = {'A':90, 'B':80} >> a.get('C', 70) # key가 없을 경우에는 두 번째 매개변수로 전달된 default 값을 대신 돌려준다. 70
>> a = {'A':90, 'B':80} >>> a {'A': 90, 'B': 80} >>> a["C"] = 70 >>> a {'A': 90, 'B': 80, 'C': 70}
>>> a = [1, 2, 3]
>>> a = [1, 2, 3]
>>> a = a + [4,5]
>>> a
[1, 2, 3, 4, 5]
>>> a = [1, 2, 3]
>>> a.extend([4, 5])
>>> a
[1, 2, 3, 4, 5]
+
기호를 사용하여 더한 것과 extend한 것의 차이점이 있을까? 있다면 그 차이점을 설명하시오.정답
extend([])
로 한것은 위치의 변화가 없음 id(a)로 확인>> a = [1, 2, 3] >> id(a) 140198339523456 >> a.extend([4,5]) >> a [1, 2, 3, 4, 5] >> id(a) 140198339523456 >>
+
한것은 위치가 달라짐>> a = [1, 2, 3] >> id(a) 140198343642112 >> a = a + [4,5] >> a [1, 2, 3, 4, 5] >> id(a) 140198339524544
A = [20, 55, 67, 82, 45, 33, 90, 87, 100, 25]
정답
A = [20, 55, 67, 82, 45, 33, 90, 87, 100, 25] total = 0 ` for a in A: if a >= 50: total = total + a ` print(total)
481
A = [20, 55, 67, 82, 45, 33, 90, 87, 100, 25] ` result = 0 while A: # A 리스트에 값이 있는 동안 mark = A.pop() # A리스트의 가장 마지막 항목을 하나씩 뽑아냄 if mark >= 50: # 50점 이상의 점수만 더함 result += mark ` print(result) # 481 출력
0, 1, 1, 2, 3, 5, 8, 13, ...
정답
- 피보나치 수열은 다음과 같은 순서로 결괏값을 반환한다.
fib(0) → 0 반환 fib(1) → 1 반환 fib(2) → fib(0) + fib(1) → 0 + 1 → 1 반환 fib(3) → fib(1) + fib(2) → 1 + 1 → 2 반환 fib(4) → fib(2) + fib(3) → 1 + 2 → 3 반환 fib(5) → fib(3) + fib(4) → 2 + 3 → 8 반환 ...
- ** n이 0일 때는 0을 반환, 1일 때는 1을 반환한다. n이 2 이상일 경우에는 이전의 두 값을 더하여 반환
def fib(n): if n == 0 : return 0 # n이 0일 때는 0을 반환 if n == 1 : return 1 # n이 1일 때는 1을 반환 return fib(n-2) + fib(n-1) # n이 2 이상일 때는 그 이전의 두 값을 더하여 반환 ` for i in range(10): print(fib(i))
65,45,2,3,45,8
정답
data = input("숫자를 입력하세요: ") numbers = list(data.split(",")) result = 0 ` for number in numbers: result = result + int(number) ` print(result)
구구단을 출력할 숫자를 입력하세요(2~9): 2
2 4 6 8 10 12 14 16 18
정답
user_input = input("구구단을 출력할 숫자를 입력하세요(2~9):") dan = int(user_input) # 입력 문자열을 숫자로 변환 for i in range(1, 10): print(i*dan, end= ' ') # 한 줄로 출력하기 위해 줄 바꿈 문자 대신 공백 문자를 마지막에 출력한다.
AAA
BBB
CCC
DDD
EEE
EEE
DDD
CCC
BBB
AAA
정답
f = open('abc.txt', 'r') lines = f.readlines() # 모든 라인을 읽음 f.close() ` lines.reverse() # 읽은 라인을 역순으로 정렬 ` f = open('abc.txt', 'w') for line in lines: line = line.strip() # 포함되어 있는 줄 바꿈 문자(\n) 제거를 위해 이거 안하면 한줄씩 띄우기 함 f.write(line) f.write('\n') # 줄 바꿈 문자 삽입 f.close()
70
60
55
75
95
90
80
80
85
100
정답
f = open("sample.txt", 'w') f.write("""70 60 55 75 95 90 80 80 85 100""") f.close() ` f = open("sample.txt", 'r') lines = f.readlines() f.close() ` total = 0 for line in lines: total = total + int(line) average = total / len(lines) # 읽어온 라인들을 len함수로 해도 된당 ` f = open("result.txt" , "w") f.write(str(total)) # 저장할 때 무조건 str 서서 해야한다 f.write("\n") f.write(str(average)) f.close()
>>> cal1 = Calculator([1,2,3,4,5])
>>> cal1.sum() # 합계
15
>>> cal1.avg() # 평균
3.0
>>> cal2 = Calculator([6,7,8,9,10])
>>> cal2.sum() # 합계
40
>>> cal2.avg() # 평균
8.0
정답
class Calculator: def __init__(self,numberList): self.numberList = numberList ` def sum(self): result = 0 for number in self.numberList: # in 뒤 self.numberList로 꼭 써줘야한다 result = result + int(number) # int로 꼭 감싸줘야한다. return result ` def avg(self): total = self.sum() # 굳이 다시 수식 쓸필요없고 이거로 주자 average = total / len(self.numberList) # 여기서도 self.numberList로 해줘된다. return average ` cal1 = Calculator([1,2,3,4,5]) print(cal1.sum()) print(cal1.avg()) ` cal2 = Calculator([6,7,8,9,10]) print(cal2.sum()) print(cal2.avg())
>>> import mymod
>>>
####정답
1) sys 모듈 사용하기>> import sys >> sys.path.append("c:/doit") >> import mymod
2) PYTHONPATH 환경 변수 사용하기
C:\Users\home>set PYTHONPATH=c:\doit C:\Users\home>python >> import mymod
3) 현재 디렉터리 사용하기
C:\Users\home>cd c:\doit C:\doit>python >> import mymod
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
print(result)
정답
7이 출력된다. ` result의 초깃값은 0이다. try문 안의 [1, 2, 3][3] 이라는 문장 수행 시 IndexError가 발생하여 except IndexError: 구문으로 이동하게 되어 result에 3이 더해져 3이 된다. 최종적으로 finally 구문이 실행되어 result에 4가 더해져 7이 된다. print(result)가 수행되어 result의 최종 값인 7이 출력된다.
입력 예시: 4546793
출력 예시: 454*67-9-3
####정답
data = "4546793" #입력 시 " " 써서 입력 줘야함 data2 = list(map(int, data)) result = [] ` for i, n in enumerate(data2): #data2인거 잘 확인 result.append(str(n)) # str() 로 n 잘 감싸줘야된다. 이건 결괏값이 사직연산하고 그런게 아니니까 str()로 if i < len(data2)-1: # 1을 뺴는 이유는 len하면 글자수보다 1더 많은 숫자가 나오니까 odd = n % 2 == 1 # odd2 = data2[i+1] % 2 == 1 # data2의 인덱스로 다음값을 불러오자 if odd and odd2: result.append("-") elif not odd and not odd2: result.append("*") ` print("".join(result)) #리스트가 ","로 나누어져 있어도 ""(공백)으로 붙힌다.
입력 예시: aaabbcccccca
출력 예시: a3b2c6a1
정답
def compress_string(s): _c = "" cnt = 0 result = "" for c in s: if c!=_c: # 입력 문자열의 문자를 확인/ 입력 문자가 "_c"와 동일하지 않으면 _c = c # 그대로 "c" if cnt: # 그리고 cnt = 0 이면 result += str(cnt) # result에 cnt를 str로 더해 result += c # cnt = 1 else: cnt +=1 if cnt: result += str(cnt) return result ` print (compress_string("aaabbcccccca")) # a3b2c6a1 출력
입력 예시: 0123456789 01234 01234567890 6789012345 012322456789
출력 예시: True False False True False
정답
def onetonine(x): result = [] for i in x: if i not in result: # 먼저 중복값이 있는지 조사 / i가 추가될때 result에 i가 없으면 추가 result.append(i) else: # 그 외 중복값이 있으면 (i 이미 result에 있으면) False 출력 return False if len(result) == 10: # 마지막으로 값이 10개 가 다 쓰였나 확인하기 위해 len으로 확인 return True else: return False ` print(onetonine("0123456789")) print(onetonine("01234")) print(onetonine("01234567890")) print(onetonine("6789012345")) print(onetonine("012322456789"))
def onetonine(x): result = [] for i in x: if i not in result: result.append(i) else: return False return len(result) == 10 # 이렇게 줄여써도됌.. ` print(onetonine("0123456789")) print(onetonine("01234")) print(onetonine("01234567890")) print(onetonine("6789012345")) print(onetonine("012322456789"))
예를 들어 다음 모스 부호는 "HE SLEEPS EARLY"로 해석해야 한다.
.... . ... .-.. . . .--. ... . .- .-. .-.. -.--
정답
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 morse(src): result = [] for word in src.split(" "): # 입력되는 모스 부호 문자열(scr)을 먼저 단어와 단어사이(공백 2개) 구분 for char in word.split(" "): # 단어와 단어 사이 (공백 2개) 구분 후 글짜와 글짜사이 (공백 1개) 구분 result.append(dic[char]) # 딕셔너리 내의 chr 찾아서 추가하자 result.append(" ") # 단어와 단어 사이에 공백 하나 줘야지 return "".join(result) # 리스트 형태를 문자열 형태로 합쳐서 출력 ` print(morse('.... . ... .-.. . . .--. ... . .- .-. .-.. -.--'))
a[.]{3,}b
과 매치되는 문자열은 무엇일까?acccb
a....b
aaab
a.cccb
정답
a[.]{3,}b
[.]
: 괄호 안에있는 게{3,}
: 3번 이상 반복a....b
>>> import re
>>> p = re.compile("[a-z]+")
>>> m = p.search("5 python")
>>> m.start() + m.end()
정답
>> import re >> p = re.compile("[a-z]+") # a부터z사이 알파벳이 1번이상 반복 >> m = p.search("5 python") # search로 조사 그래서 문자열 전체를 보는거라 "python" 부분만 매치 >> m.start() + m.end() # 매치부분 첫번째 인덱스와 마지막 인덱스 출력
m.start() + m.end() = 2 + 8 = 10
"""
park 010-9999-9988
kim 010-9909-7789
lee 010-8789-7768
"""
정답
import re p = re.compile('(9988|7789|7768)') m = p.sub("####" ,"park 010-9999-9988") n = p.sub("####" ,"kim 010-9909-7789") o = p.sub("####" ,"lee 010-8789-7768") ` print(m) print(n) print(o)
import re ` phonenumbers = """ park 010-9999-9988 kim 010-9909-7789 lee 010-8789-7768 """ ` p = re.compile("(\w+\s+\d+[-]\d+)[-]\d+") #이렇게 해도 되고 맞춰서 만들어도 된다.여러가지 형태로 나올수 있는 m = p.sub("\g<1>-####", phonenumbers) # sub의 안에서 그룹 불러올때는 "\g<1>"를 써라([p.group(1) 아님), 그리고 바꿀부분 따옴표로 꼭 감싸줘 ` print(m)
import re ` s = """ park 010-9999-9988 kim 010-9909-7789 lee 010-8789-7768 """ ` pat = re.compile("(\d{3}[-]\d{4})[-]\d{4}") result = pat.sub("\g<1>-####", s) ` print(result)
.*[@].*[.].*$
import re
p = re.compile(".*[@].*[.](?=com$|net$).*") # (?=...)이거 쓴 다음 ".*"이거도 써줘야함/ 왜냐하면 이게 없어진게 아니니까
print(p.match("pahkey@gmail.com")) # 여기선 match()를 써줘야함..
print(p.match("kim@daum.net"))
print(p.match("lee@myhome.co.kr"))