我正在嘗試撰寫一個接受整數作為輸入并顯示等效羅馬數字的 Python 程式,反之亦然。程式應該用 OOP 撰寫。我現在擁有的是類的結構及其方法,但我無法執行轉換,有人知道使用 OOP 解決我的問題的好方法嗎?這是我使用 Python 學習科學計算的一部分。我對您可能擁有的其他好方法持開放態度,只要它在 OOP 中,它就可以滿足以下給定的測驗用例。
重要要求:
MAX VALUE IS 5000,應該只接受整數值。提供必要的錯誤處理。
轉換應接受大寫和小寫輸入。
輸出后,程式應回傳選單選項。
見 羅馬數字表
import sys
class Convert:
"""Accepts integer as input and display
the equivalent roman numeral and vice-versa.
"""
def __int__(self, user_input):
"""Initialize attributes."""
self.user_input = user_input
def int_to_roman(self):
"""Convert integer input to roman."""
pass
def roman_to_int(self):
"""Convert roman input to integer."""
pass
# Main Menu
def main():
print("\nMENU")
print("[1] Convert an Integer to a Roman Numeral")
print("[2] convert a Roman Numeral to an Integer")
print("[3] exit")
while True:
main()
choice = eval(input("\nEnter your choice: "))
if choice == 1:
# call int_to_roman() method
# after output, return to main()
pass
elif choice == 2:
# call roman_to_int() method
# after output, return to main()
pass
elif choice == 3:
sys.exit()
**TEST CASE 1**
MENU
[1] Convert an Integer to a Roman Numeral
[2] Convert a Roman Numeral to an Integer
[3] exit
Enter your choice: 1
Enter Integer: 1
Output in Roman Numeral is: I
Enter Integer: 3000
Output in Roman Numeral is: MMM
------------------------------------
**TEST CASE 2**
Enter your choice: 2
Enter Roman Numeral: MMM
Output in Integer is: 3000
Enter Roman Numeral: I
Output in Integer is: 1
uj5u.com熱心網友回復:
這是我對此的 OOP 方法的看法。
我們有一個 Number 類,它可以通過 3 種方式之一構建。使用普通的 int、int 的字串表示或羅馬數字。
值的內部表示被轉換為普通的 int。
用戶可以使用類的 asInteger() 和 asRoman() 函式將類的值檢索為 int 或羅馬數字。這些方法不受類的構造方式的影響。
用戶可以使用普通 int 或 Number 類的其他實體來執行加法或減法。
使用示例如下代碼:
class Number:
control = [
(1000, 'M', 1),
(900, 'CM', 2),
(500, 'D', 1),
(400, 'CD', 2),
(100, 'C', 1),
(90, 'XC', 2),
(50, 'L', 1),
(40, 'XL', 2),
(10, 'X', 1),
(9, 'IX', 2),
(5, 'V', 1),
(4, 'IV', 2),
(1, 'I', 1)]
def __init__(self, value):
if isinstance(value, int):
self.value = value
elif value.isdigit():
self.value = int(value)
else:
self.value = self._toInteger(value)
if value != self.toRoman(self.value):
raise ValueError('Not a valid Roman numeral')
def asInteger(self):
return self.value
def asRoman(self):
return self.toRoman(self.value)
def toRoman(self, num):
if num == 0:
return ''
for v, c, _ in Number.control:
if num >= v:
return c self.toRoman(num-v)
def _toInteger(self, num):
result, offset = 0, 0
for c, r, l in Number.control:
while num[offset:].startswith(r):
result = c
offset = l
return result
def __add__(self, o):
if isinstance(o, Number):
self.value = o.value
elif isinstance(o, int):
self.value = o
else:
raise ValueError
return self
def __sub__(self, o):
if isinstance(o, Number):
self.value -= o.value
elif isinstance(o, int):
self.value -= o
else:
raise ValueError
return self
n = Number('MCMI')
m = Number(5)
print(n.asRoman())
n = m
print(n.asRoman())
m = 4
n -= m
print(n.asRoman())
輸出:
MCMI
MCMVI
MCMII
uj5u.com熱心網友回復:
有關整數到羅馬數字轉換的面向物件的方法,請參閱此頁面。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/432949.html
