如何同时接受int和float类型的输入?

问题描述 投票:0回答:7

我正在制作一个货币转换器。如何让 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")

这两个不起作用。

python python-3.x integer
7个回答
5
投票

我真的希望我没有完全误解这个问题,但我开始了。

看起来您只是想确保传入的值可以像浮点数一样进行操作,无论输入是

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)


4
投票

使用内置的 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

3
投票

这是检查给定字符串并接受

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


0
投票

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

但你可能不需要做任何这些。


0
投票

这些看起来效果很好。

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

0
投票

number = input() # 让我们选择一个随机数 #输入的类型默认是字符串

尝试:

x==int(number)      #check wheather it is an int or float

x=int(number)

除了:

x=float(number)

0
投票

我认为你应该只使用 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("请输入一个有效的数字(整数或浮点数)。")

现在您可以使用 num 变量,它将是一个浮点数

print("您输入了:", num)

© www.soinside.com 2019 - 2024. All rights reserved.