Python代碼閱讀(第93篇):整數(shù)轉(zhuǎn)換成羅馬數(shù)字表示

Python 代碼閱讀合集介紹:為什么不推薦Python初學(xué)者直接看項(xiàng)目源碼

本篇閱讀的代碼實(shí)現(xiàn)了將1-3999之間的整數(shù)轉(zhuǎn)化成羅馬數(shù)字表示陆馁。

本篇閱讀的代碼片段來(lái)自于30-seconds-of-python笛钝。

to_roman_numeral

def to_roman_numeral(num):
  lookup = [
    (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'),
  ]
  res = ''
  for (n, roman) in lookup:
    (d, num) = divmod(num, n)
    res += roman * d
  return res

# EXAMPLES
to_roman_numeral(3) # 'III'
to_roman_numeral(11) # 'XI'
to_roman_numeral(1998) # 'MCMXCVIII'

to_roman_numeral函數(shù)接受一個(gè)1-3999之間的整數(shù)撕贞,返回其羅馬數(shù)字表示形式。

函數(shù)從大到小遍歷羅馬數(shù)字符號(hào)焊切,并使用divmod()函數(shù),計(jì)算輸入的整數(shù)包含幾個(gè)該符號(hào)。然后在結(jié)果字符串中依序加入對(duì)應(yīng)個(gè)數(shù)的羅馬數(shù)字符號(hào)镰吵。同時(shí)divmod()函數(shù)計(jì)算得到的余數(shù),將參與下一個(gè)羅馬符號(hào)的計(jì)算挂签。

整個(gè)過(guò)程的思想是最大的羅馬數(shù)字符號(hào)代表的十進(jìn)制數(shù)字開始疤祭,逐個(gè)計(jì)算函數(shù)輸入的整數(shù)包含幾個(gè)符號(hào)。然后用減去這幾個(gè)符號(hào)所代表的數(shù)值之后饵婆,再進(jìn)行下一輪迭代勺馆。繼續(xù)計(jì)算剩余的數(shù)值包含多少次一級(jí)大小的羅馬數(shù)字。

divmod(a, b)將兩個(gè)(非復(fù)數(shù))數(shù)字作為實(shí)參侨核,并在執(zhí)行整數(shù)除法時(shí)返回一對(duì)商和余數(shù)草穆。對(duì)于混合操作數(shù)類型,適用雙目算術(shù)運(yùn)算符的規(guī)則搓译。對(duì)于整數(shù)悲柱,結(jié)果和(a // b, a % b)一致。也就是說(shuō)(商, 余數(shù)) = (d, num) = divmod(num, n)侥衬。函數(shù)中的d代表了包含幾個(gè)本次迭代中的羅馬符號(hào)诗祸,num為下次迭代中需要使用的剩余數(shù)值。

使用標(biāo)準(zhǔn)的規(guī)則能夠表示的最大數(shù)字是3999(MMMCMXCIX)轴总,因?yàn)榱_馬數(shù)字通常用于表示年份直颅,所以今天可能需要的最大羅馬數(shù)字是MMXXII(2022),對(duì)于更大的羅馬數(shù)字并沒(méi)有實(shí)際需求怀樟。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末功偿,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子往堡,更是在濱河造成了極大的恐慌械荷,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件虑灰,死亡現(xiàn)場(chǎng)離奇詭異吨瞎,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)穆咐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門颤诀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)字旭,“玉大人,你說(shuō)我怎么就攤上這事崖叫∫糯荆” “怎么了?”我有些...
    開封第一講書人閱讀 156,872評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵心傀,是天一觀的道長(zhǎng)屈暗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)脂男,這世上最難降的妖魔是什么养叛? 我笑而不...
    開封第一講書人閱讀 56,415評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮疆液,結(jié)果婚禮上一铅,老公的妹妹穿的比我還像新娘。我一直安慰自己堕油,他們只是感情好潘飘,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,453評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掉缺,像睡著了一般卜录。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上眶明,一...
    開封第一講書人閱讀 49,784評(píng)論 1 290
  • 那天艰毒,我揣著相機(jī)與錄音,去河邊找鬼搜囱。 笑死丑瞧,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蜀肘。 我是一名探鬼主播绊汹,決...
    沈念sama閱讀 38,927評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扮宠!你這毒婦竟也來(lái)了西乖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤坛增,失蹤者是張志新(化名)和其女友劉穎获雕,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體收捣,經(jīng)...
    沈念sama閱讀 44,137評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡届案,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,472評(píng)論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了罢艾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片楣颠。...
    茶點(diǎn)故事閱讀 38,622評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嫁乘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出球碉,到底是詐尸還是另有隱情,我是刑警寧澤仓蛆,帶...
    沈念sama閱讀 34,289評(píng)論 4 329
  • 正文 年R本政府宣布睁冬,位于F島的核電站,受9級(jí)特大地震影響看疙,放射性物質(zhì)發(fā)生泄漏豆拨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,887評(píng)論 3 312
  • 文/蒙蒙 一能庆、第九天 我趴在偏房一處隱蔽的房頂上張望施禾。 院中可真熱鬧,春花似錦搁胆、人聲如沸弥搞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)攀例。三九已至,卻和暖如春顾腊,著一層夾襖步出監(jiān)牢的瞬間粤铭,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工杂靶, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留梆惯,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,316評(píng)論 2 360
  • 正文 我出身青樓吗垮,卻偏偏與公主長(zhǎng)得像垛吗,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子抱既,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,490評(píng)論 2 348

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