gpt4 book ai didi

python - 将整数转换为罗马数字的基本程序?

转载 作者:太空狗 更新时间:2023-10-30 01:39:15 25 4
gpt4 key购买 nike

我正在尝试编写一个代码,将用户输入的整数转换为其等效的罗马数字。到目前为止我所拥有的是:

screenshot of my code

generate_all_of_numeral 函数的要点是为每个特定数字创建一个字符串。例如,generate_all_of_numeral(2400, 'M', 2000) 将返回字符串 'MM'

我正在努力处理主程序。我首先找到 M 的罗马数字计数,并将其保存到变量 M 中。然后我减去 M 的数量乘以符号值,得到下一个最大数字的下一个值。

有没有指出正确的方向?现在我的代码甚至没有打印任何东西。

最佳答案

处理此问题的最佳方法之一是使用 divmod 函数。您检查给定的数字是否与从最高到最低的任何罗马数字相匹配。在每场比赛中,您都应该返回相应的角色。

当您使用取模函数时,有些数字会有余数,因此您也可以对余数应用相同的逻辑。显然,我在暗示递归。

请看下面我的回答。我使用 OrderedDict 来确保我可以“向下”迭代列表,然后我使用 divmod 的递归来生成匹配项。最后,我加入所有生成的答案以生成一个字符串。

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

关于python - 将整数转换为罗马数字的基本程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28777219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com