可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am making a currency converter. How do I get python to accept both integer and float?
This is how I did it:
def aud_brl(amount,From,to):
ER = 0.42108
if amount == int:
if From.strip() == 'aud' and to.strip() == 'brl':
ab = int(amount)/ER
print(ab)
elif From.strip() == 'brl' and to.strip() == 'aud':
ba = int(amount)*ER
print(ba)
if amount == float:
if From.strip() == 'aud' and to.strip() == 'brl':
ab = float(amount)/ER
print(ab)
elif From.strip() == 'brl' and to.strip() == 'aud':
ba = float(amount)*ER
print(ba)
def question():
amount = input("Amount: ")
From = input("From: ")
to = input("To: ")
if From == 'aud' or 'brl' and to == 'aud' or 'brl':
aud_brl(amount,From,to)
question()
Simple example of how I did it:
number = input("Enter a number: ")
if number == int:
print("integer")
if number == float:
print("float")
These two don't work.
回答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)
回答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 = None
for cast in (int, float):
try:
nb = cast(number)
print(cast)
break
except 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 = None
try:
nb = float(number)
except ValueError:
pass
if nb
is None
you got something that could not be converted to a float
.
回答3:
Use the isinstance function, which is built in
if isinstance(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:
if From == 'aud' or 'brl'
Should be
if From == 'aud' or From == '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 possible
if From in currencies and to in currencies:
#do conversion
回答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.23
In [43]: x
Out[43]: '12.23'
In [44]: int(x)
....
ValueError: invalid literal for int() 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.23
In [46]: float(12)
Out[46]: 12.0
In [47]: int(12.23)
Out[47]: 12
In [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.