2014-03-06 32 views
1

爲了判斷一個輸入是整數,浮點數還是字符串,我一直在研究這一兩天。Python:分析輸入,看看它是一個整數,浮點數或字符串

簡而言之,該程序旨在將每個輸入轉換爲一個字符串,循環遍歷每個字符串並檢查列表中的數字。如果字符串的所有數字都是整數,如果它有'。'它是一個浮動,如果它沒有,它不是一個數字。明顯的缺陷是包含字母和'。'的字符串這將被視爲漂浮在這個程序中。

該程序的最終目標是打開文本文件並查看輸入是int,float還是其他。

問題

-Is有什麼辦法可以進一步優化這一方案

我 - 如何可以進一步修改該程序打開文本文件,閱讀,分析,並寫哪個輸入是在列表

第一篇文章!

#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) 

回答

1

較好地解決了那些尋求更小,更優化解ZED代碼

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) 
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'] 
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

+0

或者,作爲該模塊的文檔會告訴你,你可以只使用'int','str'和'float'代替'types'模塊:「從Python 2.2開始,內置的工廠函數(如int()和str()也是相應類型的名稱。這現在是訪問該類型而不是使用類型模塊的首選方式。「 – user2357112

+0

比我想象的要容易得多。 – Alexander

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] 
相關問題