Python 題目

PROBLEM

判斷趨勢 + 是否有峰谷

一題一題刷

def analyze_trend(arr):
    if len(arr) < 3:
        print("趨勢:資料太少")
        return

    # 判斷單調趨勢
    increasing = all(arr[i] <= arr[i+1] for i in range(len(arr)-1))
    decreasing = all(arr[i] >= arr[i+1] for i in range(len(arr)-1))

    if increasing and not all(x == arr[0] for x in arr):
        print("趨勢:遞增")
    elif decreasing and not all(x == arr[0] for x in arr):
        print("趨勢:遞減")
    else:
        print("趨勢:無明顯方向")

    # 判斷山峰與低谷
    peaks = []
    valleys = []

    for i in range(1, len(arr) - 1):
        if arr[i - 1] < arr[i] > arr[i + 1]:
            peaks.append((i, arr[i]))
        elif arr[i - 1] > arr[i] < arr[i + 1]:
            valleys.append((i, arr[i]))

    # 嚴格趨勢條件
    if len(peaks) == 1 and not valleys:
        print(f"嚴格趨勢:有一個山峰 at 位置 {peaks[0][0]},值為 {peaks[0][1]}")
    elif len(valleys) == 1 and not peaks:
        print(f"嚴格趨勢:有一個低谷 at 位置 {valleys[0][0]},值為 {valleys[0][1]}")
    else:
        print("嚴格趨勢:無(山峰/低谷不唯一或混合)")