2014-05-07 269 views
2

我正在編寫一個演示線性搜索的程序,但我堅持使用其中的一個步驟。在這一步中,我試圖讓程序獲取由逗號分隔的數字輸入列表,然後以列表形式返回列表。
(例如1,5,2,4 - > [1,5,2,4])。 到目前爲止,我所擁有的代碼將以列表的形式返回輸入,但僅限於輸入單個數字。 (例如3 - > [3])。將數字輸入空列表Python

def main(): 
    n = eval(input("Enter list of numbers separated by commas: ")) 
    list = [] 
    n = int(n) 
    list.append(n) 

    print(list) 
main() 

但是,當我輸入用逗號分隔的數字列表,我得到這個錯誤:

 Traceback (most recent call last): 
File "C:/Users/eardery/Desktop/Final Exam Practice/linearsearch.py", line 8, in <module> 
    main() 
File "C:/Users/eardery/Desktop/Final Exam Practice/linearsearch.py", line 4, in main 
    n = int(n) 
TypeError: int() argument must be a string or a number, not 'tuple' 

什麼是另一種方式沒有得到這個錯誤地評價輸入並有計劃按我預期它上班?有人可以解釋一個'元組'是什麼嗎?

+0

是什麼'N'包含;-) – Daniel

+0

_Please_不使用'list'變量名。這個名字有一個內置的東西。 – Lafexlos

+0

'eval'實際上爲你做了工作,'n'是'int'的一個元組。但是,真的,你應該聽取以下答覆者的建議,不要在用戶輸入中使用'eval'。 – kmacinnis

回答

3

您不應該在這裏使用eval。使用用戶輸入時最好避免使用eval。此外,它往往會在你的情況下返回意外的結果,因爲,當它處理整數列表不同於單一的整數)

怎麼是這樣的:。

line = input("Enter list of numbers separated by commas: ") 
data = [int(i) for i in line.split(',')] 

最後一行將圍繞拆分文本逗號並將每個元素轉換爲int。它相當於

data = [] 
for i in line.split(','): 
    data.append(int(i)) 
+0

注意:他顯然使用Python 3,所以它應該是'input'而不是'raw_input'。 – Joe

+0

您絕對正確,先生。舊習難改。我適當地適應了。 –

+0

它的工作!我看到我現在犯了什麼錯誤。謝謝! –

2

元組是一個不可變的(不可變更的)列表。這是Python假設你輸入的內容,因爲它是一個逗號分隔的列表。

split(',')讓你打破'1,2,3'['1', '2', '3']並轉換「4」進入[「4」]

你仍然需要每個字符串轉換爲int,而我做的應該是一個列表理解。

def main(): 
    n = input("Enter list of numbers separated by commas: ") 
    # For each val in list of input, make int. 
    list = [int(val) for val in n.split(',')] 
    print(list) 

if __name__ == '__main__': 
    main() 
-1

請勿使用eval因爲eval是邪惡的。

def main(): 
    raw = input("Enter list of numbers separated by commas: ") 
    numbers = list(map(int, raw.split(','))) 
    print(numbers) 

if __name__ == '__main__': 
    main() 
+0

嘿,-2?爲什麼?請發表評論! – Daniel

+1

很可能是因爲'list(map(int,raw.split(',')))'不像'[int(val)for val中的pythonic。分裂( '')]'。另外,列表推導的優化通常使它們比'list'和'map'更快。 – Joe

+0

對不起,但這是一個品味的問題;-) – Daniel

0

您不需要eval函數。它僅用於評估這些東西。

您需要通過拆分功能拆分輸出並將其轉儲到列表中。

您的解決方案: -

def main(): 
    n = raw_input("Enter list of numbers separated by commas: ") 
    list= [int(value) for value in n.split(',')] 
    print(list) 
main() 
+0

這不會將字符串轉換爲整數。 – Daniel

+0

您可以通過int():)鍵入cast –

+0

不要使用列表,它是一個內置類型。 'list'的fisrt分配是無用的。 – Daniel

0
def main(): 
    n = list(input("Enter list of numbers separated by commas: ")) 
    n = map(lambda x:int(x),n) 
    print(n) 
main() 
+0

。你只能得到單個字符的列表。 – Daniel

+0

這隻會返回一個字符串列表。必須轉換爲整數。 – Joe