250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- target
- Level1
- vscode
- python
- 프로그래머스
- time()
- cte
- A태그
- AI
- AI 5기
- 내일배움캠프
- position
- with\
- googlesheet
- WIL
- 가상환경
- git #github #내일배움캠프
- Iterator
- iterable
- itertools
- Display
- onClick
- googleappscript
- 함수실행시간
- gitignore
- 알고리즘
- 함수성능평가
- sql
- 우선순위
- venv
Archives
- Today
- Total
05의 개발 계발
[페어프로그래밍] 230406 영어가 싫어요 .replace() 본문
728x90
페어프로그래밍 결과 코드
def solution(numbers):
# 문자열을 단어로 분리
# 각 단어를 인식해서 숫자로 변환한다.
# 단어와 숫자의 한 쌍의 구조이므로 dict을 사용한다.
number_dict = { "zero" : 0,
"one" : 1,
"two":2,
"three" : 3,
"four":4,
"five": 5,
"six": 6,
"seven" : 7,
"eight" : 8,
"nine": 9
}
for key,value in number_dict.items():
val = str(value) #replace는 문자열만 사용가능하다.
numbers = numbers.replace(key,val)
#num = numbers.replace(key,val) 안됨 !
#다른 변수에 넣어버리면 for문을 돌면서 replace가 업데이트 되지 않는다. 계속 기존 numbers(파라미터)로 덮어씌워짐
# numbers.replace(key,val) --> replace는 변수에 넣어줘야 한다
return int(numbers)
리팩토링 코드 - 변수 직관화, 가독성 해치지 않는 선에서 변수 줄이기
def solution(numbers):
number_dict = {"zero" : 0, "one" : 1, "two":2, "three" : 3, "four":4, "five": 5, "six": 6, "seven" : 7, "eight" : 8, "nine": 9}
for num_str,num_int in number_dict.items():
numbers = numbers.replace(num_str,str(num_int))
return int(numbers)
흠터레스팅 코드
# 타입의 변화보다, 좀 더 수학적인 접근을 한 풀이
def solution(numbers):
dic = {"one" : 1,
"two" : 2,
"three" : 3,
"four" : 4,
"five" : 5,
"six" : 6,
"seven" : 7,
"eight" : 8,
"nine" : 9,
"zero" : 0
}
answer = 0
i = 0
j = 1
N = len(numbers)
while i<N:
var = dic.get(numbers[i:j],False)
if type(var) == int:
answer *= 10
answer += var
i = j
j += 1
else:
j += 1
return answer
시사점 or 새로이 알게된 점
<str>.replace(<str>,<str>)
- 정의 | 내장클래스 str의 인스턴스 메소드
*인스턴스 메소드 = 객체의 self 값을 받아 인스턴스에 직접적으로 영향을 준다.
- 사용법 | 바꿀문자열.replace(이전문자,새문자)
- 결과 | 바꿀문자열에서 이전문자를 탐색하여 새문자로 변환
- Type | string
#1번
def solution(numbers):
number_dict = {"zero" : 0, "one" : 1, "two":2, "three" : 3, "four":4, "five": 5, "six": 6, "seven" : 7, "eight" : 8, "nine": 9}
for num_str,num_int in number_dict.items():
numbers = numbers.replace(num_str,str(num_int))
return int(numbers)
numbers = 'onetwothreefourfivesixseveneightnine'
print(solution(numbers)) #결과 123456789 | int type
1번 코드(리팩토링 코드)의 구조에서는 for loop에서 replace를 사용할 때는 반드시 numbers 에 저장해주어야만 한다.
#2번
def solution(numbers):
number_dict = {"zero" : 0, "one" : 1, "two":2, "three" : 3, "four":4, "five": 5, "six": 6, "seven" : 7, "eight" : 8, "nine": 9}
for num_str,num_int in number_dict.items():
num = numbers.replace(num_str,str(num_int))
return num
numbers = 'onetwothreefourfivesixseveneightnine'
print(solution(numbers)) #결과 'onetwothreefourfivesixseveneight9' | str type
만약 2번 같이 numbers가 아닌 다른변수 num에 저장을 할 경우,
num에는 replace의 값이 누적저장되지 않고 for loop의 마지막 동작인 numbers.replace('nine','9') 만 저장된다.
이는 for loop를 돌 때마다 numbers를 파라미터(함수에 입력된 numbers)에서 참조하기 때문인데,
1번 코드에서는 for loop를 돌 때마다 numbers를 재정의 해주기 때문에 replace의 결과가 누적 적용되어 원하는 결과를 얻을 수 있다.
아직 for loop에 대해 직관력이 부족해 코드리뷰 시 놓쳤던 부분이다.
다음에는 이런 실수가 생기지 않도록 주의하자.
728x90
'내일배움캠프 AI > 페어프로그래밍' 카테고리의 다른 글
[페어프로그래밍] 230418 콜라츠 추측 | while if 삼항연산자 (0) | 2023.04.18 |
---|---|
[페어프로그래밍] 230407 핸드폰 번호 가리기 .replace() (0) | 2023.04.08 |
[페어프로그래밍] 230406 가위 바위 보 dict / .translate / str.maketrans (1) | 2023.04.06 |
[페어프로그래밍] 230405 최빈값 구하기 - .index() (0) | 2023.04.05 |
[페어프로그래밍] 230404 최빈값 구하기 (0) | 2023.04.04 |