识别输入的数据类型
我想打印用户输入的数据类型,并生成一个像下面这样的表格:
ABCDEFGH = String
1.09 = float
0 = int
true = bool
等等。
我使用的是Python 3.2.3,我知道可以用 type()
来获取数据的类型,但在Python中,所有用户输入的内容都被当作字符串处理。我不知道怎么判断输入的是字符串、布尔值、整数还是浮点数。以下是代码的相关部分:
user_var = input("Please enter something: ")
print("you entered " + user_var)
print(type(user_var))
这段代码总是返回 str
,表示它是字符串。
4 个回答
-1
这里的问题是,任何输入都被当作“字符串”来处理。所以我们需要把“字符串”当作一个特殊的情况,和其他的输入分开对待。
x = input("Enter something: ")
try:
if type(eval(x)) == float:
print(x, " is floating point number")
elif type(eval(x)) == int:
print(x, " is interger number")
elif type(eval(x)) == bool:
print(x, " is a boolean")
except:
print("That is a string")
在这里,输入首先会被评估。如果输入不是字符串,eval函数会显示它的类型。如果输入是字符串,就会被视为“错误”,并给出错误信息:“那是一个字符串”。
1
输入总是会返回一个字符串。你需要对这个字符串进行评估,才能得到一些Python的值:
>>> type(eval(raw_input()))
23423
<type 'int'>
>>> type(eval(raw_input()))
"asdas"
<type 'str'>
>>> type(eval(raw_input()))
1.09
<type 'float'>
>>> type(eval(raw_input()))
True
<type 'bool'>
如果你想要安全一些(因为用户可以执行任意代码),你应该使用 ast.literal_eval
:
>>> import ast
>>> type(ast.literal_eval(raw_input()))
342
<type 'int'>
>>> type(ast.literal_eval(raw_input()))
"asd"
<type 'str'>
4
input()
函数总是会返回一个字符串。如果你想检查这个字符串是否可以转换成整数,你可以这样做:
try:
int_user_var = int(user_var)
except ValueError:
pass # this is not an integer
你可以写一个这样的函数:
def try_convert(s):
try:
return int(s)
except ValueError:
try:
return float(s)
except ValueError:
try:
return bool(s)
except ValueError:
return s
不过,正如其他回答提到的,使用 ast.literal_eval
会是一个更简洁的解决方案。
14
在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如,有人可能在使用某个工具或者编程语言时,碰到了错误或者不明白的地方。这时候,大家就会去一个叫StackOverflow的网站上提问,看看有没有人能帮忙。
在这个网站上,很多人会分享他们的经验和解决方案,帮助其他人解决问题。你可以把它想象成一个大社区,里面有很多热心的程序员,他们愿意分享自己的知识和技巧。
如果你在学习编程,遇到困难,不妨去看看这个网站,可能会找到你需要的答案哦!
from ast import literal_eval
def get_type(input_data):
try:
return type(literal_eval(input_data))
except (ValueError, SyntaxError):
# A string, so return str
return str
print(get_type("1")) # <class 'int'>
print(get_type("1.2354")) # <class 'float'>
print(get_type("True")) # <class 'bool'>
print(get_type("abcd")) # <class 'str'>