4

私はpythonに取り組んでおり、この問題で立ち往生しています。

入力 (タプルあり):

a = (0, 1)

出力:

a = 0.1
4

2 に答える 2

10

1桁と2つの要素のみ

>>> a = (0, 1)
>>> a[0] + a[1] * 0.1
0.1

複数の一桁

>>> from itertools import count
>>> a = (0, 1)
>>> sum(n * 10 ** i for i, n in zip(count(0, -1), a))
0.1
>>> a = (0, 1, 5, 3, 2)
>>> sum(n * 10 ** i for i, n in zip(count(0, -1), a))
0.15320000000000003   

使用reduce(Py3.0以降の場合は次のものが必要ですfrom functools import reduce:)

>>> a = (0, 1, 5, 3, 2)
>>> reduce(lambda acc, x: acc * 0.1 + x, reversed(a))
0.1532

decimalモジュールの使用

>>> from decimal import Decimal
>>> a = (0, 1, 5, 3, 2)
>>> Decimal((0, a, -len(a) + 1))
Decimal('0.1532')

任意の2つの数字

>>> a = (0, 1)
>>> float('{0}.{1}'.format(*a))
0.1

任意の数字

>>> a = (0, 1, 5, 3, 2)
>>> float('{0}.{1}'.format(a[0], ''.join(str(n) for n in a[1:])))
0.1532

浮動小数点の不正確さがいくつかある可能性があります。これは、Decimalたとえば、を使用して修正できます。

>>> sum(Decimal(n) * Decimal(10) ** Decimal(i) for i, n in zip(count(0, -1), a))
Decimal('0.1532')
于 2012-07-16T10:07:12.460 に答える
1

aリストの要素が1桁であると仮定すると、0-9数学を使用できます。

>>> a[0] + a[1] * 0.1
0.10000000000000001

または、文字列に変換し、連結してfloatに変換し直します。

>>> float(str(a[0])+'.'+str(a[1]))
0.10000000000000001
于 2012-07-16T10:09:13.210 に答える