Convert from numbers to roman notation
本问题已经有最佳答案,请猛点这里访问。
我想把数字转换成罗马符号。我得到了一个列表,如下所示:
1 2 3 4 | 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之间的整数。所以我想构造一个函数,它接受一个参数(整数)并转换它。我有点问题要解决。任何帮助都将不胜感激。我是这样想的:
首先,我需要一个整数的输入,它存储在一个变量中,所以我将使用
1 2 3 4 5 6 | 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']] |
号
最后一步,我想用两个循环来解决实际问题。看起来像这样:
1 2 3 4 5 6 7 8 | 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; |
我知道这个代码是错误的,但也许不是这个想法。首先,我想循环遍历字符串编号中的每个"char"(字符)。为此,我还将定义一个变量"i",并将其设置为0。这个变量"i"将在while循环中使用,只要我小于list conv的长度,就应该执行while循环。然后,我想比较整数char是否等于conv在索引[i][0](0)处的整数部分,因为我总是想与list中的数字部分进行比较,而我想遍历所有可能的部分。如果它们匹配,那么我想做点什么,我不知道在这一步我想做什么,但我想打印出一些东西。在这个步骤中,我想告诉程序构造罗马符号,也可以是增量i。否则,只需要增量i。我必须让程序理解12表示为xii等等。有什么办法可以解决这个问题吗?谢谢:)
我会这样做的。这个程序循环通过
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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) |
号
这是一个非常简单的程序,它将按您的需要转换:
1 2 3 4 5 6 7 8 9 10 11 | >>> 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' |