学习在Python类中定义函数并混淆我的代码输出

时间:2013-02-16 18:37:17

标签: python python-2.7

问题:编写一个Python函数square,它接受一个数字并返回该数字的平方。

此函数接收一个数字并返回一个数字。

代码:

def square(x):
    '''
    x: int or float.
    '''

我的代码:

def square(x):
    '''
    x: int or float.
    '''
    x = x * x
    print x

输出:

Test: square(-5.0)
Your output:
25.0
None

Correct output:
25.0


Test: square(3.17)
Your output:
10.0489
None

Correct output:
10.0489

Test: square(-3.4)
Your output:
11.56
None

Correct output:
11.559999999999999

为什么我的代码打印出来(a)“无”,在某些情况下(b)错误答案?

2 个答案:

答案 0 :(得分:3)

如果您没有从函数返回任何值,默认情况下它将返回None

因此,如果您尝试打印函数的返回值,则会得到None。因此,只是不打印函数调用的结果。

您可以更改函数以返回计算出的 square 而不是打印它:

def square(x):
    '''
    x: int or float.
    '''
    return x * x

答案 1 :(得分:1)

你得到None,因为你正在调用你的函数:

print square(3.17)

换句话说,您正在打印函数的返回值。但是这个功能不会返回任何东西;换句话说,它返回None

由于已经打印结果,因此没有理由以此方式调用该函数。简单地称之为:

square(3.17)

或更改功能,使其返回结果而不是打印结果。 (这可能是更好的方法,因为它使函数更普遍有用 - 毕竟有时你可能不想打印结果。)

对于错误答案,二进制浮点数学不能完美地表示所有小数。十进制中看起来有限的数字可能具有无限的二进制表示;例如,3.4就是这样的一个。因此,根据定义,所有有限表示都是近似值,并且数学运算通常会给出稍微“关闭”的结果。 Python会在打印您的数字时尝试隐藏这些差异,但它并不总是这样做。解决方案是使用Decimal类(在decimal模块中)来表示您的数字。