2017-07-28 10 views
0

私は、a、b、c、およびxの値をとり、それらを二次関数にプラグインする非常に簡単な練習スクリプト(私は初心者です)を書いています。浮動小数点数を取得できないのはなぜですか?

何らかの理由で私は浮動小数点数を私の方程式に入れません。私は必要以上に多くの場所にfloat()を追加しようとしましたが、まだ固定小数点数を取得しています。

注:私はいくつかの方法を試した後、この多くのフロート入力に終わった。これは単なる最後の反復です。私のコードは以下の通りです:

def quadratic(a, b, c, x): 

    return float(a*x**2 + b*x + c) 

print "Let's find the output value for the values in a quatratic function..." 
print "Our formula is ax^2 + bx + c = ?" 

a = float(raw_input("What value for 'a'?")) 

b = float(raw_input("What value for 'b'?")) 

c = float(raw_input("What value for 'c'?")) 

x = float(raw_input("What value for 'x'?")) 

solution = float(quadratic(a, b, c, x)) 

print "(%d)(%d)^2 + (%d)(%d) + %d = %d" % (a, x, b, x, c, solution) 

ここに私の出力(a、b、c、xの10進値を入力したものです)です。

Let's find the output value for the values in a quatratic function... 

Our formula is ax^2 + bx + c = ? 

What value for 'a'?.75 

What value for 'b'?.44 

What value for 'c'?.3467 

What value for 'x'?.77 

(0)(0)^2 + (0)(0) + 0 = 1 

これは明らかに私の個人的なエラーです。誰かがなぜ固定小数点数を得ているのかについての洞察を提供できますか?ありがとう!

+0

%のD ' –

+0

@ThierryLathuilleはとてもありがとう代わりに 'の'%のS'を使用しますそのような簡単な修正であり、すぐに機能しました。だから、これは%dが整数だけを返すことを意味するのですか? – Hanzy

+0

%dは数字を意味します。 %fはfloatを意味し、%sは文字列を意味する – JacobIRR

答えて

0

他のいくつかのユーザーがコメントしたように、問題は計算ではなく、出力文字列の書式設定に関係しています。 %dフォーマットシーケンスは、関連する値を文字列に変換する前に整数に変換するようにPythonに指示します。別のコードを使用すると、期待通りに動作します。

使用する最も明白なコードは、%fです。これは、浮動小数点値が必要であることを示します。浮動小数点数を小数点以下の桁数に丸める場合は、余分な文字を追加することができます(デフォルトでは長すぎる可能性があります)。たとえば、%.4fを使用すると小数点以下第4位が四捨五入されます。これは、入力例で使用した有効数字の最大桁数なので、良い選択です。

%sを使用することもできます。つまり、組み込みのstr関数を使用して、引数を直接文字列に変換する必要があります。これにより、より良い丸めオプションの%fは許可されませんが、ほぼすべてのタイプ(数字以外のものも)で動作します。

実際にはさらに進んで、別の書式設定方法を使用することをお勧めします。 str.formatメソッドを使用すると、%演算子よりもさらに洗練された書式設定を行うことができます。同じx値を2回繰り返すため、この状況で便利です。 str.formatで適切な書式文字列を使用すると、引数で値を繰り返す必要なく、値を出力に複製することができます。

print "({a:.4f})({x:.4f})^2 + ({b:.4f})({x:.4f}) + {c:.4f} = {solution:.4f}".format(
    a=a, b=b, c=c, solution=solution, x=x 
) 

あなたは(私も他の理由の多種多様のためにお勧めします)のPythonを3.6以上使用していた場合、あなたは"F-strings"として知られているものを使用することができます:ここでstr.formatにキーワード引数を使用してそれを行うための一つの方法です上記の呼び出しと同じ書式設定を行いますが、明示的にformatを呼び出す必要はなく、独自の名前を持つキーワード引数として一連の変数を渡す必要はありません。あなたはfとの最初の引用符の前に付ける場合は、Pythonはあなたの現在のネームスペース内の変数に基づいて、あなたのための書式設定を行います。

print(f"({a:.4f})({x:.4f})^2 + ({b:.4f})({x:.4f}) + {c:.4f} = {solution:.4f}") 
+0

詳細な返信をありがとうございました。これは私が聞いたことがあるよりも助けになります。私は私のようなn00bの質問をした他の多くの人のように、 "Pythonの難しい方法を学ぶ"で私の初心者のPythonの仕事を始めています。そのガイドはPython 2.7に対応しているようですが、全体として私は演習を非常に簡単に見つけました。私はそれらを自分の簡単なスクリプトに拡張することができます。私の次の仕事は、Python 3.6+を学ぶことですが、私にどのような良いリソースがあればスピードアップするのか分かりません。私はこの本をすぐにやっていくつもりです。 – Hanzy

関連する問題