我正在制作一个货币转换器。如何让 python 同时接受整数和浮点数?
我就是这样做的:
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()
我是如何做到的简单示例:
number = input("Enter a number: ")
if number == int:
print("integer")
if number == float:
print("float")
这两个不起作用。
我真的希望我没有完全误解这个问题,但我开始了。
看起来您只是想确保传入的值可以像浮点数一样进行操作,无论输入是
3
还是4.79
,例如,对吗?如果是这种情况,那么只需在对其进行操作之前将输入转换为浮点数即可。这是您修改后的代码:
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()
(为了整洁我也做了一些改动,希望大家不要介意<3)
使用内置的 isinstance 函数
if isinstance(num, (int, float)):
#do stuff
此外,您应该避免使用保留关键字作为变量名称。关键字
from
是 Python 中的保留关键字
最后,我注意到另一个错误:
if From == 'aud' or 'brl'
应该是
if From == 'aud' or From == 'brl'
最后,要清理 if 语句,理论上您可以使用列表(如果将来您有更多货币,这可能会更好。
currencies = ['aud', 'brl'] #other currencies possible
if From in currencies and to in currencies:
#do conversion
这是检查给定字符串并接受
int
或 float
的方法(也可以转换为它;nb
将是 int
或 float
):
number = input("Enter a number: ")
nb = None
for cast in (int, float):
try:
nb = cast(number)
print(cast)
break
except ValueError:
pass
但在您的情况下,仅使用 float 可能会达到目的(整数的字符串表示形式也可以转换为浮点数:
float('3') -> 3.0
):
number = input("Enter a number: ")
nb = None
try:
nb = float(number)
except ValueError:
pass
如果
nb
是 None
,您得到的东西无法转换为 float
。
amount==int
没有意义。 input
给了我们一个字符串。 int
(和 float
)是一个函数。字符串永远不等于函数。
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')
返回一个 float
对象。 int('12.23')
会产生错误,因为它不是有效的整数字符串格式。
如果用户可能给出“12”或“12.23”,则使用
float(x)
将其转换为数字会更安全。结果将是一个浮点数。对于许多计算,您无需担心它是浮点数还是整数。数学是一样的。
如果需要,您可以在 int 和 float 之间进行转换:
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
您还可以进行
instance
测试
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
但你可能不需要做任何这些。
这些看起来效果很好。
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
number = input() # 让我们选择一个随机数 #输入的类型默认是字符串
尝试:
x==int(number) #check wheather it is an int or float
x=int(number)
除了:
x=float(number)
我认为你应该只使用 float(input() 函数。如果输入了 float 或 int,解释器将打印正确的值,除非输入了非 float 或非 int。 例如,看看这个简单的函数,您会发现浮点数和整数都被采用:
num1 = float(input("Enter first number: "))
num2 = float(input("Enter second number: "))
num3 = float(input("Enter third number: "))
print(f"The sum is: {num1 + num2 + num3}")
或者这个例子:
虽然正确: 尝试: num = float(input("请输入数字一:")) break # 如果输入有效则退出循环 除了值错误: print("请输入一个有效的数字(整数或浮点数)。")
print("您输入了:", num)