2015-11-02 85 views
1

我想從數字轉換爲羅馬符號。我一直在考慮,看起來像這樣的列表:從數字轉換爲羅馬符號

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; 

我知道這段代碼是錯誤的,但也許不是主意。首先,我想遍歷字符串編號中的每個「字符」(字符)。爲此,我還將定義一個變量'i',將其設置爲0.此變量'i'將用於while循環,只要i小於list conv的長度,就應執行該循環。然後我想比較整數char是否等於index [i] [0]處的conv的整數部分(0,因爲我總是想比較列表中的數字部分,因爲我想循環遍歷所有可能性。如果他們匹配,我想做點什麼,我不知道我想在這一步做什麼,但我想打印一些東西。在這一步,我想告訴程序構建羅馬符號,並增加我,否則只是增加我,我必須讓程序明白,12代表XII等。任何想法如何我可以解決這個問題。謝謝:)

回答

1

這是一個超級簡單的程序它會將它轉換成你想要的:

>>> 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' 
4

這是我該怎麼做的。該程序循環遍歷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) 
+0

我不明白它是如何預計乘以roman_digit這是一個字符串向數字roman_digit *(數量/ DENOM) –

+2

在Python中,可以乘以一個數的字符串。結果是重複字符串。嘗試'print(「hello」* 5)'並觀察結果。 @HenryLynx –