-1
def avg(n):
    count=0
    sum=0
    for var in range(n):
        count+=1
        sum+=var
    return (sum/count)
print (avg(5))

これは、for ループを使用して 1 から n までの整数の平均を求める試みです。何が欠けていますか?

4

2 に答える 2

6

2つの理由。まず、0 から 4 までの数値を合計します (包括的)。を実行して修正するrange(1,n+1)か、に変更することができますsum += var + 1

2 番目の理由は、整数除算がデフォルトで使用されることです。先頭に追加することで浮動小数点除算を強制できます。

from __future__ import division

またはローカルで行うreturn sum/float(count)

于 2013-09-15T00:34:42.693 に答える
2

ドキュメントの引用:

範囲(開始、停止[、ステップ])

開始引数が省略された場合、デフォルトは 0 です。完全な形式は、プレーンな整数のリストを返します [開始、開始 + ステップ、開始 + 2 * ステップ、...]。step が正の場合、最後の要素は start + i * stepより小さい stopです。

つまり、range()Python では包括的ではありません。これは、コードに off-by-one エラーがあることを意味します。次のようになります。

def avg(n):
    count=0
    sum=0
    for var in range(1, n+1):
        count+=1
        sum+=var
    return (float(sum)/count)
print (avg(5))
于 2013-09-15T00:34:31.100 に答える