W3resourcesでの課題の1つは、piを小数点以下「n」桁で出力することです。ここに私のコードがあります:
from math import pi
fraser = str(pi)
length_of_pi = []
number_of_places = raw_input("Enter the number of decimal places you want to
see: ")
for number_of_places in fraser:
length_of_pi.append(str(number_of_places))
print "".join(length_of_pi)
何らかの理由で、入力を考慮せずにpiを自動的に印刷します。どんな助けも素晴らしいでしょう:)
number_of_places
を使用してformat
だけではない理由:
''.format(pi)
>>> format(pi, '.4f')
'3.1416'
>>> format(pi, '.14f')
'3.14159265358979'
より一般的には:
>>> number_of_places = 6
>>> '{:.{}f}'.format(pi, number_of_places)
'3.141593'
あなたの元のアプローチでは、ループの制御変数としてnumber_of_places
を使用して桁数を選択しようとしていると思いますが、これはかなりハックですが、最初のnumber_of_digits
ユーザーが入力したものは使用されません。代わりに、pi
文字列の反復値で置き換えられます。
np.pi
、math.pi
などを使用して提案されたソリューションは、倍精度(〜14桁)でのみ機能します。より高い精度を得るには、mpmathパッケージなどの多精度を使用する必要があります
>>> from mpmath import mp
>>> mp.dps = 20 # set number of digits
>>> print(mp.pi)
3.1415926535897932385
np.pi
を使用すると、間違った結果が得られます
>>> format(np.pi, '.20f')
3.14159265358979311600
真の値と比較してください:
3.14159265358979323846264338327...
この質問にはすでに有用な答えがありますので、同じ目的でプログラムを作成した方法を共有したいと思います。これは、質問の1つと非常によく似ています。
from math import pi
i = int(input("Enter the number of decimal places: "))
h = 0
b = list()
for x in str(pi):
h += 1
b.append(x)
if h == i+2:
break
h = ''.join(b)
print(h)
読んでくれてありがとう。
たとえば、mpmath
パッケージ
from mpmath import mp
def a(n):
mp.dps=n+1
return(mp.pi)
なぜ単に使用しないのですか:
import numpy as np
def pidecimal(round):
print(np.round(np.pi, round))