Хаотичность погоды. Определите по ежедневным показаниям температуры хаотичность погоды за этот период
Новичок, изучаю 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 шт):
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
Конкретно описанная задача решается так, с учетом любых входящих данных по условию.
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)
Можно, конечно, и циклами, и 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 и граничных проверок на каждой итерации цикла, то скорее всего и быстренько.