[#] Списки, кортежи
vit01(mira, 1) — All
2015-12-04 04:13:34


В списке, состоящем из положительных и отрицательных целых чисел, найти
первый, третий и шестой положительные элементы и вычислить их произведение.
Задача усложнена тем, что, например, третий по счету положительный элемент
может быть далеко не третим в списке, а каким угодно.
**Основная часть алгоритма решения задачи:**
1. Ввести в программу счетчик положительных элементов (j). Присвоить ему значение 1 (т.е. он указывает на первый положительный элемент).
2. Перебирать элементы массива-списка по-очереди. Если очередной элемент положительный и счетчик положительных элементов равен 1 или 3 или 6, то сохранить в соответствующей переменной индекс данного элемента. Кроме того, если шестой положительный элемент найден, то нет смысла продолжать цикл дальше и можно его завершить (оператор `break`).
3. Если в массиве был найден шестой положительный элемент (первый и третий тогда точно найдены), то вычислить произведение.
В программе ниже для заполнения списка используется так называемый генератор.
В данном случае выражение `round(random.random() * 100) - 50` используется в
цикле, который выполняется 20 раз. И на каждой итерации цикла получившееся
число помещается в список a.
    import random
    a = [round(random.random() * 100) - 50 for i in range(20)]
    print(a)
    i = j = 0
    i1 = i3 = i6 = -1
    while i < 20:
    while i < 20:
    	if a[i] > 0:
    		if j == 1:
    			i1 = i
    		elif j == 3:
    			i3 = i
    		elif j == 6:
    			i6 = i
    			break
    		j += 1
    	i += 1
    if i6 > 0:
    	mult = a[i1] * a[i3] * a[i6]
    	print("Индексы элементов:", i1, i3, i6)
    	print("%d * %d * %d = %d" % (a[i1], a[i3], a[i6], mult))
    [-45, 30, 31, -40, 22, -48, -18, -24, -21, 25, -38, 43, 30, 15, -33, -41, -8, 29, 26, 24]
    Индексы элементов: 1 4 12
    30 * 22 * 30 = 19800