1

问题:编写一个 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) 打印出不正确的答案?

4

2 回答 2

3

如果你的函数没有返回任何值,它会None默认返回。

因此,如果您尝试打印函数的返回值,您将得到None. 所以,根本不打印函数调用的结果。

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

def square(x):
    '''
    x: int or float.
    '''
    return x * x
于 2013-02-16T18:39:09.137 回答
1

你得到None是因为你这样调用你的函数:

print square(3.17)

换句话说,您正在打印函数的返回值。但是该函数不返回任何内容;换句话说,它返回None.

没有理由以这种方式调用该函数,因为它已经打印了结果。简单地这样称呼它:

square(3.17)

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

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

于 2013-02-16T18:44:27.343 回答