Loops 对于循环逻辑,通过查看未来的点值来标记一系列数据点的趋势类型
我使用了一个for循环,它遍历一系列数据点,并计算出如何对数据显示的趋势进行分类 以下是标记这些点的逻辑:Loops 对于循环逻辑,通过查看未来的点值来标记一系列数据点的趋势类型,loops,go,Loops,Go,我使用了一个for循环,它遍历一系列数据点,并计算出如何对数据显示的趋势进行分类 以下是标记这些点的逻辑: 如果连续6个点有下降/上升趋势,则标记为“下降趋势”/“上升趋势” 否则,如果一行中有7个点低于/高于平均值,则标记为“低于平均值”/“高于平均值” 我们将增加/减少趋势优先于低于或高于平均值 我认为我使用的逻辑是不正确的,但我不确定为什么。这是本系列的一句话中的一些逻辑: “对于每个点,如果接下来的5个点低于此值,然后是他们以前的搭档,则将所有这些点标记为“下降趋势”。否则,如果某个
- 如果连续6个点有下降/上升趋势,则标记为“下降趋势”/“上升趋势”
- 否则,如果一行中有7个点低于/高于平均值,则标记为“低于平均值”/“高于平均值”
package main
import (
"bufio"
"fmt"
"os"
"strings"
)
type points struct {
quantity float64
lowerBound float64
upperBound float64
mean float64
pattern string
}
func main() {
var pointsToUse = []points{
points{quantity: 3.5, lowerBound: 1, upperBound: 4.8,, mean: 4, pattern: "Common Variation"},
points{
quantity: 3.4,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.2,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.19,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.17,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.14,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.12,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.09,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 4.1,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.16,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.11,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.12,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.14,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.13,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Common Variation",
},
points{
quantity: 3.17,
lowerBound: 3,
upperBound: 4.8,
mean: 4,
pattern: "Commons Variation",
},
}
for i, point := range pointsToUse {
if len(pointsToUse) >= 6 && len(pointsToUse)-(i+1) >= 5 {
if point.quantity > pointsToUse[i+1].quantity && pointsToUse[i+1].quantity > pointsToUse[i+2].quantity && pointsToUse[i+2].quantity > pointsToUse[i+3].quantity && pointsToUse[i+3].quantity > pointsToUse[i+4].quantity && pointsToUse[i+4].quantity > pointsToUse[i+5].quantity {
point.pattern = "Decreasing Trend"
pointsToUse[i+1].pattern = "Decreasing Trend"
pointsToUse[i+2].pattern = "Decreasing Trend"
pointsToUse[i+3].pattern = "Decreasing Trend"
pointsToUse[i+4].pattern = "Decreasing Trend"
pointsToUse[i+5].pattern = "Decreasing Trend"
continue
} else if point.quantity < pointsToUse[i+1].quantity && pointsToUse[i+1].quantity < pointsToUse[i+2].quantity && pointsToUse[i+2].quantity < pointsToUse[i+3].quantity && pointsToUse[i+3].quantity < pointsToUse[i+4].quantity && pointsToUse[i+4].quantity < pointsToUse[i+5].quantity {
point.pattern = "Increasing Trend"
pointsToUse[i+1].pattern = "Increasing Trend"
pointsToUse[i+2].pattern = "Increasing Trend"
pointsToUse[i+3].pattern = "Increasing Trend"
pointsToUse[i+4].pattern = "Increasing Trend"
pointsToUse[i+5].pattern = "Increasing Trend"
continue
}
}
if (point.pattern != "Decreasing Trend" || point.pattern != "Increasing Trend") && len(pointsToUse)-(i+1) >= 6 {
if point.quantity < pointsToUse[i].mean && pointsToUse[i+1].quantity < pointsToUse[i].mean && pointsToUse[i].quantity < pointsToUse[i].mean && pointsToUse[i+3].quantity < pointsToUse[i].mean && pointsToUse[i+4].quantity < pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
pointsToUse[i].pattern = "Below Mean"
pointsToUse[i+1].pattern = "Below Mean"
pointsToUse[i+2].pattern = "Below Mean"
pointsToUse[i+3].pattern = "Below Mean"
pointsToUse[i+4].pattern = "Below Mean"
pointsToUse[i+5].pattern = "Below Mean"
pointsToUse[i+6].pattern = "Below Mean"
} else if point.quantity > pointsToUse[i].mean && pointsToUse[i+1].quantity > pointsToUse[i].mean && pointsToUse[i].quantity > pointsToUse[i].mean && pointsToUse[i+3].quantity > pointsToUse[i].mean && pointsToUse[i+4].quantity > pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
pointsToUse[i].pattern = "Above Mean"
pointsToUse[i+1].pattern = "Above Mean"
pointsToUse[i+2].pattern = "Above Mean"
pointsToUse[i+3].pattern = "Above Mean"
pointsToUse[i+4].pattern = "Above Mean"
pointsToUse[i+5].pattern = "Above Mean"
pointsToUse[i+6].pattern = "Above Mean"
}
}
}
fmt.Println(pointsToUse)
}
有人能指出我哪里出了问题吗 这一行:
if(point.pattern!=“递减趋势”| | point.pattern!=“递增趋势”)&&len(pointsToUse)-(i+1)>=6{
等于:
如果为true&&len(pointsToUse)-(i+1)>=6{
另外,您需要使用点来使用[i].pattern=“Desculating Trend”
而不是point.pattern=“Desculating Trend”
,因为点是循环值,不会在切片中分配
为什么对于a:=范围b
引用了一份副本,请检查(stackoverflow问题)感谢icza和sHartmann为我指出了正确的方向:
完整循环如下所示:
for i, point := range pointsToUse {
if len(pointsToUse)-(i+1) >= 5 {
if point.quantity > pointsToUse[i+1].quantity && pointsToUse[i+1].quantity > pointsToUse[i+2].quantity && pointsToUse[i+2].quantity > pointsToUse[i+3].quantity && pointsToUse[i+3].quantity > pointsToUse[i+4].quantity && pointsToUse[i+4].quantity > pointsToUse[i+5].quantity {
pointsToUse[i].pattern = "Decreasing Trend"
pointsToUse[i+1].pattern = "Decreasing Trend"
pointsToUse[i+2].pattern = "Decreasing Trend"
pointsToUse[i+3].pattern = "Decreasing Trend"
pointsToUse[i+4].pattern = "Decreasing Trend"
pointsToUse[i+5].pattern = "Decreasing Trend"
continue
} else if point.quantity < pointsToUse[i+1].quantity && pointsToUse[i+1].quantity < pointsToUse[i+2].quantity && pointsToUse[i+2].quantity < pointsToUse[i+3].quantity && pointsToUse[i+3].quantity < pointsToUse[i+4].quantity && pointsToUse[i+4].quantity < pointsToUse[i+5].quantity {
pointsToUse[i].pattern = "Increasing Trend"
pointsToUse[i+1].pattern = "Increasing Trend"
pointsToUse[i+2].pattern = "Increasing Trend"
pointsToUse[i+3].pattern = "Increasing Trend"
pointsToUse[i+4].pattern = "Increasing Trend"
pointsToUse[i+5].pattern = "Increasing Trend"
continue
}
}
if pointsToUse[i].pattern == "Decreasing Trend" || pointsToUse[i].pattern == "Increasing Trend" {
continue
} else if len(pointsToUse)-(i+1) >= 6 {
if point.quantity < pointsToUse[i].mean && pointsToUse[i+1].quantity < pointsToUse[i].mean && pointsToUse[i].quantity < pointsToUse[i].mean && pointsToUse[i+3].quantity < pointsToUse[i].mean && pointsToUse[i+4].quantity < pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
pointsToUse[i].pattern = "Below Mean"
pointsToUse[i+1].pattern = "Below Mean"
pointsToUse[i+2].pattern = "Below Mean"
pointsToUse[i+3].pattern = "Below Mean"
pointsToUse[i+4].pattern = "Below Mean"
pointsToUse[i+5].pattern = "Below Mean"
pointsToUse[i+6].pattern = "Below Mean"
} else if point.quantity > pointsToUse[i].mean && pointsToUse[i+1].quantity > pointsToUse[i].mean && pointsToUse[i].quantity > pointsToUse[i].mean && pointsToUse[i+3].quantity > pointsToUse[i].mean && pointsToUse[i+4].quantity > pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
pointsToUse[i].pattern = "Above Mean"
pointsToUse[i+1].pattern = "Above Mean"
pointsToUse[i+2].pattern = "Above Mean"
pointsToUse[i+3].pattern = "Above Mean"
pointsToUse[i+4].pattern = "Above Mean"
pointsToUse[i+5].pattern = "Above Mean"
pointsToUse[i+6].pattern = "Above Mean"
}
}
}
此条件:if(point.pattern!=“递减趋势”| | point.pattern!=“递增趋势”)&&&……
–第一部分总是true
,a!=X | | a!=Y
总是true
如果X!=Y
。你很可能想使用&
而不是|
。我没有想到……我假设,因为我是这样设置未来的值:pointsToUse[I+1]。模式=“下降趋势”…但我现在看到了你的观点point.pattern!=“下降趋势”| | point.pattern!=“上升趋势”
–这种情况毫无意义,总是正确的。你是否建议完全删除该条件,然后在趋势语句下面添加此语句:“if point.pattern=”“递减趋势”| | point.pattern==“递增趋势”{continue}“谢谢,我假设是因为我在“递增趋势”和“递减趋势”语句中设置了未来值,如果它能够正确评估的话
for i, point := range pointsToUse {
if len(pointsToUse)-(i+1) >= 5 {
if point.quantity > pointsToUse[i+1].quantity && pointsToUse[i+1].quantity > pointsToUse[i+2].quantity && pointsToUse[i+2].quantity > pointsToUse[i+3].quantity && pointsToUse[i+3].quantity > pointsToUse[i+4].quantity && pointsToUse[i+4].quantity > pointsToUse[i+5].quantity {
pointsToUse[i].pattern = "Decreasing Trend"
pointsToUse[i+1].pattern = "Decreasing Trend"
pointsToUse[i+2].pattern = "Decreasing Trend"
pointsToUse[i+3].pattern = "Decreasing Trend"
pointsToUse[i+4].pattern = "Decreasing Trend"
pointsToUse[i+5].pattern = "Decreasing Trend"
continue
} else if point.quantity < pointsToUse[i+1].quantity && pointsToUse[i+1].quantity < pointsToUse[i+2].quantity && pointsToUse[i+2].quantity < pointsToUse[i+3].quantity && pointsToUse[i+3].quantity < pointsToUse[i+4].quantity && pointsToUse[i+4].quantity < pointsToUse[i+5].quantity {
pointsToUse[i].pattern = "Increasing Trend"
pointsToUse[i+1].pattern = "Increasing Trend"
pointsToUse[i+2].pattern = "Increasing Trend"
pointsToUse[i+3].pattern = "Increasing Trend"
pointsToUse[i+4].pattern = "Increasing Trend"
pointsToUse[i+5].pattern = "Increasing Trend"
continue
}
}
if pointsToUse[i].pattern == "Decreasing Trend" || pointsToUse[i].pattern == "Increasing Trend" {
continue
} else if len(pointsToUse)-(i+1) >= 6 {
if point.quantity < pointsToUse[i].mean && pointsToUse[i+1].quantity < pointsToUse[i].mean && pointsToUse[i].quantity < pointsToUse[i].mean && pointsToUse[i+3].quantity < pointsToUse[i].mean && pointsToUse[i+4].quantity < pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
pointsToUse[i].pattern = "Below Mean"
pointsToUse[i+1].pattern = "Below Mean"
pointsToUse[i+2].pattern = "Below Mean"
pointsToUse[i+3].pattern = "Below Mean"
pointsToUse[i+4].pattern = "Below Mean"
pointsToUse[i+5].pattern = "Below Mean"
pointsToUse[i+6].pattern = "Below Mean"
} else if point.quantity > pointsToUse[i].mean && pointsToUse[i+1].quantity > pointsToUse[i].mean && pointsToUse[i].quantity > pointsToUse[i].mean && pointsToUse[i+3].quantity > pointsToUse[i].mean && pointsToUse[i+4].quantity > pointsToUse[i].mean && pointsToUse[i+5].quantity < pointsToUse[i].mean && pointsToUse[i+6].quantity < pointsToUse[i].mean {
pointsToUse[i].pattern = "Above Mean"
pointsToUse[i+1].pattern = "Above Mean"
pointsToUse[i+2].pattern = "Above Mean"
pointsToUse[i+3].pattern = "Above Mean"
pointsToUse[i+4].pattern = "Above Mean"
pointsToUse[i+5].pattern = "Above Mean"
pointsToUse[i+6].pattern = "Above Mean"
}
}
}
if pointsToUse[i].pattern == "Decreasing Trend" || pointsToUse[i].pattern == "Increasing Trend" {
continue
}