본문 바로가기
Python/점프 투 파이썬

종합문제 (1)

by k-mozzi 2021. 9. 16.
반응형
Preface

 

오늘 다 풀어보려 했는데 머리가 너무 아프다...

 

나머지는...내일...


 

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

 

a:b:c:d

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

a#b#c#d

 

→ 답안

a = 'a:b:c:d'
b = a.split(':')
print('#'.join(b))

→ 해설 : 답안과 동일

 


 

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

 

>>> a = {'A':90, 'B':80}
>>> a['C']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'C'

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

 

→ 답안

a = {'A': 90, 'B': 80}
try:
    print(a[C])
except:
    print(70)

→ 해설 : 나는 try문을 사용하여 코드를 작성했는데, 해설에선 해당 key가 없을 경우 두 번째 매개변수로 전달된 default 값을 대신 돌려주는 딕셔너리의 get 함수를 사용했다. (get 함수의 존재를 까먹고 있었다.)

>>> a = {'A':90, 'B':80}
>>> a.get('C', 70)
70

 


 

3. 다음과 같은 리스트 a가 있다.

 

>>> a = [1, 2, 3]

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

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

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

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

+ 기호를 사용하여 더한 것과 extend한 것의 차이점이 있을까? 있다면 그 차이점을 설명하시오.

 

→ 답안 : +를 사용하면 리스트 a의 값이 변하는 것이 아니라 두 리스트가 더해진 새로운 리스트가 반환되어 주소 값이 변하지만, extend를 사용하여 값을 더하면 주소 값이 변하지 않고 그대로 유지된다.

 


 

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

 

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

 

→ 답안

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

for a in A:
    if a >= 50:
        result += a

print(result)

→ 해설 : 나는 for문을 사용하여 코드를 작성했지만, 해설에선 while문과 pop 함수를 사용하여 코드를 작성했다.

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 출력

 


 

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

 

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

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

 

→ 답안 : 코드를 어떻게 작성해야 할 지 도무지 감이 잡히지 않아 해설을 참고했다.

def fib(n):
    if n == 0:
        return 0
    if n == 1:
        return 1
    else:
        return fib(n-2) + fib(n-1)


for i in range(10):
    print(fib(i))

 


 

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

 

65,45,2,3,45,8

 

→ 답안

a = input('숫자를 입력하세요: ')
num = a.split(',')
result = 0
for n in num:
    result += int(n)


print(result)

→ 해설 : 답안과 동일

 


 

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

 

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

 

→ 답안

a = int(input('구구단을 출력할 숫자를 입력하세요(2~9): '))
for y in range(1, 10):
    print(a * y, end=' ')

→ 해설 : 답안과 동일

 


 

8. 다음과 같은 내용의 파일 abc.txt가 있다.

 

AAA
BBB
CCC
DDD
EEE

이 파일의 내용을 다음과 같이 역순으로 바꾸어 저장하시오.

EEE
DDD
CCC
BBB
AAA

 

→ 답안 : 파일을 열어 문자열을 읽고 쓰는 방법까진 할 수 있었지만, 문자열을 거꾸로 뒤집어 출력하는 방법을 알지 못해 해설을 참고했다.

f = open('abc.txt', 'w')
f.write('''
AAA
BBB
CCC
DDD
EEE
''')
f.close()

f = open('abc.txt', 'r')
lines = f.readlines()
f.close()

lines.reverse()

f = open('abc.txt', 'w')
for line in lines:
    line = line.strip()
    f.write(line)
    f.write('\n')
f.close()

 


 

9. 다음과 같이 총 10줄로 이루어진 sample.txt 파일이 있다. sample.txt 파일의 숫자 값을 모두 읽어 총합과 평균 값을 구한 후 평균 값을 result.txt 파일에 쓰는 프로그램을 작성하시오.

 

70
60
55
75
95
90
80
80
85
100

 

→ 답안 : f.write 함수에는 숫자 값을 바로 쓸 수 없다는 것을 몰라 한참 헤맸다.

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()

add = 0
average = 0
for line in lines:
    score = int(line)
    add += score
average = add / len(lines)

f = open('result.txt', 'w')
f.write(str(average))
f.close()
# 숫자 값은 result.txt 파일에 바로 쓸 수 없으므로 str 함수를 사용하여 문자열로 변경한 후 파일에 쓴다.

 

 

 

 

 

출처 : https://wikidocs.net/17114

 

08장 종합문제

파이썬은 웹, GUI, 네트워크, 딥러닝 등 상당히 많은 일을 할 수 있는 언어이다. 여러분이 지금까지 배운 내용을 충분히 숙지했다면 이제 이들을 향해 첫발을 내디딜 준비를 ...

wikidocs.net

 

728x90
반응형

'Python > 점프 투 파이썬' 카테고리의 다른 글

파이썬 기초 마무리  (0) 2021.09.26
종합문제 (2)  (0) 2021.09.17
정규 표현식 (2)  (0) 2021.09.14
정규 표현식 (1)  (0) 2021.09.13
간단한 코드 작성  (0) 2021.09.12

댓글