Подсчет количества
Нередко нужно, чтобы наши программы подсчитывали, сколько раз что-либо произошло. К примеру, видеоигра может подсчитывать количество поворотов персонажа, или математическая программа может считать, как много чисел обладают некоторым свойством. Ключ к подсчету – использование переменной счетчика.
Напишем программу, которая считывает чисел и определяет, сколько из них больше .
counter = 0
for _ in range(10):
num = int(input())
if num > 10:
counter = counter + 1
print('Было введено', counter, 'чисел, больших 10.')
Каждый раз, когда мы считываем число, большее , мы добавляем к нашему текущему значению переменной counter
. В программе это реализовано в строке counter = counter + 1
. Обратите внимание на начальное значение переменной счетчика counter = 0
. Без начального значения мы получили бы ошибку, поскольку, дойдя до строки counter = counter + 1
, Python ничего не знал бы о переменной counter
. Строка кода counter = counter + 1
означает: возьми старое значение переменной counter
, прибавь к нему и переприсвой переменной это значение. Если не задать переменной начальное значение, то непонятно, к чему прибавлять в самый первый раз.
Подсчет количества – это очень частый сценарий. Он состоит из двух шагов:
- Создание переменной счетчика, и придание ей первоначального значения:
counter = 0
;
- Увеличение переменной счетчика на :
counter = counter + 1
.
Часто при написании программ требуется использовать несколько счетчиков. Модифицируем предыдущую программу: посчитаем еще и количество нулей среди введенных чисел.
counter1 = 0
counter2 = 0
for _ in range(10):
num = int(input())
if num > 10:
counter1 = counter1 + 1
if num == 0:
counter2 = counter2 + 1
print('Было введено', counter1, 'чисел, больших 10.')
print('Было введено', counter2, 'нулей.' )
Рассмотрим еще один пример: подсчитать количество чисел из диапазона , квадрат которых оканчивается на .
counter = 0
for i in range(1, 101):
if i**2 % 10 == 4:
counter = counter + 1
print(counter)
Мы используем функцию range()
с двумя параметрами для генерации последовательности чисел от до . Каждый раз, когда переменная i
последовательно принимает значения от до , мы проверяем условие: i**2 % 10 == 4
(оканчивается ли квадрат числа i
на ).
Для переменной счетчика удобно использовать имя counter
(или более сокращенно cnt
).
Вычисление суммы и произведения
Наравне с подсчетом количества по частоте стоит задача вычисления суммы. К примеру, видеоигра должна считать сумму очков. В таком случае начальное значение переменной будет равно , а далее оно будет увеличиваться на некоторое количество заработанных очков, скажем на . Мы пишем следующий код:
score = 0
...
score = score + 10
Напишем программу, которая считывает чисел и определяет сумму тех из них, которые больше .
total = 0
for _ in range(10):
num = int(input())
if num > 10:
total = total + num
print('Сумма чисел больших 10 равна', total)
Каждый раз, когда программа считывает число, большее , она добавляет его к текущему значению переменной total
. Это реализовано в строке total = total + num
. Обратите внимание на начальное значение переменной-сумматора total = 0
. Без начального значения мы получили бы ошибку, поскольку, дойдя до строки total = total + num
, Python ничего не знал бы о переменной total
. Строка кода total = total + num
означает: возьми старое значение переменной total
, прибавь к нему num
и переприсвой переменной это значение. Если не задать переменной начальное значение, то не к чему прибавлять num
в самый первый раз.
Подсчет суммы состоит из двух шагов:
- Создание переменной сумматора и придание ей первоначального значения:
total = 0
;
- Увеличение переменной сумматора на нужное число:
total = total + num
.
Напишем программу, которая считает сумму натуральных чисел от до :
total = 0
for i in range(1, 101):
total = total + i
print('Сумма равна', total)
Рассмотрим еще один пример: напишем программу, которая запрашивает целых чисел и находит их среднее значение:
total = 0
for _ in range(10):
num = int(input())
total = total + num
average = total / 10
print('Среднее значение равно', average)
Аналогичным образом вычисляется произведение. При вычислении произведения начальное значение переменной мультипликатора мы устанавливаем равным , в отличие от сумматора, где оно равно .
Для переменной сумматора и мультипликатора удобно использовать имя total
.
Обмен значений переменных
Очень часто нам требуется обменять значения двух переменных x
и y
. Начинающие программисты иногда пишут такой код:
x = y
y = x
Однако он не работает. Предположим, что x = 3
и y = 5
. Первая строка присвоит переменной x
значение , что правильно, однако вторая строка установит значение переменной y
в , поскольку значение x
уже равно . Для решения задачи мы можем использовать временную переменную:
temp = x
x = y
y = temp
Такой код пишут почти во всех языках программирования. Однако в Python есть и более простой способ. Мы можем написать так:
x, y = y, x
В результате выполнения такого кода Python поменяет значения переменных x
и y
местами.
Сигнальные метки
Сигнальная метка (флажок) может использоваться, когда надо, чтобы одна часть программы узнала о происходящем в другой части программы.
Напишем программу, определяющую, что натуральное число является простым:
num = int(input())
flag = True
for i in range(2, num):
if num % i == 0:
flag = False
if num == 1:
print('Это единица, она не простая и не составная')
elif flag == True:
print('Число простое')
else:
print('Число составное')
Напомним, что число является простым, если оно не имеет делителей, кроме и самого себя. Вышеприведенная программа работает следующим образом: начальное значение переменной флага равно True
, что говорит о том, что число является простым. Затем мы перебираем все числа от до num - 1
(включительно). Если одно из этих значений оказывается делителем числа num
, тогда число num
является составным и мы устанавливаем значение флага False
. Как только цикл завершен, мы проверяем, установлен флаг в True
или нет. Если это так, мы знаем, что делитель найден не был и число является простым. В противном случае число является составным.
Флаговые переменные могут иметь более осмысленное название. Например, в случае с проверкой числа на простоту, название флаговой переменной могло бы быть is_prime
.
Максимум и минимум
Поиск наибольшего или наименьшего значения в некоторой последовательности чисел – также частая задача в программировании. Напишем программу, которая считывает положительных чисел и находит среди них наибольшее число.
largest = 0
for _ in range(10):
num = int(input())
if num > largest:
largest = num
print('Наибольшее число равно', largest)
Мы устанавливаем начальное значение переменной largest
в . Далее программа считывает чисел, и если какое-то из них оказывается больше текущего значения largest
, переприсваивает его. В качестве начального значения взято число , поскольку мы знаем, что все числа положительны (а является максимальным неположительным числом). Таким образом, уже первое сравнение приведет к переприсваиванию.
Распространен подход, когда в качестве начального значения переменной сразу принимается первый элемент последовательности. Напишем программу, которая считывает чисел (необязательно положительных) и находит среди них наибольшее:
largest = int(input())
for _ in range(9):
num = int(input())
if num > largest:
largest = num
print('Наибольшее число равно', largest)
Для нахождения наименьшего значения последовательности следует поменять знак неравенства (>
) на противоположный (<
). В таком случае название переменной largest
стоит заменить на smallest
.
Для переменных, хранящих наибольшее и наименьшее значения, подходят имена largest
и smallest
соответственно.
Расширенные операторы присваивания
Довольно часто программы имеют инструкции присваивания, в которых переменная на левой стороне от оператора =
также появляется на правой от него стороне. Например,
counter = counter + 1
На правой стороне оператора присваивания 1 прибавляется к переменной counter
. Полученный результат затем присваивается переменной counter
, заменяя первоначальное значение. По сути, это строка кода добавляет 1 к counter
. Еще один пример такой инструкции мы видели при подсчете суммы:
total = total + num
Эта инструкция присваивает значение выражения total + num
переменной total
. В результате исполнения этой инструкции число num
прибавляется к значению total
.
Различные инструкции присваивания (в каждой инструкции x = 6
)
Инструкция |
Что она делает |
Значение x после инструкции |
x = x + 4 |
Прибавляет 4 к x |
10 |
x = x - 3 |
Вычитает 3 из x |
3 |
x = x * 10 |
Умножает x на 10 |
60 |
x = x / 4 |
Делит x на 4 |
1.5 |
x = x // 4 |
Делит нацело x на 4 |
1 |
x = x % 4 |
Находит остаток от деления x на 4 |
2 |
Эти типы операций находят широкое применение в программировании. Для удобства Python предлагает расширенные операторы присваивания. Расширенные операторы не требуют, чтобы программист дважды набирал имя переменной. Приведенную ниже инструкцию:
total = total + num
можно переписать как
total += num
Точно так же инструкцию
counter = counter + 1
можно переписать как
counter += 1
Оператор |
Пример использования |
Эквивалент |
+= |
x += 5 |
x = x + 5 |
-= |
x -= 2 |
x = x - 2 |
*= |
x *= 10 |
x = x * 10 |
/= |
x /= 4 |
x = x / 4 |
//= |
x //= 4 |
x = x // 4 |
%= |
x %= 4 |
x = x % 4 |
Примечания
Примечание 1. Аналогичным образом можно менять местами значения трех и более переменных.
a, b, c, d = b, c, d, a
Примечание 2. Очень часто сигнальные метки называют flag
.
Примечание 3. Поскольку в Python есть встроенные функции max()
и min()
, то давать такие названия для максимального и минимального значения не очень хорошо. Куда лучше использовать названия largest
и smallest
или mx
и mn
.
Примечание 4. Сумму чисел от 1 до 100, можно вычислить и без цикла: Действительно, числа от до , можно разбить на пар, сумма в которых равна : В начальной школе, где учился математик Карл Фридрих Гаусс (6 лет), учитель, чтобы занять класс на продолжительное время самостоятельной работой, дал задание ученикам – вычислить сумму всех натуральных чисел от до . Маленький Гаусс ответил на вопрос почти мгновенно, применив указанный способ подсчета, чем невероятно удивил всех и, прежде всего, учителя.