从数字转换为罗马符号
Convert from numbers to roman notation
我想将数字转换为罗马记数法。我得到了一个如下所示的列表:
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;
我知道这段代码是错误的,但也许不是这个想法。首先,我想遍历字符串编号中的每个 'char' (字符)。为此,我还将定义一个变量 'i',我将其设置为 0。此变量 'i' 将用于 while 循环,只要 i 小于列表的长度,该循环就会执行转换然后我想比较整数 char 是否等于索引 [i][0] 处的 conv 的整数部分(0 因为我总是想与列表中的数字部分进行比较,而 i 因为我想遍历每一种可能性.如果他们匹配然后我想做点什么,我真的不知道在这一步我想做什么,但我想打印出一些东西。在这一步我想告诉程序构造罗马符号,并且还增加 i。否则只是增加 i。我必须让程序理解 12 表示为 XII 等等。任何解决这个问题的想法。谢谢 :)
这是一个超级简单的程序,可以按照您的需要进行转换:
>>> 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'
这是我的做法。该程序循环遍历 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)
我想将数字转换为罗马记数法。我得到了一个如下所示的列表:
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;
我知道这段代码是错误的,但也许不是这个想法。首先,我想遍历字符串编号中的每个 'char' (字符)。为此,我还将定义一个变量 'i',我将其设置为 0。此变量 'i' 将用于 while 循环,只要 i 小于列表的长度,该循环就会执行转换然后我想比较整数 char 是否等于索引 [i][0] 处的 conv 的整数部分(0 因为我总是想与列表中的数字部分进行比较,而 i 因为我想遍历每一种可能性.如果他们匹配然后我想做点什么,我真的不知道在这一步我想做什么,但我想打印出一些东西。在这一步我想告诉程序构造罗马符号,并且还增加 i。否则只是增加 i。我必须让程序理解 12 表示为 XII 等等。任何解决这个问题的想法。谢谢 :)
这是一个超级简单的程序,可以按照您的需要进行转换:
>>> 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'
这是我的做法。该程序循环遍历 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)