题目: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
文章出处登录后可见!
已经登录?立即刷新