Python - 如何使一个输入对应于几个函数

时间:2015-11-27 01:37:28

标签: 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()

这有明显的问题,首先,除了整数以外的所有内容都将被视为罗马数字,并且不考虑添加。

然后我用Google搜索并找到了一个名为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.  此代码也不考虑添加。

1 个答案:

答案 0 :(得分:0)

您可以使用try / except块来查看输入是否为int。这构成了代码的前3行。有关详情,请参阅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。如果不是,你可能应该改变它们(不仅仅是为了我的例子,而是为了良好的代码约定)