我正在编写一个程序,其中用户输入以 10 为基数的数字,以转换为不同(或相同)基数的数字。
def convert(a,b)
其中 a 是输入,b 是新基数。如果 b 不是整数,如果 b 没有假定值(即空白),或者如果 b 是小于 1 的整数,我被指示让程序返回值“-1”。
我知道如何转换数字,并且我知道如果 b 小于 1 时如何让程序返回 -1,但是如果 b 为空或不是整数,我如何让程序返回 -1?
我正在编写一个程序,其中用户输入以 10 为基数的数字,以转换为不同(或相同)基数的数字。
def convert(a,b)
其中 a 是输入,b 是新基数。如果 b 不是整数,如果 b 没有假定值(即空白),或者如果 b 是小于 1 的整数,我被指示让程序返回值“-1”。
我知道如何转换数字,并且我知道如果 b 小于 1 时如何让程序返回 -1,但是如果 b 为空或不是整数,我如何让程序返回 -1?
简短的回答:不要。
类型检查不是 Pythonic。尝试做你想做的事情,如果它有效,它有效,如果它没有,它会抛出一个异常。
同样,-1
失败时返回也不是 Pythonic,通常,您希望在失败时抛出异常。在某些(罕见的)情况下这是有意义的,但总的来说,这意味着您必须检查该值(而不是只在需要的地方捕获异常)并导致更难发现错误(该值是-1
而不是获取例外)。
长答案:如果你真的需要,那么你可以用它isinstance(value, int)
来检查一个值是否是一个整数,但是,这破坏了 Python 的鸭子类型,因此在 99.9% 的情况下都是一个坏主意。它也不一定按您期望的方式工作 - 例如,bool
它是 的子类int
,因此isinstance(True, int)
会返回True
- 这可能是您想要的,也可能不是。
这是您可以检查 b 值的一种方法。
def convert(a, b=None):
if isinstance(b, int) and b > 1:
return do_convert(a, b)
return -1
我的建议是拿走你所有的东西,试着把它变成一个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
看起来像家庭作业。你的老师没有教你好的编程实践。
Python 程序员通常按原样取值。如果可能,内置的 python 函数会将变量转换为必要的类型。如果不可能,则由调用函数来采取某种行动。这称为鸭式打字。如果您知道输入将来可能会导致问题,您可以添加一些断言语句以防止错误输入。
您可以使用 isinstance() 函数检查您的变量是否为整数。您可以通过检查变量是否为真来检查它是否为空。
如果这不是家庭作业,那么转换碱基的最佳方法是使用内置int(a, b)
函数。