質問: float(row[4]) #この先からつまずいています。 ``` この後に ➀ colEを全て二乗 ➁ Directionの7方位で 方位が西のcolE(2乗したもの)にcos0を掛ける 方位が西南西・西北西のcolE(2乗したもの)にcos225を掛ける 方位が南西・北西のcolE(2乗したもの)にcos45を掛ける 方位が南南西・北北西のcolE(2乗したもの)にcos675を掛ける ➂2乗値を補正した値を足し合わせる といった流れでできないかと考えています。
回答: なるべく質問記事のソースコードに変更を加えない方向で対応すると以下のようになるでしょう。 @akira ejiri さん指摘のcsvデータ中の全角空白は半角空白に修正したとします。 * 風速を2乗するのは ** 2 を使います * 風向に応じた値については、風向リストに対応する係数値のリストを用意し、合致する風向文字列のインデックスを取得して、係数値リストの同じインデックス位置からデータを持ってくる方法を取ります * 上記を全部計算後に合計するのではなく、その都度加算していきます 修正・追加した行およびその付近に、その内容をコメントで記述しています。 ``` import csv import math cos0 = math.cos(math.radians(0)) cos225 = math.cos(math.radians(22.5)) cos45 = math.cos(math.radians(45)) cos675 = math.cos(math.radians(67.5)) f = open("test.csv", "r") # 以下の行でcsvの区切り記号を空白文字へ変更し、さらに余計な空白をスキップ reader = csv.reader(f, delimiter=' ', skipinitialspace=True) next(reader); next(reader); next(reader); next(reader); next(reader) Direction = ['南南西', '南西','西南西', '西','西北西', '北西','北北西'] # 上記Directionに対応する係数データのリスト DFactor = [ cos675, cos45, cos225, cos0, cos225, cos45, cos675] sum = 0.0 # 浮動小数点なので 0.0 で初期化 for row in reader: if (not row[4]) or (not row[5]): # 風速or風向データの無い行をスキップ continue if not row[5] in Direction: # Directionに含まれない風速・風向データはスキップ continue colE = float(row[4]) # 風速の2乗×風向対応係数値を合計に加算する sum += (colE ** 2) * DFactor[Direction.index(row[5])] print(sum) # 合計値の表示、必要ならば小数点以下 x桁までなどと調整する ```