2012-10-06 16 views
8

Esiste comunque un calcolo di una frazione, ad es. 2/3 o 1/2, in Python senza importare il modulo math?Frazioni in Python

Il frammento di codice è semplice:

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

codice straordinariamente semplice, ma ovunque guardo mi sta dicendo di importare il modulo math. Voglio solo aggiungere lo snippet in un codice più grande su cui sto lavorando. Continuo a ricevere 1 come risposta, perché Python sembra 1/3 sia 0 che 333333333. Potrei inserire .33333, ma questa è solo una soluzione temporanea e voglio sapere come eseguire questo calcolo di base per i progetti futuri.

+0

È una cosa di Python 2? Funziona come previsto per me w/p3 –

+1

@TheUnfunCat: Sì, in Python 3, la divisione float è standard; usa '//' per la divisione di interi. –

risposta

12

È possibile utilizzare from __future__ import division per rendere float di divisione in interi se necessario (in modo che 1/3 risulti in 0.333333 ...).

Anche senza farlo, è possibile ottenere il valore frazionario facendo 1.0/3 anziché 1/3. (Lo 1.0 rende il primo numero un float anziché un intero, il che rende la divisione funzionante.)

+0

Puoi anche usare '1./3'. – filmor

+2

+1 per il suggerimento 1.0/3, e per l'uso di '1.0' invece di' 1.' –

+0

Eccellente. Grazie. – 01110100

2

basta aggiungere una parte decimale e frazione di lanciare l'operazione per un float:

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

In alternativa, utilizzare float esplicitamente:

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

In alternativa, utilizzare lo stile Python 3 di divisione:

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

Uno di questi tre metodi funziona. Preferisco il primo

Problemi correlati