我必須創建一個帶有 1 個引數的函式,該函式接受一個字串并將其轉換為假定的整數。例如:輸入-'IV',輸出-4。如果有人能幫忙,我們將不勝感激。另外,我將把代碼供參考。
def FromRoman(string):
count = 0
for i in string:
if i == 'I':
count = 1
elif i == "V":
count = 5
elif i == 'X':
count = 10
elif i == "L":
count = 50
elif i == 'C':
count = 100
elif i == 'D':
count = 500
elif i == 'M':
count = 1000
return count
uj5u.com熱心網友回復:
假設羅馬數字不僅僅是你正在做的單字母檢查(例如像 LXIX),這就是我要做的。
我們將遍歷羅馬數字,對于每個“數字”:
- 如果數字的值小于我們數字中的下一個數字的值(“IV”,I 的值小于 V 的值),我們將從我們的答案中減去較低數字的值
- 否則,我們只需添加數字的值。
這是我在代碼中所說的:
def romanToInt(roman):
valueMap = {'M': 1000,'D': 500 ,'C': 100,'L': 50,'X': 10,'V': 5,'I': 1}
ans = 0
for i in range(len(roman) - 1):
if valueMap[roman[i]] < valueMap[roman[i 1]]:
ans -= valueMap[roman[i]]
else:
ans = valueMap[roman[i]]
return ans valueMap[roman[-1]]
uj5u.com熱心網友回復:
這是一種沒有range并且len似乎有效的方法:
value_map = {'M': 1000, 'D': 500, 'C': 100, 'L': 50, 'X': 10, 'V': 5, 'I': 1}
def from_roman(string: str):
ans = 0
prev_val = float('inf')
for c in string:
val = value_map[c]
ans = val - 2 * prev_val if val > prev_val else val
prev_val = val
return ans
解釋:
在每次迭代中,我們檢查當前數字是否大于之前的數字。例如,IX當我們處于 時X,我們將 10 加到運行總數上,但我們也減去前一個值的 2 倍(I在這種情況下為2 倍)。
測驗:
assert from_roman('II') == 2
assert from_roman('IV') == 4
assert from_roman('V') == 5
assert from_roman('XVIII') == 18
assert from_roman('XIX') == 19
assert from_roman('XXVIII') == 28
assert from_roman('XXIX') == 29
assert from_roman('XC') == 90
assert from_roman('CD') == 400
assert from_roman('CM') == 900
assert from_roman('MMXXI') == 2021
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/327040.html
上一篇:如何列印嵌套字典的串列值
