2016-11-10 62 views
-1

我試圖讓我的程序允許用戶使用python內置的input()函數輸入表單(x,y,z)的向量。如何讓用戶輸入向量而不是字符串?

如果在輸入()函數中用python正常輸入,它會分別爲每個矢量編制索引。例如,

>>> z = (1,2,3), (4,5,6), (7,8,9) 
>>> z[1] 
(4, 5, 6) 

但是當我嘗試使用輸入函數時遇到以下問題。

>>> z = input('What are the vectors? ') 
What are the vectors? (1,2,3), (4,5,6), (7,8,9) 
>>> z[1] 
'1' 

爲什麼使用輸入函數將它變成一個字符串,有沒有辦法解決這個問題?

謝謝

+3

用戶*類型*組成字符串的字符。由程序員來解釋這些字符串。 –

回答

2

在Python 3中,input總是返回一個字符串。你需要轉換字符串。對於這種類型的輸入我建議使用liter_eval從模塊ast

import ast 
vectors = ast.literal_eval('(1,2,3), (4,5,6), (7,8,9)') 
vectors[1]  #(4, 5, 6) 
+0

我不知道這是python 3的情況。ast .literal_eval()函數完全解決了我的問題。非常感謝您的幫助。 – Kyle

+0

@Kyle如果你有使用Python 2的經驗,Python 3的'input()'基本上與Python 2的'raw_input()'相同。 –

0

在你的榜樣,z只是一個字符串由用戶輸入。

這個字符串是:"(1,2,3), (4,5,6), (7,8,9)"所以第二個元素z[1]只是給你"1"

如果你想要一個實際的矢量對象,你將不得不編寫代碼來解析用戶輸入的字符串。例如,您可以基於括號分隔並單獨轉換數字。

希望這會有所幫助!

-2

您可以使用eval和輸入函數來獲得與第一個相同的值。

eval(input('Please enter the vector') 
+1

推薦無保護的'eval'是危險的。在他們的編程職業生涯早期,程序員需要意識到像'eval'這樣的結構的危險。請參閱http://nedbatchelder.com/blog/201206/eval_really_is_dangerous.html –

+1

謝謝,我也是Python新手。所以沒有意識到這件事。 – kunal3237

相關問題