Come prendo una frazione come input in Python e utilizzo il valore della frazione per l'aritmetica?
Ecco un esempio di codice che ho creato per illustrare il mio problema. Se l'input è un numero intero o un decimale, funziona come previsto. Ma se l'input è una frazione come 4/5, genera un'eccezione ValueError poiché 4/5 è una stringa che non può essere convertita in un float.
myinput=input("Enter number. ")
doubleofmyinput=float(myinput)*2
print(doubleofmyinput)
Questo non è un problema quando non si usa input()
poiché float (4/5) funziona mentre float ("4/5") no, mentre sono validi sia float ("4.5") e float (4.5). Grazie.
Risposte
Utilizzando la libreria delle frazioni puoi fare quanto segue:
import fractions
myinput = input("Enter number. ")
try:
if not myinput.isnumeric():
myinput = fractions.Fraction(myinput)
except ValueError:
throw ValueError(myinput + " is not a number")
doubleofmyinput=float(myinput)*2
print(doubleofmyinput)
Quanto generoso vuoi essere nell'accettare input?
Se sono solo frazioni volgari (o frazioni miste), puoi avere un caso speciale per questo, utilizzando .split('/')
o espressioni regolari per suddividere la stringa di input nelle sue parti componenti, convertirle separatamente, quindi metterle insieme in a float
, a Decimalo a Fraction(a seconda del tipo di comportamento di arrotondamento di cui hai bisogno o che puoi tollerare).
Se vuoi accettare più in generale espressioni arbitrarie, probabilmente è meglio cercare una libreria per farlo; un rapido google suggerisce simpleeval , ma probabilmente ce ne sono altri.
Se vuoi solo inserire il valore come frazione e NON mostrarlo come frazione, ti suggerirei di usare eval.
myinput=float(eval(input("Enter number. ")))
doubleofmyinput= myinput *2
print(doubleofmyinput)