2015-11-27 76 views
0

我的程序應該有一個輸入,您可以在其中編寫阿拉伯數字,羅馬數字或添加羅馬數字。例如:Python - 如何使一個輸入對應於幾個函數

Year: 2001 
... MMI 

Year: LX 
... 60 

Year: MI + CI + I 
... MCIII 

Year: ABC 
... That's not a correct roman numeral 

嗯,我想你會得到這筆交易。首先,我試圖用這樣的:

def main(): 


    year = input ("Year: ") 


    if type(int(year)) == type(1): 
     arab_to_rome(year) 

    else: 
     rome_to_arab(year) 
main() 

這有明顯的問題,首先,不是整數否則一切都將被認爲是羅馬數字,它並不需要另外考慮。

然後我搜索了一下,發現了一個叫isinstance的東西。這是嘗試的結果:

def main(input): 

    year = input ("Year: ") 


    if isinstance(input,int): 
     arab_to_rome(year) 

    elif isinstance(input,str): 
     rome_to_arab (year) 
    else: 
     print ("Error") 
main() 

這也有問題。我收到一條錯誤消息,指出:Invalid syntax. 此代碼不考慮另外考慮。

+0

請寫你的代碼到的問題,使我們可以將其複製到與它合作。 – Knells

+0

考慮在輸入字符串中應用'.split(「+」)'來檢測添加項並隔離術語 – Julien

回答

0

您可以使用try/except塊,看是否輸入是int。這構成了代碼的前三行。有關更多信息,請參閱this問題。

year = input('Year: ') 
try: 
    print(arab_to_rome(int(year))) 
except ValueError: 
    result = 0 
    for numeral in year.split('+'): 
     numeral.replace(' ','') 
     result += rome_to_arab(numeral) 
    print(result) 

except後面的部分是一個簡單的方法來處理另外,如果你願意,你可以遷移到您的rome_to_arab功能這一點。它將每個+上的字符串分開,然後將阿拉伯計算的結果一起添加以產生完整的阿拉伯語結果。 replace()函數擺脫了任何額外的空間,以確保它不會破壞其他方法。有關split()replace()的問題或更多信息,請參閱this

由於您沒有向我們展示我將假設的轉換方法arab_to_rome返回stringrome_to_arab返回int。如果不是你應該改變它們,這樣他們(不只是爲我的例子,但良好的代碼約定)

相關問題