2017-04-11 55 views
2

我想在一个字符串在Python 3使用数字的字符串输入,Python 3中

导出并使用数字例如

_input = input() 
>? circle(5) 

我要导出并使用5作为浮动这里。我尝试使用_input.split('circle('),但它使一个列表与2个元素['','5]'] 我试图使用_input.split(')')an,它让另一个列表2个elemtens [“圆(5”,“”]

有没有帮助我做到这一点,或者我应该以另一种方式使用分裂?

在此之后,如果我想要的任何模块使用2号?

例如

_input = input() 
>? circle(5,3.14) 

_input = input() 
>? circle(5, 3.14) 

,然后乘以这个数(5 * 3.14)

+1

也许是因为我累了。但我完全不遵循你想要做的事情。 – Vallentin

+0

@Vallentin我试图做一个形状计算器,我想要用户输入形状名称和这样的数字 – DarkSuniuM

+0

如果你想创建某种计算器,你需要一个语法分析器(不是那么容易)或以某种方式实现这个(可能更简单但不太干净) –

回答

1

如果将只有一个功能与支架,然后用这个。首先我们提取括号内的字符串。现在,我们可以很容易地对字符串进行任何我们想要的操作。

s=input() 
string_in_brack = s[s.find("(")+1:s.find(")")] 
numbers = string_in_brack.split(',') 
if len(numbers)>1: 
    float(numbers[0]*numbers[1]) 
else: 
    float(numbers[0]) 

支架函数中的字符串取自here。你要做的是首先搜索左括号'(',然后将字符串切片,直到找到右括号即'''')。假设字符串是s='blahblah'然后s[4:7]将返回“喇嘛”等。

+0

非常感谢,它工作的很好,你能给我一个关于这部分的资源吗? =>'[s.find(“(”)+ 1:s。查找(“)”)]' – DarkSuniuM

+1

@AlirezaAyinMehr您的欢迎和检查编辑和我附加的链接.. –

1

也许正则表达式是最好的选择

import re 
input_ = 'circle(5, 3.14)' 
numbers = re.findall('\\d+[.]*\\d*', input_) 
float(numbers[0]) * float(numbers[1]) 
+0

我会解析语句,但不搜索整数 –

+0

它的工作原理,可以解释我('\\ d + [。] * \\ d *',input_) ?? – DarkSuniuM

+1

正则表达式应该如下所示: 任何数字(\\ d),出现1次或多次(+),然后是出现0次或多次(*)的停止([。]),随后是任意数字( \\ d)出现0次或更多次(*) – spadarian

1

硬编码-Y的方式来解析你的字符串:

>>> s = 'circle(5, 3.14)' 
>>> a, b = map(float, s.strip()[7:-1].split(',')) 
>>> a 
5.0 
>>> b 
3.14 
>>> a*b 
15.700000000000001 

即取号部分,用逗号分开,打开列表元素花车并乘以它们。

使用正则表达式可能更容易翻译到类似的问题:

>>> import re 
>>> s = 'circle(5, 3.14)' 
>>> a, b = re.match('\s*circle\((\d(?:\.\d+)?),\s*(\d(?:\.\d+))?\)\s*', s).groups() 
>>> float(a)*float(b) 
15.700000000000001 

regex101演示:https://regex101.com/r/O3bSwr/1/

相关问题