0

我正在编写一个程序,其中用户输入以 10 为基数的数字,以转换为不同(或相同)基数的数字。

def convert(a,b)

其中 a 是输入,b 是新基数。如果 b 不是整数,如果 b 没有假定值(即空白),或者如果 b 是小于 1 的整数,我被指示让程序返回值“-1”。

我知道如何转换数字,并且我知道如果 b 小于 1 时如何让程序返回 -1,但是如果 b 为空或不是整数,我如何让程序返回 -1?

4

4 回答 4

14

简短的回答:不要。

类型检查不是 Pythonic。尝试做你想做的事情,如果它有效,它有效,如果它没有,它会抛出一个异常。

同样,-1失败时返回也不是 Pythonic,通常,您希望在失败时抛出异常。在某些(罕见的)情况下这是有意义的,但总的来说,这意味着您必须检查该值(而不是只在需要的地方捕获异常)并导致更难发现错误(该值是-1而不是获取例外)。

长答案:如果你真的需要,那么你可以用它isinstance(value, int)来检查一个值是否是一个整数,但是,这破坏了 Python 的鸭子类型,因此在 99.9% 的情况下都是一个坏主意。它也不一定按您期望的方式工作 - 例如,bool它是 的子类int,因此isinstance(True, int)会返回True- 这可能是您想要的,也可能不是。

于 2012-05-21T21:26:33.520 回答
1

这是您可以检查 b 值的一种方法。

def convert(a, b=None):
    if isinstance(b, int) and b > 1:
        return do_convert(a, b)
    return -1
于 2012-05-21T21:30:41.450 回答
0

我的建议是拿走你所有的东西,试着把它变成一个int. 这更像是 Pythonic:它接受任何可以像整数一样工作的东西,即使严格来说它不是 type int。同时,它确保您只需要在int编写代码时担心。

def convert(n):
    try:
       n = int(n)
    except ValueError, TypeError:
       return -1
    # here, do the conversion and return the result
于 2012-05-21T22:06:09.720 回答
0

看起来像家庭作业。你的老师没有教你好的编程实践。

Python 程序员通常按原样取值。如果可能,内置的 python 函数会将变量转换为必要的类型。如果不可能,则由调用函数来采取某种行动。这称为鸭式打字。如果您知道输入将来可能会导致问题,您可以添加一些断言语句以防止错误输入。

您可以使用 isinstance() 函数检查您的变量是否为整数。您可以通过检查变量是否为真来检查它是否为空。

如果这不是家庭作业,那么转换碱基的最佳方法是使用内置int(a, b)函数。

于 2012-05-22T03:08:22.440 回答