파이썬 초보 탈출 20제
- 드디어 책의 마지막인 코딩 면허 시험을 풀 차례다.
- 블로그의 글을 참고해가며 먼저 10문제를 풀었다.
- 코드는 직접 작성하였으며 풀이와 다른 경우 표시를 해두었다.
- 난이도는 책에서와 같이 ⭐로 표기했다(최대 3개).
*ch07 정규 표현식은 내용이 어려워 저자의 조언대로 가볍게 읽고 넘어갔다.
Q1 문자열 바꾸기 ⭐
#Q1 a:b:c:d를 a#b#c#d로 바꾸기
x = 'a:b:c:d'
result = '#'.join(x.split(':'))
print(result)
Q2 딕셔너리 값 추출하기 ⭐
#Q2 딕셔너리 값 추출 에러 해결
a = {'A':90, 'B':80}
#a['C'] 출력할 시 에러 발생
a['C'] = 70 #딕셔너리 쌍 추가
print(a['C'])
- 풀이에서는 딕셔너리의 get 함수(해당 key가 없을 경우 default값 반환) 사용했다.
- 함수는 a.get('c', 70)과 같이 사용한다.
Q3 리스트 더하기와 extend 함수 ⭐⭐
#Q3 리스트를 더할 때 +와 extend의 차이
a = [1,2,3]
print(a + [4,5]) #더하기 기호 사용
print(a)
a.extend([4,5])
print(a)
Q4 리스트 총합 구하기 ⭐⭐
#Q4 리스트 총합 구하기
A = [20,55,67,82,45,33,90,87,100,25]
result = 0
for i in A:
if i >= 50:
result += i
print(result)
- 풀이에서는 while문 내 pop함수로 리스트 마지막에서부터 값을 뽑아냈다.
- 그리고 if문을 사용해 50이상의 값인지 판단한 후 총합을 구했다.
Q5 피보나치 함수 ⭐⭐⭐
결괏값 반환에 대해 단단히 잘못 이해해서 풀이의 코드를 적기로 했다.
#Q5 피보나치 함수 만들기
#피보나치 수열: 첫 번째 항이 0, 두 번째 항이 1일 때 이후에 이어지는 항은 이전의 두 항을 더한 값으로 이루어지는 수열
def fib(n):
if n == 0: return 0
if n == 1: return 1
return fib(n-2) + fib(n-1)
for i in range(10):
print(fib(i))
피보나치수열 함수의 결괏값 반환 과정을 생각해보자.
1. fib(0) -> 0 반환
2. fib(1) -> 1 반환
3. fib(2) -> fib(0) + fib(1) -> 1 반환
· · ·
코드에서는 위와 같은 과정을 재귀 함수로 구현했다.
Q6 숫자의 총합 구하기 ⭐⭐
#Q6 입력받은 숫자의 총합 구하기
import sys
x = sys.argv[1]
x = x.split(',') #콤마를 기준으로 숫자 구분
result = 0
for i in x:
result += int(i)
print(result)
풀이에서는 sys 모듈을 사용하지 않고 input 함수로 구현했다.
Q7 한 줄 구구단 ⭐⭐
#Q7 한 줄 구구단 만들기
def multTable(n):
result = []
for i in range(1,10):
result.append(i * n)
return result
n = 2
print('%d 단: ' %n, multTable(n))
Q8 역순 저장 ⭐
#Q8 파일 내용 역순으로 저장하기
f = open("abc.txt", 'r')
lines = f.readlines()
f.close()
lines.reverse()
newLines = ''
for i in lines:
newLines += i
f = open("abc.txt", 'w')
f.write(newLines)
f.close()
풀이에서는 줄 바꿈 문자를 제거할 때 strip 함수를 사용했다.
Q9 평균값 구하기 ⭐⭐⭐
#Q9 텍스트 파일의 숫자 총합과 평균값 구하기
f = open("sample.txt", 'r')
lines = f.readlines()
f.close()
sum = 0
for i in lines:
i.replace('\n','')
sum += int(i)
avg = sum / len(lines)
f = open("sample.txt", 'a')
f.write("sum: %d\n" %sum)
f.write("avg: %d\n" %avg)
f.close()
풀이에서는 줄바꿈 문자를 제거할 때 replace 함수를 쓰지 않고 바로 i를 int형으로 바꿔 계산했다.
Q10 사칙연산 계산기 ⭐⭐
#Q10 클래스로 계산기 만들기
#조건: 리스트를 받아서 합계와 평균을 계산할 수 있어야 함
class Calculator:
def setdata(self, data):
self.data = data
print(self.data)
def sum(self):
sum = 0
for i in self.data:
sum += i
return sum
def avg(self):
sum = 0
for i in self.data:
sum += i
avg = sum / len(self.data)
return avg
cal1 = Calculator()
cal1.setdata([1,2,3,4,5])
print(cal1.sum())
print(cal1.avg())
cal2 = Calculator()
cal2.setdata([6,7,8,9,10])
print(cal2.sum())
print(cal2.avg())
풀이에서는 avg 함수 코드에서 sum 함수 코드를 반복하지 않고 sum = self. sum()과 같이 썼다.
벌써 반이나 풀었네😆
이 글은 책 『Do it! 점프 투 파이썬』을 읽은 후 작성한 글입니다.
'Programming > Python' 카테고리의 다른 글
Do it! 공부단 11일차 | 문제 풀이 (3) (0) | 2021.04.05 |
---|---|
Do it! 공부단 10일차 | 문제 풀이 (2) (0) | 2021.03.31 |
Do it! 공부단 8일차 | ch06 간단한 스크립트와 함수 만들기 (0) | 2021.03.25 |
Do it! 공부단 7일차 | ch05 파이썬 날개달기_내장 함수 (0) | 2021.03.23 |
Do it! 공부단 7일차 | ch05 파이썬 날개달기_예외 처리 (0) | 2021.03.23 |