我正在尝试制作一个程序,该程序可以从字符串中提取所有数字并将它们相乘,就像字符串是“乘以30和50”一样,那么程序应该能够删除空格和字母并乘以剩余数字,数字可以大于2 ,您能告诉我我该怎么做
test = '*'.join(c for c in "multiply 30 and 50" if c.isdigit())
print(f'answer is {test}')
结果应为1500
答案 0 :(得分:1)
您可以为此使用正则表达式:
from re import compile as recompile
numbers = recompile(r'\d+')
然后您可以使用reduce
和mul
将数字相乘,例如:
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)}')