How To Accept The Input Of Both Int And Float Types?
Solution 1:
I'm really hoping I'm not completely misunderstanding the question but here I go.
It looks like you just want to make sure the value passed in can be operated upon like a float, regardless of whether the input is 3
or 4.79
for example, correct? If that's the case, then just cast the input as a float before operating on it. Here's your modified code:
def aud_brl(amount, From, to):
ER = 0.42108
if From.strip() == 'aud' and to.strip() == 'brl':
result = amount/ER
elif From.strip() == 'brl' and to.strip() == 'aud':
result = amount*ER
print(result)
def question():
amount = float(input("Amount: "))
From = input("From: ")
to = input("To: ")
if (From == 'aud' or From == 'brl') and (to == 'aud' or to == 'brl'):
aud_brl(amount, From, to)
question()
(I made a few changes as well for the sake of neatness, I hope you don't mind <3)
Solution 2:
this is how you could check the given string and accept int
or float
(and also cast to it; nb
will be an int
or a float
):
number = input("Enter a number: ")
nb = Nonefor cast in (int, float):
try:
nb = cast(number)
print(cast)
breakexcept ValueError:
pass
but in your case just using float might do the trick (as also string representations of integers can be converted to floats: float('3') -> 3.0
):
number = input("Enter a number: ")
nb = Nonetry:
nb = float(number)
except ValueError:
pass
if nb
is None
you got something that could not be converted to a float
.
Solution 3:
Use the isinstance function, which is built in
ifisinstance(num, (int, float)):
#do stuff
Also, you should refrain from using reserved keywords for variable names. The keyword from
is a reserved keyword in Python
Finally, there is one other error I noticed:
ifFrom== 'aud' or 'brl'
Should be
ifFrom== 'aud'orFrom== 'brl'
Lastly, to clean up the if statements you could theoretically use the list (if you have more currencies in the future, this might be better.
currencies = ['aud', 'brl'] #other currencies possibleifFrom in currencies and to in currencies:
#do conversion
Solution 4:
amount==int
doesn't make sense. input
gives us a string. int
(and float
) is a function. A string never equals a function.
In [42]: x=input('test')
test12.23In [43]: x
Out[43]: '12.23'In [44]: int(x)
....
ValueError: invalid literal forint() with base 10: '12.23'In [45]: float(x)
Out[45]: 12.23
float('12.23')
returns a float
object. int('12.23')
produces an error, because it isn't a valid integer string format.
If the user might give either '12' or '12.23', it is safer to use float(x)
to convert it to a number. The result will be a float. For many calculations you don't need to worry whether it is a float or integer. The math is the same.
You can convert between int and floats if needed:
In[45]: float(x)
Out[45]: 12.23In[46]: float(12)
Out[46]: 12.0In[47]: int(12.23)
Out[47]: 12In[48]: round(12.23)
Out[48]: 12
You can also do instance
tests
In [51]: isinstance(12,float)
Out[51]: False
In [52]: isinstance(12.23,float)
Out[52]: True
In [53]: isinstance(12.23,int)
Out[53]: False
In [54]: isinstance(12,int)
Out[54]: True
But you probably don't need to do any those.
Solution 5:
These seem to work well.
def getInt(): """ input returns a str, coerce return to required type """ x = str() while type(x) != int: try: return int(input('enter an integer: ')) except ValueError: continue
def getFloat(): """ input returns a str, coerce return to required type """ x = str() while type(x) != float: try: return float(input('enter a float: ')) except ValueError: continue
Post a Comment for "How To Accept The Input Of Both Int And Float Types?"