2017-06-13 6 views
0

を整数に(リストの)インデックスを変換しない私は、関数に建て使用せずに、このリストの平均値、最小値と最大値を取る必要があるが、それは例外がスローされます。Pythonの:どのように私は

File "<ipython-input-150-ff44c542ba16>", line 10, in problem2_8 
    if temp_list[item]<lowest: 

TypeError: list indices must be integers or slices, not float 

ここに私のコードです:

hourly_temp = [40.0, 39.0, 37.0, 34.0, 33.0, 34.0, 36.0, 37.0, 38.0, 39.0, \ 
       40.0, 41.0, 44.0, 45.0, 47.0, 48.0, 45.0, 42.0, 39.0, 37.0, \ 
       36.0, 35.0, 33.0, 32.0] 
def problem2_8(temp_list): 
    total=0 
    for item in temp_list: 
     total=total+item 
    print("Average: ",total/len(temp_list)) 
    low=0 
    lowest= int(low) 
    for item in temp_list: 
     if temp_list[item]<lowest: 
      lowest=temp_list[list] 
    print("Low: ",lowest) 
+4

問題は何だと思いますか?エラーメッセージはかなり明確です。序数インデックス値を使用して、値自体ではなくリストにインデックスを付ける必要があります。 – EdChum

+0

'' for index、列挙するアイテム(temp_list) ''を実行します。そして '' item''ではなく '' index''を使います。 – Liliane

+3

「for each」ループの仕組みではありません。おそらく、あなたは['for'ループチュートリアル](https://docs.python.org/3/tutorial/controlflow.html#for-statements)に戻って詳細を読むべきでしょうか?何が起こっているのかを知るために、ループ内の* print * 'item'を試してください。 –

答えて

1

これは解決するのは比較的簡単です。このようにコードを変更することができます。だからここ

hourly_temp = [40.0, 39.0, 37.0, 34.0, 33.0, 34.0, 36.0, 37.0, 38.0, 39.0, \ 
       40.0, 41.0, 44.0, 45.0, 47.0, 48.0, 45.0, 42.0, 39.0, 37.0, \ 
       36.0, 35.0, 33.0, 32.0] 

def problem2_8(temp_list): 
    total=0 
    for item in temp_list: 
     total=total+item 
    print("Average: ",total/len(temp_list)) 
    lowest= temp_list[0] # Point a 
    for item in temp_list: # Point b 
     if item<lowest: # Point c 
      lowest=item # Point d 
    print("Low: ",lowest) 

problem2_8 (hourly_temp) 

は、それが

ポイントどのように動作するかの説明です:あなたが整数であると思われる、低を定義し、その後、最低が低いのint型だったと述べていた私はなぜわかりません。なぜそれが存在するのか分かりません。あなたが実際に望むのは、私がやったことである、それを最初の値に任意に設定することです。

ポイントb:各アイテムはリスト内のアイテムです。あなたが、その後すべき:あなたが項目の値を持っているとして、あなたは直接最低

ポイントdにそれを比較する必要があります。それはあなたの各項目

ポイントcの値を与え、各項目の整数ではありません最小値を新しいものに設定してください

1

インデックスとして浮動小数点数を使用することはできません。したがって、これを試してください

for i in range(len(temp_list)): 
    if temp_list[i]<lowest:     
       lowest=temp_list[i] 
print("Low: ",lowest) 

len()も同様に使用しない場合は、これを試してください

for item in temp_list: 
     if item<lowest:     
        lowest=item 
    print("Low: ",lowest) 

最後に、あなたはそれを型キャストすることで浮動小数点型に変換することができます。 int(item)はそれを行う方法の1つです。

1
for item in temp_list: 

戻り要素ではなく、インデックス、あなたはその後、ちょうどあなたの条件のために使用します。

if item <lowest: 

あなたは、インデックスを使用したい場合は、あなたが使用することができます。

for item in range(len(temp_list)): 

か列挙型を使用しても:

for index,value in enumerate(temp_list): 
それはあなたが

3

あなたはあまりにも第二のループで反復可能性が期待したものであればはまた、次回はあなたが参照するには、エラーをした値を印刷することもできます。

hourly_temp = [40.0, 39.0, 37.0, 34.0, 33.0, 34.0, 36.0, 37.0, 38.0, 39.0, \ 
       40.0, 41.0, 44.0, 45.0, 47.0, 48.0, 45.0, 42.0, 39.0, 37.0, \ 
       36.0, 35.0, 33.0, 32.0] 

def problem2_8(temp_list): 
    total=0 
    for item in temp_list: 
     total = total + item 
    print("Average: ", total/len(temp_list)) 
    lowest=float('inf') # the temporary lowest should be really big (not small) 
    for item in temp_list: 
     if item < lowest: 
      lowest = item 
    print("Low: ", lowest) 

problem2_8(hourly_temp) 

しかし場合は、あなた」あなたのpython> = 3を持っている場合は

def problem2_8(temp_list): 
    print('Average', sum(temp_list)/len(temp_list)) 
    print('Lowest', min(temp_list)) 

:興味を持って再組み込み関数summinを使用すると、これははるかに簡単に作ることができます。また、合計を長さで除算する代わりにを使用することもできます。

from statistics import mean 

def problem2_8(temp_list): 
    print('Average', mean(temp_list)) 
    print('Lowest', min(temp_list)) 
+0

私は彼の割り当てが彼も使いすぎていると思うので、彼はそれをやる方法を知っているので、いい解説がまだあります。 – Tbaki

+0

はい、私はそれらが許されないと読んでいます - しかし、それは "できます"。 :) – MSeifert

+0

私は次のコードを今私のデータで非常にうまく動作していますが、coursera autogradeはそれを失敗します。 'DEF problem2_8(temp_list):temp_listにおける項目の= 0 全 総計=総+アイテム プリント( "平均"、合計/ LEN(temp_list)) 最高= hourly_temp項目の[0] 項目場合 <最低:temp_list内のアイテムの 最低= hourly_temp [0] : 最高=項目 プリント(最高 "最高")項目もし>最高 :temp_listで 最低=項目 プリント( "Low:"、最低) ' –

関連する問題