Подсчёт элементов массива, удовлетворяющих условию
Во многих задачах нужно найти в массиве все элементы, удовлетворяющие заданному условию, и как-то их обработать, например, подсчитать их количество.
Для подсчёта элементов используется переменная-счётчик,
назовём её count. Перед началом цикла в счётчик записывает-
ся ноль (ни одного нужного элемента не найдено). Если на оче-редном шаге цикла найден новый подходящий элемент, значе-ние счётчика увеличивается на единицу.
Подсчитаем количество элементов массива с чётными зна-чениями.
Запишите условие, которое означает, что значение переменной x чётное. Предложите два равносильных вари-анта такого условия.
Условие «элемент A[i] – чётный» можно сформулировать иначе: «остаток от деления A[i] на 2 равен нулю»:
if A[i] % 2 == 0:
... # увеличить счётчик
91 http://kpolyakov.spb.ru
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
Теперь можно написать полный цикл:
count = 0
for i in range(N):
if A[i] % 2 == 0:
count += 1 # увеличить счётчик print( count )
Для массива на Рис. 3.9 выполните ручную прокрутку этой программы и определите, какое значение будет выведено.
Другой вариант цикла позволяет избавиться от переменной i:
count = 0 for x in A:
if x % 2 == 0:
count += 1 print( count )
Кроме того, можно сначала построить новый массив, выде-лив в него все нужные (чётные) элементы, а потом подсчитать его длину с помощью стандартной функции len:
B = [ x for x in A
if x % 2 == 0 ] print( len(B) )
Массив B строится с помощью генератора, в него включаются все элементы x из исходного массива A, для которых выполняет-ся условие чётности x % 2 == 0.
Теперь усложним задачу. В массиве записан рост каждого члена баскетбольной команды в сантиметрах. Требуется найти средний рост игроков, которые выше 180 см (предполагаем, что хотя бы один такой игрок есть). Средний рост – это среднее арифметическое, то есть «суммарный рост» интересующих нас игроков (тех, которые выше 180 см), поделённый на их количе-ство.
Найдите ошибку в программе:
summa = 0
for x in A:
92 http://kpolyakov.spb.ru
05.04.2019 Информатика, 8 класс К.Ю. Поляков, Е.А. Еремин
if x > 180:
summa += x print( summa/N )
К какому типу ошибок относится эта ошибка?
Для решения задачи нам нужно считать и сумму, и коли-чество элементов массива, которые больше 180:
count = 0 summa = 0 for x in A:
if x > 180:
count += 1 summa += x
print( summa/count )
Обратите внимание, что в теле условного оператора находятся две команды (увеличение счётчика и увеличение суммы).
Решение «в стиле Python» предполагает построение нового массива из нужных элементов массива A и использование двух встроенных функций:
B = [ x for x in A if x > 180 ]
Достарыңызбен бөлісу: |