2016-11-14 9 views
0

私の割り当ては、リストの中央平均を得ることです。これは他のいくつかのポストのようなものです(https://codereview.stackexchange.com/questions/108404/how-to-get-a-centered-mean-excluding-max-and-min-value-of-a-list-in-pythonなど)。しかし、私の教授は、これを解決するためにmin、max、sortを使用することは許されていないと教えてくれました。それでは、私が今持っていることはこれです、それはまだ進行中の作業です:Python、キャッチで中心平均を得る

def centered_average(nums): 
high=0 
low=0 
a=0 
b=0 
for i in range(len(nums)): 
    if nums[i]>a: 
     a=nums[i] 
     high=a 
for i in range(len(nums)): 
    if nums[i]<b: 
     b=nums[i] 
     low=b  
total=sum(nums) 
average=(total-high-low)/(len(nums)-2) 
print(average) 

私の問題は、私は低いが、リストの中で最も小さい番号として認識されるように得ることができないということです。たとえば、リストとして[1,2,3,4,5]を入力した場合、私の関数は、2 + 3 + 4が9/8であるため、ハイとして5、ローとして1、 3 = 3となる。しかし、私がそこに持っているものは0を低く返します。最初の数字が0だと思うのでレンズ(数値)のためだと思います。これをどのように修正するべきかわかりません。

ノート:私はこの物の初心者ですので、私が持っているものが最高でないかもしれないことを知っているか、エラーを修正するのは簡単かもしれませんが、まだ学習の過程にあるので、はるかに高く評価。

+0

'nums [i] algrebe

+0

私はnum [i]> aのようにセットアップしたときに、highを正しく返す理由はありますか? –

+0

「1> 0(初期化されたa)」、「2> 1」、「3> 2」、「4> 3」、「5> 4」です。しかし、最小の場合、何も0未満です。 – algrebe

答えて

0

を問題にされて、あなたが実行中の最小値を開始(および最大を実行している)0として。

スタートfloat("inf")として実行されている最小値(すべてはgがあるとしてそれよりも少ないことを保証する)。実行中の最大値をfloat("-inf")として開始します(すべてがそれよりも大きいことが保証されているため)。

または、リストの最初の要素(真の最小値/最大値、またはそれよりも低い/高い他の要素がある)として両方を開始します。

+0

もし私が 'b = nums [1]'のようなことをすればうまくいくでしょうか?もし私が[3,4,2,1,5,5]のようなリストを持っていたら、それは3で始まるでしょうが、それがリストを通って行くと2になり、最終的に1になります。 –

+0

ええと............ – Amadan

+0

実際、それだけでそれを解決しました。お手伝いありがとう。実際にリスト変数に設定することは考えていませんでした。 –