Нужен алгоритм, который понимает, что знак меняется python
Я новичек в python и нужно узнать сколько раз в последовательности чисел меняется знак
import math
s = " "
Kol = 0
print ('Введите количество чисел')
n = int(input())
print('Введите первое число последовательности')
k = float(input())
for i in range(n-1):
print('Введите число последовательности')
z = float(input())
if (ТУТ ДОЛЖНО БЫТЬ УСЛОВИЕ, которое понимает что знак сменился):
Kol = Kol + 1
print('знак поменялся')
if Kol > 0:
print('\nЗнак поменялся ', "%5.2f" %(Kol), 'раз')
else:
print('Знак не менялся');
Ответы (3 шт):
Автор решения: eri
→ Ссылка
Смена знаков определяется логическим выражением (a<0)^(b<0).
from functools import reduce
n = 0
def change(a,b):
global n
if (a<0)^(b<0): n+=1
return b
reduce(change,arr)
arr = [1,-5,5,4,-8]
assert n == 3
reduce попарно применяет функцию к прошлому результату и следующему элементу, это можно переписать на for или while
nonlocal b - если n объявленно в функции
Автор решения: Xander
→ Ссылка
Ну и для любителей однострочников:
from itertools import groupby
data = [-1, 5, 6, 7, -2, -4, -6, 1, 2, 3]
groups = len(list(groupby(data, key=lambda x: -1 if x <0 else 1)))
print('Знак сменился {} раз'.format(groups-1))