将整数转换为罗马数字(python)

时间:2016-09-25 10:19:56

标签: python python-2.7 function roman-numerals

我知道在这个主题上有很多类似的问题。但我仍有一些疑问需要明确。

def int_to_roman(input):

    if type(input) != type(1):
        raise TypeError, "expected integer, got %s" % type(input)
    if not 0 < input < 4000:
        raise ValueError, "Argument must be between 1 and 3999"   
    ints = (1000, 900,  500, 400, 100,  90, 50,  40, 10,  9,   5,  4,   1)
    nums = ('M',  'CM', 'D', 'CD','C', 'XC','L','XL','X','IX','V','IV','I')
    result = ""
    for i in range(len(ints)):
        count = int(input / ints[i])
        result += nums[i] * count
        input -= ints[i] * count
    return result

我真的不明白下面的代码:

for i in range(len(ints)):
    count = int(input / ints[i])
    result += nums[i] * count
    input -= ints[i] * count

的作用:

for i in range (len(ints)):

它意味着&#39; 1000&#39; 900&#39;&#39; 800&#39; (分别为整数)或者它是指13(整数为13的整数)?

count = int(input / ints[i])

ints [i]是什么意思?

有人请解释这些代码吗?最好是你可以展示一些例子(比如代替数字并展示它是如何运作的)

3 个答案:

答案 0 :(得分:1)

两个列表的名称很糟糕(intsnums)。

但是,从最高罗马数字(nums[0] =&#39; M&#39;)开始,循环找出该数字(ints[0] = 1000)的值除以多少次输入值,并将数字多次附加到结果字符串。

然后它从输入中减去刚添加到结果(ints[0] * count)的字符串的值,然后移到下一个罗马数字(nums[1])以使用该余数重复该过程。

答案 1 :(得分:1)

两个列表intsnums的长度相同。循环遍历ints的长度,这意味着变量i可以访问任一列表的相同位置,彼此匹配。

如果我们逐步完成循环,count将被赋予输入的整数值除以ints中的第一个数字,即1000.如果input变量是,则说,10,然后10/1000将得到一个数字<1,并且在结果上使用int()将导致它将0分配给count。当0乘以nums的匹配字符串时,分配的结果基本上没有。然后从input中减去相同的金额,在这种情况下保持不变。

最终,当分割结果为数字> = 1时,循环将达到一个点,因此以下步骤将执行某些操作。

假设int(input / ints[i])的结果为3 "X" * 3会产生"XXX",会将result添加到inputfor f in *.mp4 *.m4v; do ran=$(printf "%03.0f" $((RANDOM%300))); myFile="${f}"; mv -f "${myFile}" "${ran}-${myFile}"; mv -f "${myFile%.*}.srt" "${ran}-${myFile%.*}.srt"; done 会减少def addVectors(vector1, vector2): angle1, length1 = vector1 angle2, length2 = vector2 x = math.sin(angle1) * length1 + math.sin(angle2) * length2 y = math.cos(angle1) * length1 + math.cos(angle2) * length2 length = math.hypot(x, y) angle = 0.5 * math.pi - math.atan2(y, x) return (angle, length) 适当的数量,在这种情况下为30.所以,直到循环结束。

答案 2 :(得分:0)

def romanize(number):
   n2rMap = {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'}
   roman = ""
   for key in n2rMap.keys():
      count = int(number / key)
      roman += n2rMap[key] * count
      number -= key * count
   return roman
相关问题