본문 바로가기

Programming/Python

Do it! 공부단 9일차 | 문제 풀이 (1)

파이썬 초보 탈출 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)

cmd에서 실행

풀이에서는 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! 점프 투 파이썬』을 읽은 후 작성한 글입니다.

 

Do it! 점프 투 파이썬

코딩을 처음 배우는 중·고등학생과 나만의 경쟁력을 갖추고 싶은 문과생, 소프트웨어 시대에 대비하여 새로운 스펙을 준비하려는 직장인까지! 모두 ‘점프 투 파이썬’으로 프로그래밍을 시작

www.easyspub.co.kr