羅馬數(shù)字與阿拉伯?dāng)?shù)字相互轉(zhuǎn)換

#!/usr/bin/env python3
'''
thousands - 0 to 3 Ms
 hundreds - 900 (CM),400 (CD),0-300 (0 to 3 Cs),
            or 500-800 (D,followed by 0 to 3 Cs)
     tens - 90 (XC),40 (XL),0-30 (0 to 3 Xs)
            or 50-80 (L,followed by 0 to 3 Xs)
     ones - 9 (IX),4 (IV),0-3 (0 to 3 Is)
            or 5-8 (V,fowllowed by 0 to 3 Is)

the range of the number need to be converted is 1-3999
'''
import re


def isRoman(num):
    pattern = '^M{0,3}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})'
    if re.search(pattern, num):
        return 1
    else:
        return 0


def arabic2roman(num):
    if num > 3999 or num < 1:
        print('num is out of range (1-3999)')
        return
    dict = {
        0: ('', 'M', 'MM', 'MMM'),
        1: ('', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM'),
        2: ('', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC'),
        3: ('', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX')
    }

    roman = ''
    roman += dict[0][num // 1000 % 10]
    roman += dict[1][num // 100 % 10]
    roman += dict[2][num // 10 % 10]
    roman += dict[3][num % 10]
    return roman


def roman2arabic(roman):
    if isRoman(roman) == 0:
        print('it is not a valid roman number !')
        return
    num = 0
    dict = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1}
    for i in range(len(roman)-1):
        if dict[roman[i]] < dict[roman[i+1]]:
            num -= dict[roman[i]]
        else:
            num += dict[roman[i]]
    return num+dict[roman[-1]]

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末实撒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌疚漆,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件亚亲,死亡現(xiàn)場(chǎng)離奇詭異埃仪,居然都是意外死亡响谓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén)毁嗦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)亲茅,“玉大人,你說(shuō)我怎么就攤上這事】寺啵” “怎么了茵肃?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,780評(píng)論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)袭祟。 經(jīng)常有香客問(wèn)我验残,道長(zhǎng),這世上最難降的妖魔是什么巾乳? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,388評(píng)論 1 283
  • 正文 為了忘掉前任您没,我火速辦了婚禮,結(jié)果婚禮上胆绊,老公的妹妹穿的比我還像新娘氨鹏。我一直安慰自己,他們只是感情好辑舷,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,430評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布喻犁。 她就那樣靜靜地躺著槽片,像睡著了一般何缓。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上还栓,一...
    開(kāi)封第一講書(shū)人閱讀 49,764評(píng)論 1 290
  • 那天碌廓,我揣著相機(jī)與錄音,去河邊找鬼剩盒。 笑死谷婆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的辽聊。 我是一名探鬼主播纪挎,決...
    沈念sama閱讀 38,907評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼跟匆!你這毒婦竟也來(lái)了异袄?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,679評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤玛臂,失蹤者是張志新(化名)和其女友劉穎烤蜕,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體迹冤,經(jīng)...
    沈念sama閱讀 44,122評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讽营,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,459評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了泡徙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片橱鹏。...
    茶點(diǎn)故事閱讀 38,605評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莉兰,到底是詐尸還是另有隱情狡蝶,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評(píng)論 4 329
  • 正文 年R本政府宣布贮勃,位于F島的核電站贪惹,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏寂嘉。R本人自食惡果不足惜奏瞬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,867評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望泉孩。 院中可真熱鬧硼端,春花似錦、人聲如沸寓搬。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,734評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)句喷。三九已至镣典,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間唾琼,已是汗流浹背兄春。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,961評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锡溯,地道東北人赶舆。 一個(gè)月前我還...
    沈念sama閱讀 46,297評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像祭饭,于是被迫代替她去往敵國(guó)和親芜茵。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,472評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容