python-3.x 标识输入的数据类型

nuypyhwy  于 2022-12-01  发布在  Python
关注(0)|答案(4)|浏览(131)

我尝试打印用户输入的数据类型并生成如下表:

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

7z5jn7bk

7z5jn7bk1#

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'>
qmelpv7a

qmelpv7a2#

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将是一个更简洁的解决方案。

t1rydlwq

t1rydlwq3#

输入总是会返回一个字符串。你需要对这个字符串求值以得到一些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'>
q5iwbnjs

q5iwbnjs4#

这里的问题是,任何输入都是“字符串”,所以我们需要把“字符串”当作一个特例,并把它和其他东西分开。

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函数将显示其类型。如果它是字符串,则认为它是一个“错误”,并给出错误消息“这是一个字符串”。

相关问题