Хаотичность погоды. Определите по ежедневным показаниям температуры хаотичность погоды за этот период

Новичок, изучаю Python алгоритмы. Метеорологическая служба вашего города решила измерять нестабильность погоды новым способом. Назовём хаотичностью погоды за n дней число дней, в которые температура строго больше, чем в день до (если такой существует) и в день после текущего (если такой существует). Например, если за 5 дней температура воздуха составляла 1, 2, 5, 4 и 8 градусов, то хаотичность за этот период равна 2: в 3-й и в 5-й дни выполнялись описанные условия. Определите по ежедневным показаниям температуры хаотичность погоды за этот период.

Пример 1:

ввод:                                вывод:

5                                      2
1 2 5 4 8

Пример 2

ввод:                                вывод:

7                                      3
-1 -10 -8 0 2 0 5

Формат ввода:
В первой строке дано число n — длина периода измерений в днях, 1 ≤ n ≤ 105.

Во второй строке даны n целых чисел — значения температуры в каждый из n дней. Значения температуры не превосходят 273 по модулю.

Формат вывода:
Выведите единственное число — хаотичность за данный период.

Вот что я попробовал (но это не то):

 a = 0
 days = -1
 summ = 0

 while a > -273:

     summ += a

     days += 1

     a = float(input())

 print(summ / days)

Не понимаю, как решить эту задачу, помогите, пожалуйста.


Ответы (3 шт):

Автор решения: asanisimov

Eсли не пытаться оптимизировать и просто в лоб, сравнивая в цикле с соседними числами

def cnt_day(*args):
    count = 0
    last_idx = len(args) - 1

    for i, value in enumerate(args):
        if i == 0:
            continue
        if i != last_idx:
            if args[i - 1] < value > args[i + 1]:
                count += 1
        else:
            if args[i - 1] < value:
                count += 1

    return count


print(cnt_day(1, 2, 3, 5, 4, 8))   # 2
→ Ссылка
Автор решения: Andrew

Конкретно описанная задача решается так, с учетом любых входящих данных по условию.

def main(input_ls):
    weather_ls = [int(el) for el in input_ls]
    weather_ls = weather_ls[1:]
    count = 0
                  
    for i in range(1, len(weather_ls)-1):
        if weather_ls[i-1] < weather_ls[i] > weather_ls[i+1]:
                count += 1
    try:
        if weather_ls[1]:
                
            if weather_ls[0] > weather_ls[1]:
                count += 1
            
            if weather_ls[-2] < weather_ls[-1]:
                count += 1
                    
    except Exception:
        count += 1
            
    return count
        
if __name__ == '__main__':
    with open('input.txt') as f:
        input_ls = f.read().split()
        count = main(input_ls)
        print(count)
→ Ссылка
Автор решения: passant

Можно, конечно, и циклами, и try, и по разному можно. А можно в две строчки:

temp=[2,3,-1,5,3,-3,2,3,4,5,4,3,6,5,4,7,8]

temp=[min(temp)-1]+temp+[min(temp)-1]
w_ch=len([n for n in range(1,len(temp)) if temp[n-1]<temp[n] >temp[n+1]])

print(w_ch)

Результат:

5

Не очень красивенько, но понятненько. А поскольку обходимся без try и граничных проверок на каждой итерации цикла, то скорее всего и быстренько.

→ Ссылка