2013-11-24 245 views
0

輸入的工作,我想輸入的形式載體「(x,y,z)如何使蟒蛇

s=raw_input("Enter vector (x,y,z): ") 
    x,y,z= s.split() 
    self.x= float(x) 
    self.y= float(y) 
    self.z= float(z) 

現在缺少的代碼?不應該分裂做這份工作?我也試過s.split("(",",",")"),但沒有成功。

回答

4

可以使用ast.literal_eval這樣輸入:

>>> import ast 
>>> s = "(1,100,200)" 
>>> x, y, z = ast.literal_eval(s) 
>>> type(x) 
<class 'int'> 

使用字符串函數,你需要剝去(),然後再拆分對,

>>> x, y, z = s.strip('()').split(',') 
>>> x, y, z 
('1', '100', '200') 

幫助上str.split

S.split([sep [,maxsplit]]) -> list of strings 

返回字符串S中的單詞列表,使用sep作爲 分隔符字符串。如果給出maxsplit,最多maxsplit 拆分完成。如果sep沒有指定或者沒有,則任何 空格字符串是一個分隔符,空字符串從結果中被移除 。

1

如果您輸入這樣的:

Enter vector (x,y,z): 
> 2,3,4 

你會想要做

x, y, z = s.split(",") 

如果你輸入的逗號和空格分隔的數字,這樣做:

x, y, z = s.split(", ") 

str.split將字符串拆分爲subs敲擊,在提供的參數的每次出現時分割(默認爲「」)。

1

另一種方法:捕捉你想要的而不是分開你不需要的東西。

import re 
s = '(44.2, 19, 12.73)' 
floats_rgx = re.compile(r'-?\d+(?:\.\d+)?') 
x, y, z = map(float, floats_rgx.findall(s)) 

這種做法有允許更多的開放式輸入格式的優勢(或劣勢,這取決於你的目標)。如果你想要更嚴格的東西,你可以寫一個完整的正則表達式來驗證精確的輸入格式。

+1

可能還想在模式開頭添加' - ?'來處理負數。 – iCodez