2

2つの引数(文字列、辞書)を取り、floatを返すこのPython関数があります。この関数は、スコアと文字列のディシオナリ内の整数の平均を取るように設計されています。

def happiness_score(string, dic):
   keys = string.lower().split()
   v = sum(dic[key] for key in keys)
   return float(v)/len(keys)

私は動作するこのテストケースを持っています:

print happiness_score("a b" , {"a":(1.2) , "b":(3.4)})
>>> 2.3

タプルを使用したテストケースもあります。

print happiness_score("a b" , {"a":(1,2) , "b":(3,4)})

プログラムを実行できるように、任意のタプルを整数に変換できるようにコードを変更するにはどうすればよいですか?

4

3 に答える 3

1

私の忍者のマインドリーディングスキルを使用して、タプルをフロートに変換する方法を推測しようとしています。おそらく、次のようにします。

def tup2float(tup):
    return float('.'.join(str(x) for x in tup))

これは2タプルでのみ機能します...

いくつかの結果:

>>> tup2float((1,2))
1.2
>>> tup2float((2,3))
2.3
>>> tup2float((2,30))
2.3
>>> tup2float((2,32))
2.32
于 2012-10-19T02:03:41.417 に答える
0

この場合の答えは(2、3)であると仮定します。つまり、タプル内の各要素を個別の平均のソースとして扱いたいと考えています。

def happiness_score(dic):
   scores = map(sum, zip(*d.values()))
   return [float(v)/len(dic) for v in scores]

最初のステップは、タプル要素ごとに値のセットを作成することです。

d = {'a': (1, 2), 'b': (3, 4)}
zip(*d.values())
[(1, 3), (2, 4)]

次に、マップを使用して各タプルに合計を適用します。

于 2012-10-19T01:55:21.813 に答える
0

ファイルをというリストに読み込んだと仮定しますlines

hrs, miles = zip(*[(float(line.split()[-4]), float(line.split()[-2])) for line in lines if 'miles' and 'hrs' in line])
total_hrs = sum(hrs)
total_miles = sum(miles)
于 2015-01-18T16:57:29.350 に答える