126
x = 16

sqrt = x**(.5)  #returns 4
sqrt = x**(1/2) #returns 1

import mathを使用できることはわかってsqrtいますが、上記に対する回答を探しています。Python 2 の整数除算とは何ですか? この動作は Python 3 で修正されています。

4

5 に答える 5

276

Python 2 では、sqrt=x**(1/2)整数除算を行います。1/2 == 0.

したがって、 x (1/2)は x (0)に等しく、これは 1 です。

それは間違っていません。別の質問に対する正しい答えです。

math モジュールをインポートせずに平方根を計算する場合は、x**(1.0/2)またはを使用する必要がありますx**(1/2.)。整数の 1 つは浮動小数点数である必要があります。

注: これは Python 3 では当てはまりませ1/2ん。0.51//2

于 2012-03-07T02:50:51.330 に答える
134

: と書く必要があります。sqrt = x**(1/2.0)そうしないと、整数除算が実行され、式は を1/2返します0

この動作は Python 2.x では「正常」ですが、Python 3.x では1/2と評価され0.5ます。Python 2.x コードを 3.x の除算書き込みのように動作させたい場合from __future__ import division1/2は に評価され0.5、下位互換性のために、1//2は に評価され0ます。

記録のために、平方根を計算するための推奨される方法は次のとおりです。

import math
math.sqrt(x)
于 2012-03-07T02:51:57.510 に答える
15

/Python 2 で整数除算を実行します。

>>> 1/2
0

数値の 1 つが float の場合、期待どおりに機能します。

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
于 2012-03-07T02:51:06.120 に答える
8

あなたが見ているのは整数除算です。デフォルトで浮動小数点除算を取得するには、

from __future__ import division

または、1/2 の 1 または 2 を浮動小数点値に変換できます。

sqrt = x**(1.0/2)
于 2012-03-07T02:52:16.470 に答える