2017-11-14 4 views
0

を進行することができ、私はエラー私はこのコードエラーが文句を言わない私が

cost = float(prices[strs[0]][0]) 

TypeError: float() argument must be a string or a number, not 'list'

を実行したときに、私は

prices = {} 
groceries = [] 

file = open("grocery_store_price_list.txt", "r") 
for strx in file: 
    strs = list(filter(None, strx.strip().split(" "))) 
    prices[strs[0]] = [strs[1]], [strs[2]] 
file.close() 

file = open("my_personal_gro_list.txt", "r") 
for strx in file : 
    strs = list(filter(None, strx.strip().split(" "))) 
    groceries.append([strs[1], strs[0]]) 

headings = "{:15s} {:3s} {:10s} {:5s} {:6s}".format("item", "qty", "unit", 
"cost", "total") 

print(headings) 
finalCost = 0 

for strs in groceries 
    item = strs[0] 
    qty = int(strs[1]) 
    unit = prices[strs[0]][1] 
    cost = float(prices[strs[0]][0]) 
+0

という値が1つあるようにして、 'print(prices [strs [0]] [0])'を追加して、floatに渡すタイプを確認してください。エラーは、それがリストであることを示します。したがって、索引付けのロジックが正しくない可能性があります。 – brokenfoot

+0

'cost = float(prices [strs [0] [0] [0])'を使用します。あるいは、あなたが最初に望んでいたと思う 'prices [strs [0]] = [strs [1]、strs [2]]'にしたいかもしれません。 – CristiFati

+0

私のソリューションは、最初の価格だけでなく、両方の価格を浮動小数点に変換します。 – alexisdevarennes

答えて

1

prices[strs[0]][0]エラーを修正する方法を知らないが、そのlistあり得ます2つの価格が含まれます。したがって、両方の値を別々にキャストするか、cost = [float(v) for v in prices[strs[0]][0]]を使用してキャストする必要があります。一例として、上記取る

prices = {} 
groceries = [] 

file = open("grocery_store_price_list.txt", "r") 
for strx in file: 
    strs = list(filter(None, strx.strip().split(" "))) 
    prices[strs[0]] = [strs[1]], [strs[2]] # List of two prices, why you get the error. 
file.close() 

file = open("my_personal_gro_list.txt", "r") 
for strx in file : 
    strs = list(filter(None, strx.strip().split(" "))) 
    groceries.append([strs[1], strs[0]]) 

headings = "{:15s} {:3s} {:10s} {:5s} {:6s}".format("item", "qty", "unit", 
"cost", "total") 

print(headings) 
finalCost = 0 

for strs in groceries 
    item = strs[0] 
    qty = int(strs[1]) 
    unit = prices[strs[0]][1] 
    cost = [float(v) for v in prices[strs[0]][0]] 
    # OR cost = [float(prices[strs[0]][0][0]), float(prices[strs[0]][0][1])] 
0
>>> prices = {} 
>>> prices['a'] = [1], [2] 
>>> prices 
{'a': ([1], [2])} 

、あなたの価格はタプルが含まれており、それぞれが1つの要素

prices[strs[0]] = [strs[1]], [strs[2]] 
を含むリストである

あなたのいずれかの値のいずれかにフロートを()を適用または変更あなたのprices各キーに最後の行の直前に

+0

それは ''リスト ''と考えています – alexisdevarennes

+0

価格[strs [0]] = '' ['strs [1]]、[strs [2]' ']' ' – alexisdevarennes

+0

@alexisdevarennes 2つの単一項目リスト。 [2]それ自体がリストなので、Opがエラーを出す理由 – haifzhan

関連する問題