写一段python计算字符串表达式的代码
时间: 2023-03-12 13:30:31 浏览: 69
# 请在下面写出python计算字符串表达式的代码def calculate(expression):
return eval(expression)
print(calculate("2 + 3 * 4")) # 14
相关问题
C++调用python sympy计算表达式 使用pybind11
好的,我可以帮你回答这个问题。
首先,需要在C++中使用pybind11库来调用Python代码。pybind11是一个开源的库,可以方便地将C++和Python代码结合起来。它提供了一个简单的接口,可以将C++数据类型转换为Python数据类型,并在C++代码中使用Python模块。
接下来,需要在Python中使用sympy库来计算表达式。sympy是一个Python库,可以进行符号计算,并支持各种数学操作,如求导、积分、解方程等等。
在Python中,可以使用以下代码计算表达式:
```python
import sympy
x = sympy.Symbol('x')
expr = sympy.parse_expr('x**2 + 2*x + 1')
result = expr.subs(x, 3)
print(result)
```
这段代码中,首先定义了一个符号变量x,然后使用parse_expr函数将字符串转换为表达式。最后,使用subs函数将x的值替换为3,并打印结果。
最后,在C++中调用Python代码,可以使用以下代码:
```c++
#include <pybind11/pybind11.h>
namespace py = pybind11;
int main() {
py::module sympy = py::module::import("sympy");
py::object x = sympy.attr("Symbol")("x");
py::object expr = sympy.attr("parse_expr")("x**2 + 2*x + 1");
py::object result = expr.attr("subs")(x, 3);
std::cout << py::str(result) << std::endl;
return 0;
}
```
这段代码中,首先导入sympy模块,然后定义符号变量x和表达式expr。最后,使用subs函数计算表达式的值,并将结果转换为字符串打印出来。
这就是使用pybind11调用Python sympy库计算表达式的基本方法。希望对你有所帮助!
请用python写一段正则表达式匹配日期的代码,要求:不匹配不合法的日期,比如20230231
好的,我会尽力回答您的问题。以下是用 Python 编写的正则表达式匹配日期的代码:
```python
import re
pattern = r'^((?P<year>[1-9]\d{3})[-/]?((0?[13578]|10|12)[-/]?(0?[1-9]|[1-2]\d|3[01])|(0?[469]|11)[-/]?(0?[1-9]|[1-2]\d|30)|0?2[-/]?(0?[1-9]|1\d|2[0-8])))$'
def is_valid_date(string):
match = re.match(pattern, string)
if not match:
return False
groups = match.groupdict()
year = int(groups['year'])
month = int(string[5:7])
day = int(string[8:10])
if month == 2 and day > 28:
if day == 29 and (year % 400 == 0 or (year % 100 != 0 and year % 4 == 0)):
return True
else:
return False
return True
# Test cases
print(is_valid_date('20200101')) # True
print(is_valid_date('20200229')) # False
print(is_valid_date('20210229')) # False
print(is_valid_date('20200331')) # True
print(is_valid_date('20200431')) # False
```
这段代码使用了较为复杂的正则表达式,可以匹配符合 ISO 8601 标准的日期字符串。同时,为了保证匹配到的日期是合法的,还需要进行一些简单的计算。