Практикум: операторы в задачах на Python
Задачи на операторы в Python
В этом разделе разбираются типичные задачи, где применяются различные операторы языка Python. Для каждой задачи предлагается основное решение, альтернативные подходы и разбор возможных ошибок.
Основное решение: простой калькулятор с операторами
Как реализовать калькулятор, который выполняет сложение, вычитание, умножение и деление, используя арифметические операторы?
Используем условные конструкции и операторы сравнения для выбора операции. Оператор = (присваивание) фиксирует результат, а арифметические операторы +, -, *, / выполняют вычисления.
def calculator(a, b, op):
if op == '+':
return a + b
elif op == '-':
return a - b
elif op == '*':
return a * b
elif op == '/':
if b == 0:
return 'Ошибка: деление на ноль'
return a / b
else:
return 'Неизвестная операция'алгоритм решения задачи python (алгоритм решения задачи на python)
Типичные ошибки: не учитывать деление на ноль, путать строковое представление оператора с символом. При вводе оператора через input() получается строка, поэтому сравнение с символом корректно. Также стоит помнить, что оператор / всегда возвращает число с плавающей точкой, что может быть неожиданно для новичков.
Как проверить, является ли число чётным?
Для проверки чётности используется оператор взятия остатка %. Если остаток от деления на 2 равен нулю, число чётное.
def is_even(n):
return n % 2 == 0базовые задачи python (базовые задачи python)
print(is_even(10)) # True print(is_even(7)) # False
задачи для обучения python (задачи для обучения python)
Ошибки: сравнение с помощью одного знака равенства = вместо ==. Это приведёт к ошибке синтаксиса в выражении (внутри return допускается только выражение, присваивание там не сработает). Также стоит учитывать, что для отрицательных чисел оператор % ведёт себя специфично, но для чётности это не влияет.
Как найти максимальное из двух чисел?
Используются операторы сравнения > и < вместе с условным оператором. Оператор == проверяет равенство, но в данном примере достаточно простого сравнения.
def max_of_two(a, b):
if a > b:
return a
else:
return bзадачи на классы в python (задачи на классы в python)
print(max_of_two(5, 3)) # 5 print(max_of_two(2, 7)) # 7 print(max_of_two(4, 4)) # 4
множество python задачи (задачи на множества в python)
Распространённая ошибка - забыть про случай равенства. В этом решении при a == b возвращается b, что корректно. Если требуется вернуть любое из равных чисел, такой код подходит.
Как проверить, является ли год високосным?
Задача решается с помощью логических операторов and и or. Високосный год делится на 4, но не делится на 100, за исключением годов, делящихся на 400.
def is_leap(year):
return (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)задачи на модули python (задачи на модули в python)
print(is_leap(2020)) # True print(is_leap(1900)) # False print(is_leap(2000)) # True
задачи на операторы в python (задачи на операторы в python)
Типичная ошибка - неправильный порядок условий или пропуск скобок. Без скобок приоритет операторов может привести к неверному результату. Например, year % 4 == 0 and year % 100 != 0 or year % 400 == 0 без скобок эквивалентно (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0), что верно, но лучше ставить скобки явно.
Как проверить чётность числа с помощью побитового оператора?
Альтернативный способ - использовать побитовое И: &. Младший бит числа равен 1 для нечётных и 0 для чётных.
def is_even_bit(n):
return (n & 1) == 0задачи на последовательности python (задачи на последовательности в python)
print(is_even_bit(10)) # True print(is_even_bit(7)) # False
задачи на списки python (задачи на списки в python)
Ошибки: путать побитовое И & с логическим and. В данном контексте подойдёт только &. Также важно помнить, что для отрицательных чисел побитовое представление может отличаться, но в Python младший бит работает аналогично.
Как проверить наличие подстроки в строке с помощью оператора in?
Оператор in возвращает True, если подстрока содержится в строке. Это удобная альтернатива методам find() или index().
def contains_substring(string, sub):
return sub in stringпробелы python задача (задача на пробелы в строке python)
print(contains_substring('hello world', 'world')) # True
print(contains_substring('hello world', 'Python')) # FalseТипичная ошибка - путать оператор in с методом __contains__, но они эквивалентны. Также стоит помнить, что in чувствителен к регистру: 'hello' in 'Hello' вернёт False.
Дополнительные примеры использования операторов
Здесь представлены более сложные и неочевидные примеры применения операторов в Python. Каждый пример сопровождается кодом и результатом.
Оператор is и кэширование малых целых
Как проверить, ссылаются ли две переменные на один объект?
Оператор is сравнивает идентичность объектов. В Python для малых целых чисел (-5...256) действует кэширование, поэтому a is b может быть истинным даже для разных литералов.
a = 256
b = 256
c = 257
d = 257
print(a is b) # True (кэш)
print(c is d) # False (выходит за диапазон кэша)True False
Ошибка: использовать is вместо == для сравнения значений. is проверяет идентичность, а не равенство.
Оператор walrus (:=) для упрощения кода
Как присвоить значение переменной внутри выражения и сразу его использовать?
Оператор присваивания := (walrus) позволяет выполнять присваивание в составе более крупного выражения, например, в условии цикла.
def read_and_sum():
total = 0
while (line := input()) != '':
total += int(line)
return total
# Пример ввода: 10, 20, (пустая строка)
# Вызов read_and_sum() вернёт 30(результат зависит от ввода)
Ошибка: забыть кавычки при присваивании или использовать обычный = внутри выражения, что синтаксически неверно.
Побитовые флаги для настройки параметров
Как комбинировать несколько логических параметров с помощью побитовых операторов?
Побитовые операторы | (ИЛИ) и & (И) удобны для работы с флагами.
READ = 1
WRITE = 2
EXECUTE = 4
permissions = READ | WRITE
has_read = permissions & READ # True
has_exec = permissions & EXECUTE # False
print(has_read, has_exec)1 0
Ошибка: перепутать побитовое ИЛИ с логическим or. Для флагов нужны именно побитовые операции.
Тернарный условный оператор
Как записать простой выбор в одну строку?
Конструкция value_if_true if condition else value_if_false позволяет компактно задать ветвление.
def is_positive(n):
return 'positive' if n > 0 else 'non-positive'
print(is_positive(5))
print(is_positive(-3))positive non-positive
Ошибка: забыть else или использовать неправильный порядок. Синтаксис: сначала выражение для истины, потом if, потом else.
Разбиение числа на цифры с помощью // и %
Как получить все цифры числа, не преобразуя его в строку?
Комбинация операторов целочисленного деления // и взятия остатка % позволяет последовательно извлекать цифры.
def digits_of_number(n):
digits = []
while n > 0:
digits.append(n % 10)
n //= 10
return digits[::-1] # разворачиваем, так как извлекали с конца
print(digits_of_number(1234))[1, 2, 3, 4]
Ошибка: не обработать случай, когда число равно 0. В этом случае цикл не выполнится, и результат будет пустой список. Следует добавить проверку.