Python:分析输入以确定其是整数、浮点数还是字符串
我花了一两天时间在这个问题上,目的是判断一个输入是整数、浮点数还是字符串。
简单来说,这个程序的设计是把每个输入都转成字符串,然后逐个检查这些字符串里的字符。如果字符串里全是数字,那就是整数;如果有一个点(.),那就是浮点数;如果都没有,那就不是数字。这个方法的明显缺陷是,包含字母和点的字符串会被错误地认为是浮点数。
这个程序的最终目标是打开文本文件,看看哪些输入是整数、浮点数或者其他类型。
问题
- 有没有什么方法可以进一步优化这个程序?
- 我该如何修改这个程序,使它能够打开文本文件,读取、分析,并写出哪些输入属于哪个列表?
这是我第一次发帖!!!
#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
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)