Поиск числа в потоке на Python 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Поиск числа в потоке на Python



Пусть нам требуется определить, есть ли определенное число в потоке данных. Будем считывать числа до тех пор, пока они не закончатся, или пока мы не встретим искомое (0 — признак окончания ввода):

x = int(input())

while x!= 0 and x!= number_to_found:

x = int(input())

После окончания цикла можно определить, нашли ли мы искомое число, по значению переменной x:

if x == 0:
print('Not found')
else:
print('Found')

При этом мы сразу решили и еще одну задачу: если число найдено, то в x хранится номер его позиции (если таких чисел несколько — самого левого вхождения).

Поиск максимального и минимального числа в потоке на Python

Поиск максимального и минимального числа в последовательности происходит схожим образом с вычислением суммы, но переменная, в которой хранится временный результат — это максимум или минимум среди уже просмотренных значений.

Чему следует положить значение временного максимума/минимума в самом начале? Первому элементу последовательности, который нужно считать до начала циклической обработки.

maximum = int(input())

x = int(input())

while x!= 0:

if x > temp_maximum:

temp_maximum = x

x = int(input())

print(maximum)

Если же числа последовательности дополнительно фильтруются (например, нужно найти минимум только среди четных элементов), то в качестве минимума следует положить самое большое из возможных чисел в потоке, (а в качестве максимума — самое маленькое из возможных)

Если об этом информации нет, то поиск первого подходящего по критериям фильтрации числа должен быть произведен (с помощью цикла while) до цикла отбора минимального/максимального.

Поиск второго по значению экстремума на Python

Для поиска второго по значению максимума так же не обязательно осуществлять второй проход:

my_list = [(lambda x:(x*73+51)%100)(i) for i in range(30)] #генерируем список из 30 элементов
print(my_list)
max1 = my_list.pop()
max2 = my_list.pop()
if max2 > max1:
max1, max2 = max2, max1
while len(my_list) > 0:
num = my_list.pop()
if num > max1:
max2 = max1
max1 = num
elif num > max2:
max2 = num
print(max1, max2)

Количество равных максимумов

Для подсчета количества равных максимумов можно использовать следующий подход:

my_list = [(lambda x:(x*87+12)%10)(i) for i in range(20)] #генерируем список из 20 элементов
print(my_list)
max_value = my_list.pop()
max_number = 1
while len(my_list) > 0:
num = my_list.pop()
if num > max_value:
max_value = num
max_number = 1
elif num == max_value:
max_number += 1
print('Максимум', max_value, 'достигается', max_number, 'раз.')

Генерация псевдослучайных чисел

«Генерация случайных чисел слишком важна, чтобы оставлять её на волю случая»
Роберт Р. Кавью

ОПРЕДЕЛЕНИЕ

Генерация псевдослучайных чисел — порождение последовательности чисел, элементы которой подчиняются заданному распределению (обычно равномерному).

Псевдослучайные числа используются в методе Монте-Карло, в криптографии, для моделирования физической и игровой реальности, для придания действиям игрового искусственного интеллекта элемента спонтанности.

Соответствующие алгоритмы называют генераторами псевдослучайных чисел (ГПСЧ).

ДЕТЕРМИНИРОВАННЫЕ ГЕНЕРАТОРЫ

Детерминированный алгоритм не может генерировать полностью случайные числа, он может только аппроксимировать некоторые их свойства.

Любой ГПСЧ с ограниченными ресурсами рано или поздно зацикливается — начинает повторять одну и ту же последовательность чисел. Если порождаемая ГПСЧ последовательность сходится к слишком коротким циклам, то такой ГПСЧ становится предсказуемым и непригодным для практических приложений.

Большинство простых арифметических генераторов имеют недостатки:

· Слишком короткий период.

· Последовательные значения не являются независимыми.

· Некоторые биты «менее случайны», чем другие.

· Неравномерное одномерное распределение.

· Обратимость.



Поделиться:


Последнее изменение этой страницы: 2017-02-19; просмотров: 1088; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.172.115 (0.005 с.)