5.4. Обработка числовых данных
Раздел 5. Основы алгоритмизации и программирования (3 часа)
Проверка делимости
В Python проверка делимости выполняется с помощью оператора % (остаток от деления). Если a % b == 0, то a делится на b без остатка.
Оператор % (остаток от деления):
| Выражение | Результат | Пояснение |
|---|---|---|
10 % 3 | 1 | 10 = 3 × 3 + 1 |
15 % 5 | 0 | 15 делится на 5 без остатка |
7 % 2 | 1 | 7 — нечётное число |
100 % 10 | 0 | Последняя цифра 100 — ноль |
Проверка на чётность и нечётность:
n = int(input('Введите число: '))
if n % 2 == 0:
print(n, '— чётное число')
else:
print(n, '— нечётное число')
n % 2 == 0.Проверка делимости на несколько чисел:
n = int(input('Введите число: '))
if n % 3 == 0 and n % 5 == 0:
print('Делится и на 3, и на 5')
elif n % 3 == 0:
print('Делится на 3')
elif n % 5 == 0:
print('Делится на 5')
else:
print('Не делится ни на 3, ни на 5')
Проверка на простоту:
Натуральное число называется простым, если оно больше 1 и имеет ровно два делителя: 1 и само себя.
Для проверки достаточно перебрать делители от 2 до √n:
n = int(input('Введите число: '))
is_prime = True
if n <= 1:
is_prime = False
else:
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
is_prime = False
break
if is_prime:
print(n, '— простое число')
else:
print(n, '— составное число')
Таблица простых чисел от 2 до 50:
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47
Поиск максимума и минимума
Для поиска максимального или минимального значения среди нескольких чисел используется алгоритм «текущий экстремум»: запоминаем первое число как предполагаемый максимум (минимум) и сравниваем с каждым следующим.
Поиск максимума из N чисел:
n = int(input('Сколько чисел? '))
max_val = int(input('Число 1: '))
for i in range(1, n):
x = int(input(f'Число {i + 1}: '))
if x > max_val:
max_val = x
print('Максимум:', max_val)
Поиск минимума из N чисел:
n = int(input('Сколько чисел? '))
min_val = int(input('Число 1: '))
for i in range(1, n):
x = int(input(f'Число {i + 1}: '))
if x < min_val:
min_val = x
print('Минимум:', min_val)
Поиск максимума и минимума одновременно:
n = int(input('Сколько чисел? '))
a = int(input('Число 1: '))
max_val = a
min_val = a
for i in range(1, n):
x = int(input(f'Число {i + 1}: '))
if x > max_val:
max_val = x
if x < min_val:
min_val = x
print('Максимум:', max_val)
print('Минимум:', min_val)
Встроенные функции min() и max():
Python предоставляет встроенные функции min() и max(), которые находят минимум и максимум:
# Через ввод
n = int(input('Сколько чисел? '))
numbers = []
for i in range(n):
x = int(input())
numbers.append(x)
print('Максимум:', max(numbers))
print('Минимум:', min(numbers))
# Прямой вызов
print(max(3, 7, 2, 9, 1)) # 9
print(min(3, 7, 2, 9, 1)) # 2
min() и max() обычно использовать нельзя — нужно показывать алгоритм поиска вручную с помощью цикла и условного оператора.Вычисление суммы последовательности
Для вычисления суммы используется переменная-аккумулятор, которая изначально равна 0, а затем к ней прибавляется каждое число из последовательности.
Сумма N чисел:
n = int(input('Сколько чисел? '))
s = 0
for i in range(n):
x = int(input(f'Число {i + 1}: '))
s += x
print('Сумма:', s)
Сумма цифр числа:
Чтобы найти сумму цифр числа, последовательно выделяем последнюю цифру операцией % 10 и отбрасываем её операцией // 10:
n = int(input('Введите число: '))
s = 0
while n > 0:
s += n % 10
n //= 10
print('Сумма цифр:', s)
n=456 → s = 0+6 = 6, n = 45
n=45 → s = 6+5 = 11, n = 4
n=4 → s = 11+4 = 15, n = 0
Результат: сумма цифр = 15
Произведение цифр числа:
n = int(input('Введите число: '))
p = 1
while n > 0:
p *= n % 10
n //= 10
print('Произведение цифр:', p)
Количество чётных цифр числа:
n = int(input('Введите число: '))
k = 0
while n > 0:
if n % 10 % 2 == 0:
k += 1
n //= 10
print('Количество чётных цифр:', k)
Выделение цифр числа
Для выделения цифр числа используются операции % (остаток) и // (целочисленное деление).
Классический способ — цифры в обратном порядке:
n = 12345
while n > 0:
digit = n % 10 # последняя цифра
print(digit, end=' ')
n = n // 10 # отбрасываем последнюю цифру
# Вывод: 5 4 3 2 1
Оператор n % 10 возвращает последнюю цифру числа, а n // 10 отбрасывает её.
% 10 всегда извлекает последнюю цифру. Чтобы получить цифры в прямом порядке, нужно сначала определить количество цифр, а затем делить на соответствующую степень 10.Цифры в прямом порядке:
n = 12345
# Сначала найдём количество цифр
temp = n
k = 0
while temp > 0:
temp //= 10
k += 1
# Теперь извлекаем цифры слева направо
div = 10 ** (k - 1)
while div > 0:
digit = n // div
print(digit, end=' ')
n = n % div
div //= 10
# Вывод: 1 2 3 4 5
Подсчёт количества цифр:
n = int(input('Введите число: '))
k = 0
while n > 0:
n = n // 10
k += 1
print('Количество цифр:', k)
Перевёрнутое число:
n = 12345
reversed_n = 0
while n > 0:
reversed_n = reversed_n * 10 + n % 10
n //= 10
print('Перевёрнутое число:', reversed_n)
# Вывод: 54321
Проверка на палиндром:
n = int(input('Введите число: '))
original = n
reversed_n = 0
temp = n
while temp > 0:
reversed_n = reversed_n * 10 + temp % 10
temp //= 10
if original == reversed_n:
print('Число является палиндромом')
else:
print('Число не является палиндромом')
Среднее арифметическое
Среднее арифметическое нескольких чисел — это их сумма, делённая на количество чисел:
среднее = (a₁ + a₂ + … + aₙ) / n
Среднее арифметическое N чисел:
n = int(input('Сколько чисел? '))
s = 0
for i in range(n):
x = int(input(f'Число {i + 1}: '))
s += x
average = s / n
print('Среднее арифметическое:', average)
Целочисленное и вещественное деление:
В Python есть два оператора деления:
| Оператор | Название | Пример | Результат |
|---|---|---|---|
/ | Обычное деление | 7 / 2 | 3.5 |
// | Целочисленное деление | 7 // 2 | 3 |
# Обычное деление — результат float print(10 / 3) # 3.3333333333333335 print(10 / 5) # 2.0 # Целочисленное деление — результат int print(10 // 3) # 3 print(10 // 5) # 2
//, дробная часть отбрасывается. Для точного результата используйте обычное деление /.Среднее арифметическое чётных чисел:
n = int(input('Сколько чисел? '))
s = 0
count = 0
for i in range(n):
x = int(input(f'Число {i + 1}: '))
if x % 2 == 0:
s += x
count += 1
if count > 0:
print('Среднее арифметическое чётных:', s / count)
else:
print('Чётных чисел нет')
Обработка последовательностей
Последовательность чисел — это набор чисел, которые обрабатываются одно за другим. Рассмотрим типовые задачи обработки последовательностей.
Подсчёт элементов по признаку:
Задача: подсчитать количество чисел, оканчивающихся на 3:
n = int(input('Сколько чисел? '))
k = 0
for i in range(n):
x = int(input(f'Число {i + 1}: '))
if x % 10 == 3:
k += 1
print('Числа, оканчивающиеся на 3:', k)
Нахождение первого и последнего элемента:
n = int(input('Сколько чисел? '))
first = int(input('Число 1: '))
last = first
for i in range(1, n):
x = int(input(f'Число {i + 1}: '))
last = x
print('Первый элемент:', first)
print('Последний элемент:', last)
Паттерн «сигнальное значение» (sentinel value):
Если количество чисел заранее неизвестно, используется «сигнальное значение» —特殊ое число, означающее конец ввода (например, 0 или -1):
k = 0
a = int(input('Число (или 0 для окончания): '))
while a != 0:
if a % 10 == 3:
k += 1
a = int(input('Число (или 0 для окончания): '))
print('Числа, оканчивающиеся на 3:', k)
Первое число, удовлетворяющее условию:
n = int(input('Сколько чисел? '))
found = False
for i in range(n):
x = int(input(f'Число {i + 1}: '))
if not found and x % 7 == 0:
print('Первое число, делящееся на 7:', x)
found = True
if not found:
print('Чисел, делящихся на 7, нет')
Сумма чётных и произведение нечётных:
n = int(input('Сколько чисел? '))
sum_even = 0
product_odd = 1
has_odd = False
for i in range(n):
x = int(input(f'Число {i + 1}: '))
if x % 2 == 0:
sum_even += x
else:
product_odd *= x
has_odd = True
print('Сумма чётных:', sum_even)
if has_odd:
print('Произведение нечётных:', product_odd)
else:
print('Нечётных чисел нет')
Типовые задачи ОГЭ
Разберём несколько задач, которые часто встречаются в КИМ по информатике.
Задача 1. Трёхзначные числа, делящиеся на 3
count = 0
for n in range(100, 1000):
if n % 3 == 0:
count += 1
print('Количество:', count)
# Результат: 300
Аналитическое решение: Первое трёхзначное число, делящееся на 3 — это 102. Последнее — 999. Таких чисел: (999 − 102) / 3 + 1 = 300.
Задача 2. Количество цифр в числе
n = int(input('Введите число: '))
k = 0
while n > 0:
n = n // 10
k += 1
print('Количество цифр:', k)
Пример: n = 58349. Цикл: 58349 → 5834 → 583 → 58 → 5 → 0. Результат: 5 цифр.
Задача 3. Проверка на палиндром
n = int(input('Введите число: '))
original = n
reversed_n = 0
temp = n
while temp > 0:
reversed_n = reversed_n * 10 + temp % 10
temp //= 10
if original == reversed_n:
print('Является палиндромом')
else:
print('Не является палиндромом')
Пример: n = 1221. Переворот: 1→12→122→1221. 1221 == 1221 → палиндром.
n = 1234. Переворот: 4→43→432→4321. 1234 ≠ 4321 → не палиндром.
Задача 4. Первая цифра числа
n = int(input('Введите число: '))
while n >= 10:
n = n // 10
print('Первая цифра:', n)
Цикл отбрасывает последнюю цифру, пока не останется одно число.
Задача 5. Максимальная цифра числа
n = int(input('Введите число: '))
max_digit = 0
while n > 0:
d = n % 10
if d > max_digit:
max_digit = d
n //= 10
print('Максимальная цифра:', max_digit)
Пример: n = 83527. Цифры: 7, 2, 5, 3, 8. Максимум = 8.
Практические задания
🧪 Задание 1. Выполните алгоритм мысленно
n = 4729
s = 0
while n > 0:
s += n % 10
n //= 10
print(s)
Чему равно s?
🧪 Задание 2. Определите результат
n = 38562
max_d = 0
while n > 0:
d = n % 10
if d > max_d:
max_d = d
n //= 10
print('max =', max_d)
🧪 Задание 3. Найдите ошибку
Программа должна найти количество чётных цифр числа, но она работает неправильно. Найдите и исправьте ошибку.
n = 2473
k = 0
while n > 0:
if n % 10 / 2 == 0:
k += 1
n //= 10
print('Чётных цифр:', k)
🧪 Задание 4. Напишите программу
Напишите программу, которая находит среднее арифметическое всех нечётных чисел из N введённых чисел.
🧪 Задание 5. Напишите программу
Напишите программу, которая определяет, является ли заданное натуральное число числом Армстронга (сумма его цифр в собственных степенях равна самому числу). Например, 153 = 1³ + 5³ + 3³.
🧪 Задание 6. Сложная задача
Напишите программу, которая для заданного числа N выводит все его делители в порядке возрастания.