Gibt es sowieso einen Bruch zu berechnen, z. 2/3 oder 1/2 in Python, ohne das Modul math zu importieren?

Das Code-Snippet ist einfach:

# What is the cube root of your number
n = float(raw_input('Enter a number: '))
print(n**(1/3))

Außergewöhnlich einfacher Code, aber überall, wo ich hinschaue, muss ich das Modul math importieren. Ich möchte dieses Snippet nur in einen größeren Code einfügen, an dem ich arbeite. Ich bekomme immer 1 als Antwort, weil Python der Meinung ist, dass 1/3 0 ist und nicht .333333333. Ich könnte .33333 setzen, aber das ist nur eine vorübergehende Korrektur, und ich möchte wissen, wie diese sehr grundlegende Berechnung für zukünftige Projekte durchgeführt wird.

8
01110100 7 Okt. 2012 im 00:50

3 Antworten

Beste Antwort

Sie können from __future__ import division verwenden, um bei Bedarf Floats für die Ganzzahldivision zurückzugeben (sodass 1/3 zu 0,333333 führt ...).

Auch ohne dies zu tun, können Sie Ihren Bruchwert erhalten, indem Sie 1.0/3 anstelle von 1/3 ausführen. (Das 1.0 macht die erste Zahl eher zu einem Float als zu einer Ganzzahl, wodurch die Division richtig funktioniert.)

12
BrenBarn 6 Okt. 2012 im 20:51

Fügen Sie einfach einen Dezimal- und Bruchteil hinzu, um die Operation in einen Float umzuwandeln:

>>> n=float(raw_input('Enter a number: ')); print n**(1.0/3)
Enter a number: 2
1.25992104989

Oder verwenden Sie float explizit:

>>> n=float(raw_input('Enter a number: ')); print n**(float(1)/3)
Enter a number: 2
1.25992104989

Oder verwenden Sie den Teilungsstil von Python 3:

>>> from __future__ import division
>>> n=float(raw_input('Enter a number: ')); print n**(1/3)
Enter a number: 2
1.25992104989

Jede dieser drei Methoden funktioniert. Ich bevorzuge die erste.

2
the wolf 6 Okt. 2012 im 22:02

In der Standardbibliothek gibt es ein Fraktionsmodul, das verschiedene Aufgaben für Brüche ausführen kann. Wenn Sie viele Berechnungen für Brüche haben, können Sie diese ausführen, ohne sie in Float umzuwandeln. http://docs.python.org/library/fractions.html

4
yilmazhuseyin 7 Okt. 2012 im 08:56