#2. 사전공부 - 파이썬 프로그램 작성

나른한 개발자·2021년 11월 30일
0

studylog

목록 보기
2/45

2021.10.21 작성

오늘 푼 문제는 총합과 평균을 구하는 메서드를 가진 Calculator 클래스 작성입력된 문자열에 특수문자 삽입하기이다.


1. 예시와 같이 작동하는 클래스 Calculator를 작성하라

class Calculator:
    def __init__(self, numbers):
        self.numbers = numbers

    def sum(self):
        total = 0
        for num in self.numbers:
            total += num
        return total

    def avg(self):
        total = self.sum()
        return total / len(self.numbers)
        
cal1 = Calculator([1,2,3,4,5])
print(cal1.sum()) # 출력: 15
print(cal1.avg()) # 출력: 3.0

cal2 = Calculator([6,7,8,9,10])
print(cal2.sum()) # 출력 40
print(cal2.avg()) # 출력: 8.0

2. 숫자로 구성된 문자열을 입력으로 받아 홀수가 연속되어있는 경우 "-", 짝수가 연속되어있는 경우 "*"를 삽입하라
def dashInsert(strInt):
	result = strInt
	count = 0 # 특수문자 추가 시 인덱스 조정을 위한 변수
	for i in range(1, len(strInt)):
		num1 = int(strInt[i-1]) 
		num2 = int(strInt[i])

		if num1 % 2 != 0 and num2 % 2 != 0: # 두 원소가 연속되는 홀수인 경우
			result = result[:i+count] + "-" + result[i+count:] # 인덱스를 이용하여 특수문자 추가
			count += 1
		elif num1 % 2 == 0 and num2 % 2 == 0: # 두 원소가 연속되는 짝수인 경우
			result = result[:i+count] + "*" + result[i+count:] # 인덱스를 이용하여 특수문자 추가
			count += 1
	return result # 결과 반환
	
print(dashInsert("4546793")) # 출력: 454*67-9-3
print(dashInsert("11111"))	# 출력: 1-1-1-1-1
print(dashInsert("1122451661791"))	# 출력: 1-12*2*45-16*61-7-9-1

문자열 그대로 인덱스를 사용하여 원소의 홀/짝을 검사하여 +로 특수문자를 추가하였다

아래 코드는 점프투파이썬에서 map()과 enumerate() 이용하였길래 참고 차 작성해보았다.

def dashInsert(strInt):
	numberList = list(map(int, strInt))
    result = []
    for index, element in enumerate(numberList):
    	result.append(str(element))
        if index < len(numberList)-1:
        	is_odd = element % 2 == 1
            is_nextOdd = numberList[index+1] % 2 == 1
            if is_odd and is_nextOdd:
            	result.append("-")
            if not is_odd and not is_nextOdd:
            	result.append("*")
    result "".join(result)

오늘 배운 점은 다음과 같다.

첫번째. map()의 쓰임. 내가 작성한 코드의 경우 반복문 안에서 원소들을 꺼내어 하나씩 int로 변환하여 새로 저장하는 과정을 거쳤지만, map을 이용하면 반복문을 사용하지 않아도 된다는 점이다. 내 코드의 경우 입력받은 문자열을 리스트로 변환하지 않았지만 리스트로 바꿀 경우 map 함수를 쓰는 것이 좋아보인다. 또한 List Comprehesion

두번째. enumerate()의 쓰임. 리스트의 원소뿐만 아니라 인덱스값이 함께 필요한 경우, 또는 반복횟수를 알아야할 경우 enumerate 함수를 쓰면 편리하다는 점.


위의 작성한 내용이 사실 파이썬 문법에서 이미 본 내용이긴 하지만 막상 프로그램을 작성할 때는 떠오르지 않았다. 역시 백문이불여일타. 많이 쳐보고 익숙해져서 다음에는 이런 함수들을 최대한 활용하여 프로그램을 짜보고 싶다.

이제 문제가 얼마 남지 않았는데, 어서 파이썬을 공부하고 MySQL 공부로 넘어가고 싶다!!

MySQL 또한 공부한 이력이 있지만 얕게 공부한터라 제대로 DBMS에 대해 공부해보고 싶다. 시간이 생각보다 많지 않으니 지체없이 차근히 넘어가보자!


참고: 점프투파이썬

profile
Start fast to fail fast

0개의 댓글