본문 바로가기
프로그램

[파이썬] 문제 : 문자열에서 분수와 단어 분리

by 오디세이99 2023. 11. 18.
728x90
반응형

(문제)

문자열에서 원하는 숫자와 문자를 어떻게 뽑나요?
예시 3개)
# >>> decompose('What is 4/7 wallaby, 1/4 parakeet and 3/5 perch?')
# (['wallaby', 'parakeet', 'perch'], [Fraction(4, 7), Fraction(1, 4), Fraction(3, 5)])

# >>> decompose('What is -1/3 ALPACA and -7/9 PARTRIDGE?')
# (['ALPACA', 'PARTRIDGE'], [Fraction(-1, 3), Fraction(-7, 9)])

# >>> decompose('What is 3/7 Manatee, 3/7 cheetah and -4/7 hamster?')
# (['Manatee', 'cheetah', 'hamster'], [Fraction(3, 7), Fraction(3, 7), Fraction(-4, 7)])

 

(방법)

from fractions import Fraction
import re

def decompose(input_string):
    words = input_string.split()                 # 문자열을 공백으로 분리하여 단어들을 추출
    
    fractions_list = []                          # 분수와 단어를 저장할 리스트를 초기화
    words_list = []

    for idx in range(len(words)):                # 단어들을 순회하면서 분수인지 확인
        word = words[idx]
        try:
            fraction_value = Fraction(word)       # 분수로 변환 가능한 경우 분수 값을 저장
            fractions_list.append(fraction_value)
        
            clean_str = re.sub(r'[^\w\s]', '', words[idx+1])   # ? 등의 특수문자들 제거(re는 정규화 패키지)
            words_list.append(clean_str)       # 분수뒤 단어 추출해서 저장

        except ValueError:
            pass

    return words_list, fractions_list

# 예시 입력
input_string = "What is 4/7 wallaby, 1/4 parakeet and 3/5 perch?"
result = decompose(input_string)
print(result)

728x90
반응형

댓글