我们可以从字符串中提取数字并将其相乘吗

时间:2019-07-13 12:16:55

标签: python numbers

我正在尝试制作一个程序,该程序可以从字符串中提取所有数字并将它们相乘,就像字符串是“乘以30和50”一样,那么程序应该能够删除空格和字母并乘以剩余数字,数字可以大于2 ,您能告诉我我该怎么做

test = '*'.join(c for c in "multiply 30 and 50" if c.isdigit())
print(f'answer is {test}') 

结果应为1500

2 个答案:

答案 0 :(得分:1)

您可以为此使用正则表达式:

from re import compile as recompile

numbers = recompile(r'\d+')

然后您可以使用reducemul将数字相乘,例如:

from functools import reduce
from operator import mul

query = 'multiply 30 and 50'
result = reduce(mul, map(int, numbers.findall(query)))

这将给我们:

>>> result
1500

这当然不考虑“ 相乘...和... ”部分,因此如果它是“ 从10减去5 ”,则仍会返回50

如果您想创建一个更高级的系统,那么它不仅会在字符串中查找数字,还应该实现一个parser [wiki],例如使用compiler-compiler [wiki]

答案 1 :(得分:0)

类似于您尝试的方法,但是可以工作:

s = 'multiply 5 by 10'
import re
s = '*'.join(re.findall('\d+',s))
print(f'{eval(s)}')