본문 바로가기

파이썬/Do it! 점프 투 파이썬

점프 투 파이썬 코딩 면허 시험 / 2021.08.14

1. 문자열 바꾸기
다음과 같은 문자열이 있다.

a:b:c:d


문자열의 split와 join함수를 사용하여 위 문자열을 다음과 같이 고치시오.

a#b#c#d

1
2
3
4
= "a:b:c:d"
= a.split(":")
= '#'.join(b)
print(c)
cs


2. 딕셔너리 값 추출하기
다음은 딕셔너리의 a에서 'C'라는 key에 해당하는 value를 출력하는 프로그램이다.

a = {'A':90, 'B':80}
a['C']


a딕셔너리에는 'C'라는 key가 없으므로 오류가 발생한다. 'C'에 해당하는 key값이 없을 경우 오류대신 70을 얻을 수 있도록 수정하시오.

1
2
= {'A':90'B':80}
print(a.get('C'70))
cs


3. 리스트의 더하기와 extend 함수
다음과 같은 리스트가 있다.

a = [1, 2, 3]


리스트 a에 [4, 5]를 + 기호를 사용하여 더한 결과는 다음과 같다.

a = [1, 2, 3]
a = a + [4, 5]
print(a)
>> [1, 2, 3, 4, 5]


리스트 a에 [4, 5]를 extend를 사용하여 더한 결과는 다음과 같다.

a = [1, 2, 3]
a.extend([4, 5])
print(a)
>> [1, 2, 3, 4, 5]


+ 기호를 사용하여 더한 것과 extend한 것의 차이점이 있을까? 있다면 그 차이점을 설명하시오.
>> + 기호를 사용하면 두 리스트를 더한 새로운 리스트가 반환이 되기때문에 주소 값이 달라지는 반면에, extend를 사용하면 주소 값이 변하지 않고 그대로 유지된다.

4. 리스트 총합 구하기
다음은 A학급 학생의 점수를 나타내는 리스트이다. 다음 리스트에서 50점 이상 점수의 총합을 구하시오.

A = [20, 55, 67, 82, 45, 33, 90, 87, 100, 25]

1
2
3
4
5
6
= [205567824533908710025]
 
hap = 0
for score in A:
    if score >= 50:
        hap += score
cs


5. 피보나치 함수
첫 번째 항의 값이 0이고 두 번째 항의 값이 1일 때, 이후에 이어지는 항은 이전의 두항을 더한 값으로 이루어지는 수열을 피보나치 수열이라고 한다.

0, 1, 1, 2, 3, 5, 8, 13 ...

입력을 정수 n으로 받았을 때, n이하까지의 피보나치 수열을 출력하는 함수를 작성해 보자.

1
2
3
4
def fib(n):
    if n == 0 : return 0
    if n == 1 : return 1
    return fib(n-1+ fib(n-2)
cs


6. 숫자의 총합 구하기
사용자로부터 다음과 같은 숫자를 입력받아 입력받은 숫자의 총합을 구하는 프로그램을 작성하시오.
(단 숫자는 콤마로 구분하여 입력한다.)

65, 45, 2, 3, 45, 8

1
2
3
4
5
number = input("숫자 입력 : ")
score = number.split(",")
hap = 0
for i in score:
    hap += int(i)
cs


7. 한 줄 구구단
사용자로부터 2~9까지의 숫자 중 하나를 입력받아 해당 숫자의 구구단을 한 줄로 출력하는 프로그램을 작성하시오.
실행 예)

구구단을 출력할 숫자를 입력하세요(2~9): 2
2 4 6 8 10 12 14 16 18

1
2
3
4
number = int(input("구구단을 출력할 숫자를 입력하세요(2~9) : "))
 
for i in range(110):
    print(i*number, end=" ")
cs


8번 9번 생략

10. 사칙연산 계산기
다음과 같이 동작하는 클래스 Calculator를 작성하시오.

>>>cal1 = Calculator([1, 2, 3, 4, 5])
>>>cal1.sum()
15
>>>cal1.avg()
3.0
>>>cal1 = Calculator([6, 7, 8, 9, 10])
>>>cal2.sum()
40
>>>cal1.avg()
8.0

1
2
3
4
5
6
7
8
9
10
11
12
class Calculator:
    def __init__(self, num_list):
        self.num_list = num_list
    def sum(self):
        result = 0
        for num in self.num_list:
            result += num
        return result
 
    def avg(self):
        hap = self.sum()
        return hap/len(self.num_list)
cs


11번 생략

12. 오류와 예외 처리
다음 코드의 실행 결과를 예측하고 그 이유에 대해 설명하시오.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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에 +3
# 다음에 finally가 실행되어 +4
cs


13. DashInsert함수
DashInsert 함수는 숫자로 구성된 문자열을 입력받은 뒤 문자열 안에서 홀수가 연속되면 두 수 사이에 - 를 추가하고, 짝수가 연속되면 * 를 추가하는 기능을 갖고 있다. DashInsert함수를 완성하시오.

입력 예시 : 4546793
출력 예시 : 454*67-9-3

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def is_odd(number):
    num = int(number)
    return num % 2 == 0 # 짝수면 true 홀수면 false
 
def DashInsert(charnumber):
    result = []
    flag = is_odd(charnumber[0])
    result.append(charnumber[0])
    for i in range(1len(charnumber)):
        new_flag = is_odd(charnumber[i])
        if flag == True and new_flag == True:
            result.append('*')
        elif flag == False and new_flag == False:
            result.append('-')
        result.append(charnumber[i])
        flag = new_flag
    return ''.join(result)
cs


14. 문자열 압축하기
문자열을 입력받아 같은 문자가 연속적으로 반복되는 경우에 그 반복 횟수를 표시해 문자열을 압축하여 표시하시오.

입력 예시 : aaabbcccccca
출력 예시 : a3b2c6a1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
data = input("입력 : ")
num = data[0]
count = 1
for i in range(1len(data)):
    if data[i] == num:
        count += 1
    else:
        print(num, end='')
        print(count, end='')
        count = 1
        num = data[i]
 
print(data[len(data)-1], end='')
print(count)
 
cs


15. Duplicate Numbers
0~9의 문자로 된 숫자를 입력받았을 때, 이 입력값이 0~9의 모든 숫자를 각각 한 번씩만 사용한 것인지 확인하는 함수를 작성하시오.

입력 예시 : 0123456789 01234 01234567890 6789012345 012322456789
출력 예시 : true false false true false

1
2
3
4
5
6
7
8
9
10
11
12
13
14
def chkDupNum(str):
    result = []
    for num in str:
        if num not in result:
            result.append(num)
        else:
            return False
    return len(result) == 10
 
print(chkDupNum("0123456789"))
print(chkDupNum("01234"))
print(chkDupNum("01234567890"))
print(chkDupNum("6789012345"))
print(chkDupNum("012322456789"))
cs


16번 생략 딕셔너리 이용하시면 됩니다.

17. 기초 메타 문자
다음 중 정규식 a[.]{3,}b과 매치되는 문자열은 무엇일까?

1. acccb
2. a....b
3. aaab
4. a.cccb


18. 문자열 검색
다음 코드의 결과값은 무엇일까?

import re
p = re.compile("[a-z]+")
m = p.search("5 python")
print(m.start() + m.end())

답 : 10

19번 20번 생략