我的代码如下:
`if (a <= 10){
z = 5;
} else {
z = -1;
}`
我发现当s(10 - a) = |10 - a| / (10 - a)
输出1或-1时。如果1
则输出a < 10
,-1
则输出a > 10
。
然后,我只求解线性方程z = s(10 - a) * m + b
,找到常数m和b。
5 = 1 * m + b
和-1 = -1 * m + b
哪个输出b = 2, m = 3
。
然后可以将其建模为z = 3 * s(10 - a) + 2
。
现在这个问题变得更加棘手。如果我在嵌套的if语句中有两个变量怎么办?如:
`if (a <= 10){
if(b <= 3){
z = 3;
} else {
z = 1;
}
} else {
if(b <= -5){
z = -11;
} else {
z = 4;
}
}`
我试图用另一系列线性方程来解决这个问题。
3 = A * s(10 - a) + B * s(3 - b) + C
1 = A * s(10 - a) + B * s(3 - b) + C
-11 = A * s(10 - a) + D * s(-5 - b) + C
4 = A * s(10 - a) + D * s(-5 - b) + C
以A,B,C,D为常数。但是,这并没有给我正确的答案。我做错了什么?
答案 0 :(得分:4)
if语句可以通过使用以下技巧转换为公式:如果if
语句为真,我们需要找到一个公式为1,否则为0。我们可以使用signum函数:
f(x, y) = (sign(y - x) + 1) / 2
如果x 因此,使用这两个公式,我们可以很容易地将整个事情放在一起:
f(a, 10) * (f(b, 3) * 3 + g(b, 3) * 1) + g(a, 10) * (f(b, -5) * -11 + g(b, -5) * 4)
答案 1 :(得分:2)
形式的一般方程式:
((z2+z1)/2) + (|z2-z1|/2)*f(a,b)
其中f(a,b) = |a-b|/(a-b)
英文:
(midpoint between 2 given z values) +
(distance from midpoint to either z value)*|a-b|/(a-b)
在原始示例上尝试此操作:
if (a <= 10){
z = 5;
} else {
z = -1;
}
你得到:
z1=5
z2=-1
f(a,b)=f(10,a)=|10-a|/(10-a)
将这些插入......
((5-1)/2) + (|5-(-1)|/2)*|10-a|/(10-a)
简化为原始z = 3 * s(10 - a) + 2
将其应用于嵌套条件时:
if (a <= 10) {
... // z1
} else {
... // z2
}
z1
我得到z1 = 2 + |3-b|/(3-b)
z2
我得到-3.5 + 7.5*(|-5-b|/(-5-b))
。 z1
似乎没问题,但是z2
似乎没有效果,因为如果您尝试b=0
z2 = -3.5 - 7.5*(1)
0>-5
,那么z2 = 4
您会期望if (b <= -5) {
z = -11;
} else {
z = 4;
}
f(a,b) = |a-b|/(a-b)
从那以后:
f(a,b) = |b-a|/(b-a)
为了获得正确的表达式,我将z2 = -3.5 + 7.5*(|b+5|/(b+5))
的定义交换为b=0
,新结果为4
,测试if (a <= 10) z = 2 + |3-b|/(3-b)
else z = -3.5 + 7.5*(|b+5|/(b+5))
给出b
的正确结果。这减少了嵌套条件看起来像更简单的问题
items = [] # Declare a list
# Add items to list
for x in range(1, 4):
items.append(input("item" + str(x) + ": "))
if all(item == "wood" for item in items):
print("You created a stick")
假设您知道div {
background: #3b9af9;
background: -moz-linear-gradient(left, #3b9af9 0%, #3b9af9 32%, #ffffff 32%, #ffffff 64%, #ef1010 64%, #ef1010 100%);
background: -webkit-linear-gradient(left, #3b9af9 0%,#3b9af9 32%,#ffffff 32%,#ffffff 64%,#ef1010 64%,#ef1010 100%);
background: linear-gradient(to right, #3b9af9 0%,#3b9af9 32%,#ffffff 32%,#ffffff 64%,#ef1010 64%,#ef1010 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#3b9af9', endColorstr='#ef1010',GradientType=1 );
}
,您可以应用上述用于简单案例的相同方法。