2013-11-24 247 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