1

問題: 1 つの数値を取り、その数値の 2 乗を返す Python 関数 square を作成します。

この関数は、1 つの数値を受け取り、1 つの数値を返します。

与えられたコード:

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) "None" を出力し、場合によっては (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)

または、出力する代わりに結果を返すように関数を変更します。(関数をより一般的に便利にするため、これはおそらくより良いアプローチです。結果を出力したくない場合もあります。)

不正解に関しては、2 進浮動小数点演算では、すべての小数を完全に表すことはできません。10 進数では有限に見える数は、無限の 2 進数表現を持つ場合があります。たとえば、3.4そのようなものです。したがって、すべての有限表現は定義による近似であり、数学的操作はしばしばわずかに「ずれている」結果をもたらします。Python は、数値を出力するときにこれらの不一致を隠そうとしますが、常にこれができるとは限りません。解決策は、(モジュールDecimal内の)クラスを使用して数値を表すことです。decimal

于 2013-02-16T18:44:27.343 に答える