반응형
사용자가 입력 한 정수를 로마 숫자로 변환하는 코드를 작성하려고합니다. 내가 지금까지 가지고있는 것은 :
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
반응형
'파이썬' 카테고리의 다른 글
파이썬 Excel 파일을 Pandas 데이터 프레임으로 읽는 더 빠른 방법 (0) | 2020.11.29 |
---|---|
파이썬 두 개의 Pandas 데이터 프레임을 동일한 인덱스로 결합 (0) | 2020.11.29 |
파이썬 키 / 값이 JSON에 있는지 확인 (0) | 2020.11.29 |
파이썬 Spark로 CSV 파일로드 (0) | 2020.11.29 |
파이썬 Python에 어떤 리팩토링 도구를 사용합니까? (0) | 2020.11.29 |
댓글