python Z3如果没有else怎么用
python Z3 how to use if without else
我尝试使用 z3 做一些简单的数学运算,条件是 if 没有 else。
............................................
for (i = 0; i <= 15; ++i)
{
if (s1[i] > 64 && s1[i] <= 90)
s1[i] = (s1[i] - 51) % 26 + 65;
if (s1[i] > 96 && s1[i] <= 122)
s1[i] = (s1[i] - 79) % 26 + 97;
}
for (i = 0; i <= 15; ++i)
{
result = key[i];
if (s1[i] != result)
return result;
}
from z3 import *
key = list(b"Qsw3sj_lz4_Ujw@l")
s1 = [BitVec('s1_%d' % i, 8) for i in range(len(key))]
s = Solver()
for i, n in enumerate(key):
con1 = If(Or(64 < s1[i], s1[i] <= 90), (s1[i] - 51) % 26 + 65 == key[i])
con2 = If(Or(96 < s1[i], s1[i] <= 122), (s1[i] - 79) % 26 + 97 == key[i])
s.add(con1)
s.add(con2)
print(s.check())
print(s.model())
遇到错误。 TypeError: If() missing 1 required positional argument: 'c'
If
接受三个参数; (1) 条件,(2) then
结果,以及 (3) else
结果。你只提供了两个。如果您不关心 else
大小写约束,则可以替换 True
:
con1 = If(Or(64 < s1[i], s1[i] <= 90), (s1[i] - 51) % 26 + 65 == key[i], True)
con2
.
也类似
请注意,在 z3 中 没有 没有 else
的 If
之类的东西。
虽然这会修复您的“语法”错误,但不会修复您在模型中犯的错误;如果有的话,当然。 (如前所述,您的条件是 unsat
,我认为这不是您所期望的。)当条件为假时,您应该真正考虑程序如何更改(或不更改),而不是像这样的约束,你应该模拟变量在将它们放入 SSA(单一静态赋值形式)后如何变化。
我尝试使用 z3 做一些简单的数学运算,条件是 if 没有 else。
............................................
for (i = 0; i <= 15; ++i)
{
if (s1[i] > 64 && s1[i] <= 90)
s1[i] = (s1[i] - 51) % 26 + 65;
if (s1[i] > 96 && s1[i] <= 122)
s1[i] = (s1[i] - 79) % 26 + 97;
}
for (i = 0; i <= 15; ++i)
{
result = key[i];
if (s1[i] != result)
return result;
}
from z3 import *
key = list(b"Qsw3sj_lz4_Ujw@l")
s1 = [BitVec('s1_%d' % i, 8) for i in range(len(key))]
s = Solver()
for i, n in enumerate(key):
con1 = If(Or(64 < s1[i], s1[i] <= 90), (s1[i] - 51) % 26 + 65 == key[i])
con2 = If(Or(96 < s1[i], s1[i] <= 122), (s1[i] - 79) % 26 + 97 == key[i])
s.add(con1)
s.add(con2)
print(s.check())
print(s.model())
遇到错误。 TypeError: If() missing 1 required positional argument: 'c'
If
接受三个参数; (1) 条件,(2) then
结果,以及 (3) else
结果。你只提供了两个。如果您不关心 else
大小写约束,则可以替换 True
:
con1 = If(Or(64 < s1[i], s1[i] <= 90), (s1[i] - 51) % 26 + 65 == key[i], True)
con2
.
请注意,在 z3 中 没有 没有 else
的 If
之类的东西。
虽然这会修复您的“语法”错误,但不会修复您在模型中犯的错误;如果有的话,当然。 (如前所述,您的条件是 unsat
,我认为这不是您所期望的。)当条件为假时,您应该真正考虑程序如何更改(或不更改),而不是像这样的约束,你应该模拟变量在将它们放入 SSA(单一静态赋值形式)后如何变化。