将数字转换为罗马数字

3

我希望将数字转换为罗马数字表示法。我有一个列表,看起来像这样:

conv = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'],
        [ 100, 'C'], [ 90, 'XC'], [ 50, 'L'], [ 40, 'XL'],
        [  10, 'X'], [  9, 'IX'], [  5, 'V'], [  4, 'IV'],
        [   1, 'I']]

输入应为介于0和3999之间的整数。因此,我想构建一个函数,它接受一个参数(整数)并将其转换。我在解决这个问题时遇到了一些困难。任何帮助都将不胜感激。以下是我的想法:

首先,我想要输入一个整数并将其存储在一个变量中,所以我将使用类似于以下代码的东西:

number = input("Enter a number between 0 and 3999: ")

conv = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'],
        [ 100, 'C'], [ 90, 'XC'], [ 50, 'L'], [ 40, 'XL'],
        [  10, 'X'], [  9, 'IX'], [  5, 'V'], [  4, 'IV'],
        [   1, 'I']]

最后一步,我想使用2个循环来解决实际问题。代码大致如下:

for char in number:
    i = 0;
    while i < len(conv):
        if int(char) == int(conv[i][0]):
            print(conv[i][1])
            i += 1;
        else:
            i += 1;

我知道这段代码是错误的,但可能不是思路有问题。首先,我想要循环遍历字符串 number 中的每个字符 'char'。为此,我还定义了一个变量 'i',将其设置为0。这个变量 'i' 将在 while 循环中使用,只要 i 小于列表 conv 的长度就应该继续执行。然后,我想要比较整数 char 是否等于列表 conv 中索引 [i][0](因为我总是想要比较列表中的数字部分,所以是 0,而 i 则是因为我想要遍历每种可能性)。如果它们匹配,那么我想要做一些事情,我不知道我想要在这一步做什么,但我想要打印出一些东西。在这个步骤中,我想要让程序构建罗马符号,并增加 i。否则只增加 i。我必须让程序理解,12表示为XII等等。你有什么想法来解决这个问题吗?谢谢 :)

2个回答

5

我会这样做。该程序通过循环遍历conv数组,在每个步骤中将适当的罗马数字附加到result

def arabic_to_roman(number):
    conv = [[1000, 'M'], [900, 'CM'], [500, 'D'], [400, 'CD'],
            [ 100, 'C'], [ 90, 'XC'], [ 50, 'L'], [ 40, 'XL'],
            [  10, 'X'], [  9, 'IX'], [  5, 'V'], [  4, 'IV'],
            [   1, 'I']]
    result = ''
    for denom, roman_digit in conv:
        result += roman_digit*(number/denom)
        number %= denom
    return result

for i in 1,4,9,16,25,49,81,1963,2015:
    print i, arabic_to_roman(i)

我不明白如何将字符串 roman_digit 乘以数字 roman_digit*(number/denom)。 - Henry Lynx
2
在Python中,可以将一个字符串乘以一个数字。结果是该字符串的重复。尝试使用print("hello" * 5)并观察结果。@HenryLynx - Robᵩ

3
这是一个非常简单的程序,可以按照您的要求进行转换:
>>> num = 1423
>>> roman = ''
>>> i = 0 #initiate i = 0
>>> while num > 0:
    while conv[i][0] > num: i+=1 #increments i to largest value greater than current num
    roman += conv[i][1] #adds the roman numeral equivalent to string
    num -= conv[i][0] #decrements your num


>>> roman
'MCDXXIII'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接