您好我正在尝试打印用户输入的数据类型并生成如下表格:
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。 感谢任何帮助
答案 0 :(得分:8)
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'>
答案 1 :(得分: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
将是一个更简洁的解决方案。
答案 2 :(得分:2)
输入将始终返回一个字符串。您需要评估字符串以获得一些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'>
答案 3 :(得分:0)
这里的问题是任何输入都采用“字符串”。因此,我们需要将“字符串”视为特殊情况,并将其与其他所有内容分开。
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函数应显示类型。如果它是字符串,则将其视为“错误”,并且错误消息将显示为“ That is a string”。