【问题标题】:how to partition the range of a variable given different conditions?如何在给定不同条件的情况下划分变量的范围?
【发布时间】:2016-04-14 22:58:53
【问题描述】:

对于给定的程序,现在我想确定不同路径对应的有效输入范围。

举个例子:

def test(a):

    if (a < 50):
        return 1
    else:
        return -1

所以对于这个程序,有两条路径。一条路径返回 1,另一条路径返回 -1。假设有一个给定的函数(你也可以设计你自己的函数),它可以返回一个路径条件列表:

conditions = get_path_conditions(test)

使得条件包含2个字符串元素,["a&lt;50", "a&gt;=50"]

假设输入a = "(-100,100)"的范围(为方便起见,我用一个字符串来表示下限和上限,就像我们在数学中所做的那样。如果您愿意,也可以使用其他表示)。

那么我该如何设计一个可以将不同条件映射到不同输入范围的函数呢?

conditions = ["a<50", "a>=50"]
a = "(-100,100)"
input_ranges = get_inputs(conditions,a)

所以input_ranges 有两个元素:["(-100,50)","[50,100)"]

类似问题:

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3658

【问题讨论】:

  • 我不明白这应该完成什么。可能是XY Problem。是否存在这种方法旨在解决的“原始”问题?
  • 感谢您的评论。我正在尝试找到一种分析程序的方法。 KLEE 可以通过生成对应于不同路径的不同测试用例来做到这一点(例如,if/else 进入不同的路径)。它可以为每条路径生成一个符号表达式,但不会给出输入的所有具体值。所以我试图确定不同路径的具体值范围。

标签: python algorithm


【解决方案1】:

如果您的条件是布尔值,您可以使用 (lambda) 函数。使用您的示例:

conditions = [lambda x:x<50, lambda x:x=>50]

或者您可以使用def 定义您的函数,并在条件列表中按名称引用它们。

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 2019-11-27
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多