我正在编写一个程序,用户在基数10中输入一个数字,以便在不同(或相同)的基础上转换为该数字。
def convert(a,b)
其中a是输入,b是新基数。如果b不是整数,如果b假定没有值(即空白),或者b是小于1的整数,则指示程序返回值“-1”。
我知道如何转换数字,我知道如果b小于1,如何使程序返回-1,但如果b为空或不是整数,如何让程序返回-1? / p>
答案 0 :(得分:14)
简答:不要。
类型检查不是Pythonic。尝试做你想做的事情,如果它有效,它就可以工作,如果没有,它会引发异常。
同样,在失败时返回-1
并不是非常Pythonic,通常,您希望在失败时抛出异常。有一些(罕见)情况这是有道理的,但一般来说,这意味着您必须检查值(而不是仅仅在需要时捕获异常)并且更难发现错误(值为{{1}而不是得到一个例外)。
答案很长:如果你真的需要,那么你可以使用isinstance(value, int)
检查一个值是否是一个整数,然而,这会破坏Python的鸭子类型,因此99.9%的时间是一个坏主意。它也不一定符合您的预期 - 例如,-1
是bool
的子类,因此int
将返回isinstance(True, int)
- 这可能是也可能不是你想要的。
答案 1 :(得分:1)
这是一种可以检查b值的方法。
def convert(a, b=None):
if isinstance(b, int) and b > 1:
return do_convert(a, b)
return -1
答案 2 :(得分:0)
我的建议是采取你所拥有的任何东西并尝试将其变成int
。这更像是Pythonic:它可以像整数一样工作,即使严格来说它不是int
类型。同时,它确保您在编写代码时只需担心int
。
def convert(n):
try:
n = int(n)
except ValueError, TypeError:
return -1
# here, do the conversion and return the result
答案 3 :(得分:0)
看起来像家庭作业。你的老师并没有教你良好的编程习惯。
Python程序员通常会按原样获取值。如果可能,内置的python函数会将变量转换为必要的类型。如果不可能,则由调用函数来执行某种操作。这叫做鸭子打字。 如果您知道输入可能会在将来导致问题,您可以添加一些断言语句以防止输入错误。
您可以使用isinstance()函数检查您的变量是否为整数。您可以通过检查变量是否为真来检查它是否为空。
如果这不是家庭作业,转换基础的最佳方法是使用内置的int(a, b)
函数。