Найти - Пользователи
Полная версия: Числовая градация
Начало » Python для новичков » Числовая градация
1
Genabox
Идет поток данных
134 121 149 532 250
Как отслеживать числа типа
100 150 200 300
тоесть большие целые числа?
Тут еще момент что может быть 148 а потом 152 а нужно понять что 150 прошло по шкале но такого числа не было
AD0DE412
чет wave напомнило ну или это https://ru.wikipedia.org/wiki/WAV так абстракно ежеле … а по смыслу топика вобще нечего не понятно шо надо шо куда … зачем?
Genabox
по типу асцелятора
переменная одна
она все время динамически обновляется
нужно подать сигнал когда проходит цело чесло или достигает его значение
xam1816
  
def threshold(*levels):
    max_value = 0
    def hold(a, b):
        def process(x):
            return x in range(a, b) and max_value < a and a
 
        return process
 
    def process(var):
        nonlocal max_value
        check_lst = (hold(levels[i], levels[i+1]) for i in range(len(levels)) if i+1 < len(levels))
        for check in check_lst:
            out = check(var)
            if out:
                max_value = out
                return out
    return process
 
f = threshold(50, 100, 150, 200, 250, 300)
 
test_lst = [45, 56, 88, 104, 152, 133, 77, 201, 196, 250, 258]
for i in test_lst:
    signal = f(i)
    if signal:
        print(f'i={i}, signal - {signal}')

 
i=56, signal - 50
i=104, signal - 100
i=152, signal - 150
i=201, signal - 200
i=250, signal - 250

Process finished with exit code 0
Genabox
Ого, большое спасибо
теперь остается сделать тоже самое в обратном направлении и вывести обратное число на понижение
xam1816
 def threshold(*levels):
    max_value = 0
    def hold(a, b):
        def process(x):
            out =  all([x in range(a, b), max_value < a]) and a\
                   or all([x in range(a, b), max_value > a]) and b
            return out
        return process
 
    def process(var):
        nonlocal max_value
        check_lst = (hold(levels[i], levels[i+1]) for i in range(len(levels)) if i+1 < len(levels))
        for check in check_lst:
            out = check(var)
            if out:
                max_value = out
                return out
    return process
 
f = threshold(50, 100, 150, 200, 250, 300)
 
test_lst = [45, 56, 88, 104, 152, 133, 77, 201, 196, 250, 258]
for i in test_lst:
    signal = f(i)
    if signal:
        print(f'i={i}, signal - {signal}')

i=56, signal - 50
i=104, signal - 100
i=152, signal - 150
i=133, signal - 150
i=77, signal - 100
i=201, signal - 200
i=196, signal - 200
i=250, signal - 250

Process finished with exit code 0
Genabox
если чесно мой уровень на питоне сейчас не очень дает понять что тут написано, я когда буду писать непосредственно я еще поспрашиваю. я только определяюсь с набросками кусочков кода коотрые мне немножко пожже понадобятся, тоесть на сейчас этого достаточно
спасибо
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB