从数字转换为罗马表示法

jop*_*opp 2 python loops converter while-loop roman-numerals

我想从数字转换为罗马符号.我得到了一个如下所示的列表:

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']]
Run Code Online (Sandbox Code Playgroud)

其中input应该是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']]
Run Code Online (Sandbox Code Playgroud)

对于最后一步,我想使用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;
Run Code Online (Sandbox Code Playgroud)

我知道这段代码是错的,但也许不是这个想法.首先,我想循环遍历字符串编号中的每个'char'(字符).为此,我还将定义一个变量'i',我将其设置为0.此变量'i'将用于while循环,只要i小于list conv的长度,就应该执行该循环.然后我想比较整数char是否等于index [i] [0]处的conv的整数部分(0因为我总是想要与列表中的数字部分进行比较而我是因为我想循环遍历每一个可能性如果他们匹配,那么我想做点什么,我真的不知道我想在这一步做什么,但我想打印一些东西.在这一步我想告诉程序构建罗马符号并且还增加i.否则只增加i.我必须让程序理解12表示为XII,依此类推.任何想法我如何能够解决这个问题.谢谢:)

Rob*_*obᵩ 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)
Run Code Online (Sandbox Code Playgroud)

  • 在Python中,可以将字符串乘以数字.结果是重复字符串.尝试`print("hello"*5)`并观察结果.@HenryLynx (2认同)