2017-07-28 4 views
0

Ich bin eine sehr einfache Praxis Skript zu schreiben (ich bin ein Anfänger), die in Werte von a, b, c und x und stecken Sie sie in einer quadratischen Funktion nehmen.Warum bekomme ich keine Gleitkommazahlen?

Aus irgendeinem Grund, den ich immer bin nicht Punktzahlen in meine Gleichung schweben. Ich habe versucht, float() an mehr Orten hinzuzufügen, als ich es für nötig halte, und trotzdem bekomme ich immer noch feste Punktnummern.

Hinweis: landete ich mit so vielen Schwimmer Eingänge, nachdem mehrere Möglichkeiten versuchen; Dies ist nur die letzte Iteration. Hier ist mein Code:

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) 

und hier ist meine Ausgabe (nach Dezimalwerte für eine Eingabe, b, c, x).

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 

Dies ist eindeutig Benutzerfehler meinerseits. Kann mir jemand einen Einblick geben, warum ich Fixpunktzahlen bekomme? Vielen Dank!

+0

Verwenden '% s' statt'% d' –

+0

@ThierryLathuille Thank you so viel, das war so eine einfache Lösung und es hat sofort funktioniert. Also nehme ich an, dass% d nur ganze Zahlen zurückgibt? – Hanzy

+0

% d bedeutet Ziffer. % f bedeutet float,% s bedeutet String – JacobIRR

Antwort

0

Wie mehrere andere Benutzer kommentiert, das Problem ist nicht mit Ihrer Berechnung, sondern mit der Formatierung der Ausgabezeichenfolge. Die %d Formatierungssequenz weist Python an, den relevanten Wert in eine ganze Zahl zu konvertieren, bevor er in eine Zeichenfolge umgewandelt wird. Wenn Sie einen anderen Code verwenden, funktioniert es so, wie Sie es erwarten.

Der offensichtlichste Code %f wäre zu verwenden, die, dass Sie einen Float-Wert wollen anzeigt. Sie können einige zusätzliche Zeichen hinzufügen, wenn Sie möchten, dass der Gleitkommawert auf eine bestimmte Anzahl von Dezimalstellen gerundet wird (anstelle des Standardwerts, der sehr lang sein kann). Beispielsweise würde die Verwendung von %.4f mit vier Dezimalstellen abgerundet werden, was eine gute Wahl ist, da dies die maximale Anzahl signifikanter Stellen ist, die Sie in Ihren Beispieleingaben verwendet haben.

Eine andere Option wäre %s, was bedeutet, dass Sie das Argument direkt in eine Zeichenfolge mit der eingebauten str Funktion konvertieren möchten. Dies erlaubt nicht die schöneren Rundungsoptionen von , aber es funktioniert für fast jeden Typ (auch nicht-numerische).

Ich würde tatsächlich gehen weiter und empfehlen, dass Sie ganz eine alternative Formatierung Methode verwenden. Mit der str.format-Methode können Sie eine anspruchsvollere Formatierung vornehmen als mit dem Operator %, was in dieser Situation nützlich ist, da Sie denselben Wert x zweimal wiederholen möchten. Durch Verwendung einer geeigneten Formatzeichenfolge mit str.format können Sie den Wert in der Ausgabe duplizieren, ohne ihn in den Argumenten wiederholen zu müssen. Hier ist eine Möglichkeit, es mit Keyword-Argumente zu str.format tun:

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 
) 

Wenn Sie wurden mit Python 3.6 oder höher (was ich auch für eine Vielzahl von anderen Gründen empfehlen würde), könnte man verwenden, was als "F-strings" bekannt sind um die gleiche Formatierung wie der obige Aufruf auszuführen, ohne jedoch explizit format aufrufen zu müssen und eine Reihe von Variablen als Schlüsselwortargumente mit ihren eigenen Namen zu übergeben. Wenn Sie das erste Anführungszeichen mit einem f Präfix wird Python für Sie die Formatierung tun, basierend auf den Variablen in der aktuellen Namensraum:

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

Vielen Dank für die ausführliche Antwort. Das ist hilfreicher, als ich überhaupt hätte fragen können. Ich beginne meine Anfänger-Python-Arbeit in "Lerne Python auf dem harten Weg" wie viele andere, die n00b Fragen wie meine gestellt haben. Es scheint so, als ob dieser Leitfaden auf Python 2.7 ausgerichtet ist, aber insgesamt habe ich die Übungen ziemlich einfach gefunden und kann sie auf einfache Skripte erweitern. Meine nächste Aufgabe wird es sein, Python 3.6+ zu lernen, aber ich bin mir nicht sicher, was eine gute Ressource wäre, um mich auf den neuesten Stand zu bringen. Ich werde bald mit diesem Buch fertig sein. – Hanzy

Verwandte Themen