Python判断输入是否为数值类型并指出类型

题目:Python:判断输入的数是否为数值类型(int或float),如果可以的话,请指出类型。

情景: 假如有个程序,输入a和b两个数,程序可以判断a和b到底是不是数值类型(即是整数还是浮点数),若不是则要求用户重新输入,若是则对a和b进行运算(+-*/等),如果可以的话请转化成相应的int或float类型

文章涉及: isdigit(),replace(), try…except….语句, eval()的用法

我遇到这个问题时也看过其他博主的回答,但感觉结果不尽人意,或多或少有点片面,因此随写这么一篇文章。

一.判断a和b 到底是不是数值类型  即输入 123  123.123 等可以过 但 52aa 或 dd52等不能过,这里运用 isdigit()和 replace()来实现。这两个函数功能百度可查到。

a = input()
a_to_judge = a.replace('.','') #将a中的小数点的点‘.’ 去掉,其中replace用法可以百度
if a_to_judge.isdigit():
    print('a为数值类型')
else:
    print('a不是数值类型')

上面的代码实现了对数值类型的判断,即可直接float(a)进行后续计算,但若我们很迫切的想知道a到底为int类型还是float类型该怎么办呢

a = input()
a_to_judge = a.replace('.','') #将a中的小数点的点‘.’ 去掉,其中replace用法可以百度
if a.isdigit():
    print('a为int类型')
    a = int(a)
else:
    if a_to_judge.isdigit():
        print('a为float类型')
        a = float(a)
    else:
        print('请输入正确的数值类型')

二.这项功能还可以用try..except….语句实现 以《python入门到精通》一书的习题为例子,输入height和weight,  计算bmi的值。(下面这个代码可以不看,写的很差)

def bmi(height, weight):
    if (type(eval(height)) == float or type(eval(height)) == int) and (
            type(eval(weight)) == float or type(eval(weight)) == int):
        if eval(height) == 0:
            raise ValueError('高度不能为0')
        hei = float(height)
        wei = float(weight)
        bmi = wei / (hei * hei)
        print(bmi, type(bmi))

try:
    height = input('高')
    weight = input('体重')
    bmi(height, weight)
except (ValueError, TypeError, NameError, SyntaxError,ZeroDivisionError) as e:
    print('请输入正确数据', '错误原因为', e)
else:
    print('运行成功')

上面我是我自己开始写的,但后面改进了很多,如果目的只是计算,而不是去纠结他到底是int还是float 可以这样写,这样很方便,强烈推荐。

while True:
    try:
        a = float(input('a的值为'))
        b = float(input('b的值为'))
        print('计算a+b 值为',a+b)
        break
    except:
        print('请输入正确数据')
        continue

那么如果我们又想要知道a和b具体为int或float中哪个改怎么办呢

下面以判断a为int或是float作为例子: 用try….except….实现,判断b同理。随后可进行计算(略)

while True:
    a = input('a的值为')
    try:
       a = int(a)
       print('a为int')
       break
    except:
        try:
            a = float(a)
            print('a为float')
            break
        except:
            print('请输入正确的数值,而不是aa44 55dd这些')
            continue

物联沃分享整理
物联沃-IOTWORD物联网 » Python判断输入是否为数值类型并指出类型

发表评论