본문 바로가기
파이썬

파이썬 정수를 로마 숫자로 변환하는 기본 프로그램?

by º기록 2020. 11. 29.
반응형

사용자가 입력 한 정수를 로마 숫자로 변환하는 코드를 작성하려고합니다. 내가 지금까지 가지고있는 것은 :


generate_all_of_numeral 함수의 요점은 각 특정 숫자에 대한 문자열을 생성한다는 것입니다. 예를 들어 generate_all_of_numeral (2400, 'M', 2000) 은 문자열 'MM'을 반환합니다.

메인 프로그램에 어려움을 겪고 있습니다. 나는 M에 대한 로마 숫자 개수를 찾아 변수 M에 저장하기 시작합니다. 그런 다음 M의 수에 기호 값을 곱하여 다음으로 큰 숫자에 대해 작업 할 다음 값을 제공합니다.

올바른 방향으로 고개를 끄덕입니까? 지금 내 코드는 아무것도 인쇄하지 않습니다.

 

해결 방법

 

이를 처리하는 가장 좋은 방법 중 하나는 divmod 함수를 사용하는 것입니다. 주어진 숫자가 가장 높은 것부터 가장 낮은 것까지 로마 숫자와 일치하는지 확인합니다. 매 경기마다 해당 캐릭터를 반환해야합니다.

모듈로 함수를 사용할 때 일부 숫자에는 나머지가 있으므로 나머지에도 동일한 논리를 적용합니다. 분명히 재귀를 암시하고 있습니다.

아래 내 대답을 참조하십시오. OrderedDict 를 사용하여 목록을 "아래로"반복 할 수 있는지 확인한 다음 divmod 의 재귀를 사용하여 일치 항목을 생성합니다. 마지막으로 생성 된 모든 답변을 join 하여 문자열을 생성합니다.

from collections import OrderedDict

def write_roman(num):

    roman = OrderedDict()
    roman[1000] = "M"
    roman[900] = "CM"
    roman[500] = "D"
    roman[400] = "CD"
    roman[100] = "C"
    roman[90] = "XC"
    roman[50] = "L"
    roman[40] = "XL"
    roman[10] = "X"
    roman[9] = "IX"
    roman[5] = "V"
    roman[4] = "IV"
    roman[1] = "I"

    def roman_num(num):
        for r in roman.keys():
            x, y = divmod(num, r)
            yield roman[r] * x
            num -= (r * x)
            if num <= 0:
                break

    return "".join([a for a in roman_num(num)])

시도해보기 :

num = 35
print write_roman(num)
# XXXV

num = 994
print write_roman(num)
# CMXCIV

num = 1995
print write_roman(num)
# MCMXCV

num = 2015
print write_roman(num)
# MMXV

 

참조 페이지 https://stackoverflow.com/questions/28777219

 

 

반응형

댓글