【问题标题】:Python misidentification of int valuesPython错误识别int值
【发布时间】:2014-02-23 22:25:40
【问题描述】:

一段时间以来,我一直在编写一个依赖于许多其他函数来返回答案的函数。当我完成它时,它说我在某处错误地使用了“*”。我经历了一切,看不出问题。终于发现是因为前面定义了一个简单的阶乘函数,如下图:

if n == 0:
    return 1
elif n < 0 or (type(float)):
    print "%s is an invalid input; Positive integer value is required" % (n)
else:
    return (n)*fact(n-1)

但是,如果我输入 n = 6,它会返回 6 是一个浮点数,从而退出函数的其余部分,我希望有人能回答为什么会发生这种情况以及如何解决它。

非常感谢

【问题讨论】:

  • type(float) 返回一个类型,所以它总是正确的

标签: python math factorial


【解决方案1】:
elif n < 0 or (type(float)):

即使n &gt;= 0(type(float)) 部分将返回 typefloat 并且这是非空值或 Truthy 值。因此,条件将始终满足。你需要的是,isinstance

elif n < 0 or isinstance(n, float):

但我建议,

elif not isinstance(n, int) or n < 0:

现在,如果n 不是int,则会引发错误。

【讨论】:

    【解决方案2】:

    你的第二个条件应该是isinstance(n, float):

    if n == 0:
        return 1
    elif n < 0 or isinstance(n, float):
        print "%s is an invalid input; Positive integer value is required" % (n)
    else:
        return (n)*fact(n-1)
    

    确实,如下所示,isinstance 检查类型,built-in type 返回一个类型:

    >>> isinstance(1.0, float)
    True
    >>> isinstance(1, float)
    False
    >>> type(float)
    <type 'type'>
    

    【讨论】:

    • 是的,已经完成了,谢谢。感谢您的快速回复
    猜你喜欢
    • 2017-11-08
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多