Python:分析输入以确定其是整数、浮点数还是字符串

1 投票
5 回答
6729 浏览
提问于 2025-04-17 21:02

我花了一两天时间在这个问题上,目的是判断一个输入是整数、浮点数还是字符串。

简单来说,这个程序的设计是把每个输入都转成字符串,然后逐个检查这些字符串里的字符。如果字符串里全是数字,那就是整数;如果有一个点(.),那就是浮点数;如果都没有,那就不是数字。这个方法的明显缺陷是,包含字母和点的字符串会被错误地认为是浮点数。

这个程序的最终目标是打开文本文件,看看哪些输入是整数、浮点数或者其他类型。

问题

- 有没有什么方法可以进一步优化这个程序?

- 我该如何修改这个程序,使它能够打开文本文件,读取、分析,并写出哪些输入属于哪个列表?

这是我第一次发帖!!!

#Checks input to see if input is integer, float, or character

integer = []
float = []
not_number = []

digits = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
input_list = [100, 234, 'random', 5.23, 55.55, 'random2']

for i in input_list:

    i = str(i) 
    length = len(i)

    count = 0 
    marker = 0

    for j in i:
        for k in digits:
            if k == j:
                count = count + 1

#k loops through digits to see if j single character 
#string input is number

        if count == length:
            integer.append(i)
            marker = 1

#count is equal to length if entire string is integers

        if j == '.':
            float.append(i)
            marker = 1

#Once '.' is found, input is "considered" a float

        if marker == 1:
            break
    else:
        not_number.append(i)

#If code above else proves that input is not a number the 
#only result is that it isn't a number

print ('Integers: ', integer)
print ('Float: ', float)
print ('Not Numbers', not_number)

5 个回答

0

你可以使用Python的eval函数。要检查输入的字符串是什么类型,只需使用type(eval(你的字符串))。

1

你可以用这种方式来检查它

 if type(i) is IntType:
   #do something
 if type(i) is StrType:
   #do something
 if type(i) is FloatType:
   #do something

http://docs.python.org/2/library/types.html

1

你不需要把数据转换成字符串再去处理。你可以直接使用 type 函数来获取数据的类型,然后把结果放到一个 dict(字典)里,像这样做。

input_list = [100, 234, 'random', 5.23, 55.55, 'random2']
result = {}
for item in input_list:
    result.setdefault(type(item), []).append(item)
print('Integers: ', result[int])
# Integers:  [100, 234]
print('Float: ', result[float])
# Float:  [5.23, 55.55]
print('Not Numbers', result[str])
# Not Numbers ['random', 'random2']
4

如果你从一个文本文件中读取内容,得到的总是字符串。你可以使用 int()float() 来决定每个元素属于哪种类型,同时要处理可能出现的错误:

integers = []
floats = [] # Don't use float as a variable, it will override a built-in python function
not_number = []

# I modified this list so all the elements are string, if you already have ints and floats, you can use type() to know where to append
input_list = ["100", "234", 'random', "5.23", "55.55", 'random2']

for i in input_list:
    value = None
    try:
        value = int(i)
    except ValueError:
        try:
            value = float(i)
        except ValueError:
            not_number.append(i)
        else:
            floats.append(value)
    else:
        integers.append(value)

print(not_number)
print(floats)
print(integers)

# ['random', 'random2']
# [5.23, 55.55]
# [100, 234]
1

对于那些想要更小、更优化代码的人,这里有个更好的解决方案。

integer = []
floats = []
not_number = []
full_list = [100, 234, 'random', 5.23, 55.55, 'random2', 'vdfj.324.23tk.sdfklsj']



for i in full_list:
    if isinstance(i, int):
        integer.append(i)
    elif isinstance(i, float):
        floats.append(i)
    else:
        not_number.append(i)
print ('Integers ', integer)
print ('Floats ', floats)
print ('Not numbers ', not_number)

撰写回答