ホームページ > バックエンド開発 > Python チュートリアル > Pythonで割り算を使うときの注意点

Pythonで割り算を使うときの注意点

WBOY
リリース: 2016-06-16 08:42:48
オリジナル
1326 人が閲覧しました

この記事の例では、Python で除算を使用する際の注意事項を説明します。これは非常に重要なスキルであり、Python プログラミングにとって良い参考になります。具体的な分析は次のとおりです。

次に、次の例を見てください:

def avg(first, *rest): 
  return (first + sum(rest)) / (1 + len(rest)) 
# Sample use 
avg(1, 2)    # 1.5 
avg(1, 2, 3, 4) # 2.5 

ログイン後にコピー

ソース プログラムは可変長パラメーターの使用を示すためのものですが、Python 2.7.1 インタープリターでは、得られる結果はコメントの結果と異なります

>>> def avg(first, *rest): 
...   return (first + sum(rest)) / (1 + len(rest)) 
...  
>>> avg(1, 2) 
1 
>>> avg(1, 2, 3, 4) 
2 

ログイン後にコピー

小数点以下のデータは切り捨てられるのがよくわかりますが、2つの整数を割るときは「//」を四捨五入する必要があると記憶しています。

>>> def avg(first, *rest): 
...   return (first + sum(rest)) // (1 + len(rest)) # change '/' to '//' 
...  
>>> avg(1, 2) 
1 
>>> avg(1, 2, 3, 4) 
2 

ログイン後にコピー

「/」を「//」に変更しても結果は同じになります。「//」は確かに丸められていると記憶していますが、「/」の結果も切り捨てられるのはなぜですか?

3.4.1 インタープリターで同じプログラムをテストし、期待どおりの結果が得られました。

>>> def avg(first, *rest): 
...   return (first + sum(rest)) / (1 + len(rest)) 
...  
>>> avg(1, 2) 
1.5 
>>> avg(1, 2, 3, 4) 
2.5 
>>> def avg(first, *rest): 
...   return (first + sum(rest)) // (1 + len(rest)) # change '/' to '//' 
...  
>>> avg(1, 2) 
1 
>>> avg(1, 2, 3, 4) 
2 

ログイン後にコピー

3.4.1 インタープリタでは、「/」の結果は小数点以下の桁を保持し、「//」は四捨五入後の結果であることがわかります。

検索した結果、stackoverflow で次の質問を見つけました: Python で除算の結果を浮動小数点数に強制する方法は? これはバージョン 2.x 用であり、3.x ではそのような問題は発生しないことに注意してください
答えの最初の 2 つの解決策はどちらも適切です:

方法 1:

>>> from __future__ import division 
>>> a = 4 
>>> b = 6 
>>> c = a / b 
>>> c 
0.66666666666666663 

ログイン後にコピー

方法 2:

C 言語のアプローチと同様:

c = a / float(b)

ログイン後にコピー

この記事で説明した例は、皆様の Python プログラミングに確実に役立つと信じています。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート