gpt4 book ai didi

python - 如何使用声明性逻辑编写 Python 脚本

转载 作者:行者123 更新时间:2023-11-28 20:20:44 26 4
gpt4 key购买 nike

这是一个复杂的问题(至少对我而言),我希望有人可以指点一本书/网站/博客来帮助我开始。有人能告诉我在哪里可以找到用 python 编写脚本的信息,它会读取一堆逻辑语句并将该逻辑应用于正在读取的一堆数据吗?我可以以非声明方式执行此操作,但这意味着只要有新的逻辑语句,我就需要编写新代码来处理它。如果我可以编写一些可以解释逻辑语句的通用脚本,那么我就不需要继续编写代码来跟上新的逻辑语句。

我正在尝试做的是我的脚本将读取 3 个文件。两个等长的文件包含两个指标的值。第三个是带有逻辑语句的文件。我希望脚本读取逻辑语句并将这些语句应用于数字,并在满足这些语句时写入消息。

例如,文件 1 将包含:

1
2
3
4
5
6

文件 2 将包含:

2
4
6
8
10
3

文件 3,将包含:

m1 >=3 && (m1 + m2) >= 11

如果我运行我的脚本,我希望它输出一些内容

m1 = 4 and m2 = 8 fulfills condition m1 >= 3 && (m1 + m2) >= 11
m1 = 5 and m2 = 10 fulfills condition m1 >= 3 && (m1 + m2) >= 11

最佳答案

我会使用 eval 函数。

>>> m1 = 10
>>> m2 = 30
>>> statement = 'm1 < m2 and m2 == 30'
>>> eval(statement)
True

警告eval() 将所有内容作为 python 代码执行,因此如果用户可以输入语句,他就可以运行任何内容。在某些网站上可能非常危险。您始终可以在评估之前解析语句。

安全检查示例:

def parse(statement, m1, m2):
statement = statement.replace('&&', ' and ')
statement = statement.replace('||', ' or ')
if is_safe(statement):
eval(statement)

def is_safe(to_test):
safe_tags = ('m1', 'm2','>=', '<=', '>', '<', '==', '+', '-', '*', '/', '(', ')', 'and', 'or', '.')
max_number_length = 20

for tag in safe_tags:
to_test = to_test.replace(tag, ' ')

for other in to_test.split(' '):
if other == '':
continue
if other.isdigit() == False or len(other) > max_number_length:
return False
return True


parse('m1 >=3 && (m1 + m2) >= 11', 10, 20)

仅使用允许的标签(白名单)。您可能需要向 samo_tags

添加 samo 更多标签

关于python - 如何使用声明性逻辑编写 Python 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30179233/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com