python - 解构 if/else Python
问题描述
我有一个程序可以输出这样的一些条件(这是实际输出,它是伪代码):
if ( first occurance of 'AB' <= -0.5 ) {
return [ 0.]
} else {
if ( number of products viewed <= 1.5 ) {
if ( similarity to 'AB' <= 0.899999976158 ) {
return [ 1.]
} else {
return [ 0.]
}
} else {
if ( average time between actions <= 57.2111129761 ) {
return [ 0.39145907]
} else {
return [ 0.10410805]
}
}
}
我怎样才能获得更易读(?)/解构的解决方案?IE:
( first occurance of 'AB' > -0.5 ) * (( number of products viewed <= 1.5 ) * ( similarity to 'AB' <= 0.899999976158 ))+((( number of products viewed > 1.5 ) * ( average time between actions <= 57.2111129761 ))
(我已经有可以将“<=”更改为“>”的代码,但除此之外,我似乎无法以正确的顺序隔离每个 if 条件。
编辑:用于获取当前输出的代码(恐怕不是最小的例子)
def get_code(tree, feature_names, tabdepth=0):
left = tree.tree_.children_left
right = tree.tree_.children_right
threshold = tree.tree_.threshold
features = [feature_names[i] for i in tree.tree_.feature]
value = tree.tree_.value
f=[]
def recurse(left, right, threshold, features, node, f, tabdepth=0):
if (threshold[node] != -2):
print('\t' * tabdepth + 'if ( ' + features[node] + ' <= ' + str(threshold[node]) + ' ) {')
f.append('%' * tabdepth+'if ( ' + features[node] + ' <= ' + str(threshold[node]) + ' ) {')
if left[node] != -1:
recurse (left, right, threshold, features,left[node], f, tabdepth+1)
print('\t' * tabdepth+'} else {')
f.append('%' * tabdepth+'} else {')
if right[node] != -1:
recurse (left, right, threshold, features,right[node], f, tabdepth+1)
print('\t' * tabdepth + '}')
else:
print('\t' * tabdepth + 'return ' + str(value[node][0]))
f.append('%' * tabdepth + 'return ' + str(value[node][0]))
recurse(left, right, threshold, features, 0, f)
解决方案
听起来您需要编写代码:
- 解析 if/else 伪代码的任何实例,构建树结构;然后
- 递归遍历树结构,生成所需的布尔公式。
对于转换,主要思想是:
convert( if C then T else E )
==>
C * convert(T) + !C * convert(E)
如果您需要更具体的帮助,您可能应该问一个更具体的问题。
推荐阅读
- java - 应用程序未从 Firestore 检索文档
- php - PHP 邮件功能发送到 Gmail 和 Live 但不发送到我自己的电子邮件
- java - 尝试多个选项后,我的 google 地方 SDK 似乎无法正常工作。可能是什么问题?
- r - 正则表达式问题 - 同一个表达式中的两个否定查找
- azure-devops - 如何使用 .artifactignore 和 PublishPipelineArtifacts@2 重新忽略文件
- querydsl - Querydsl - 类型为 Duration 的总和
- flutter - Flutter 动态表单
- vba - Outlook MailItem - 确定项目是发送还是接收
- jdbc - 为什么 Kafka Connect 对时间戳列的处理方式不同?
- css - 在 Wordpress 中更改活动菜单链接颜色