Глава 3. Операторы и f-строки

337 просмотров
0 лайков
0 в избранном

Арифметические операторы

С большинством мы познакомились в прошлой главе, соберём их вместе и добавим детали:

ОператорОперацияПример
+ - * /базовая арифметика10 / 4 = 2.5
//целочисленное деление10 // 4 = 2
%остаток от деления10 % 3 = 1
**степень2 ** 8 = 256

Остаток от деления — неожиданно полезен

Оператор % чаще всего применяют, чтобы проверить чётность или кратность:

number = 15
if number % 2 == 0:
    print("Чётное")
else:
    print("Нечётное")   # напечатает это

# Кратно ли 10?
if number % 10 == 0:
    print("Закруглили")

Ещё одна классическая задача — извлечение цифр числа. Последняя цифра числа — это number % 10, а число без последней цифры — number // 10:

n = 1234
print(n % 10)     # 4 — последняя цифра
print(n // 10)    # 123 — без последней

Операторы сравнения

ОператорЗначениеПример (истина)
==равно5 == 5
!=не равно5 != 3
> <больше / меньше5 > 3
>= <=больше или равно / меньше или равно5 >= 5

Результат сравнения — bool, поэтому его можно сохранить в переменную:

is_adult = age >= 18
can_vote = is_adult and has_citizenship

Цепочки сравнений

В Python можно записать сравнение «между» в математической нотации:

score = 75
if 0 <= score <= 100:   # эквивалент 0 <= score and score <= 100
    print("Корректный балл")

Логические операторы

Три оператора работают с булевыми значениями:

  • and — «и», истина только если оба операнда истинны.
  • or — «или», истина если хотя бы один истинен.
  • not — «не», инверсия.
age = 20
has_ticket = True

can_enter = (age >= 18) and has_ticket   # True
is_vip = has_ticket and (age > 65)       # False
is_blocked = not has_ticket              # False

Короткое замыкание (short-circuit)

and и or не вычисляют второй операнд, если результат уже ясен из первого. Это используют для безопасных значений по умолчанию:

# name будет "Гость", если user_name пустая строка (falsy)
user_name = ""
name = user_name or "Гость"
print(name)   # Гость

Приоритет операций

Как в математике: сначала степень, потом умножение/деление, потом сложение. Скобки повышают приоритет — не стесняйтесь их ставить для читаемости:

result = 2 + 3 * 4       # 14 — умножение раньше
result = (2 + 3) * 4     # 20 — скобки изменили порядок

Среди логических операторов not сильнее and, а and сильнее or:

# not a or b and c  ==  (not a) or (b and c)

Лучшее правило: если есть сомнения — поставьте скобки. Явное лучше неявного.

Составное присваивание

Короткая запись «применить операцию и присвоить обратно»:

total = 100
total += 50    # total = total + 50 -> 150
total -= 20    # 130
total *= 2     # 260
total //= 100  # 2
total **= 3    # 8

Такой же трюк работает со строками и списками:

name = "Анна"
name += "!"      # "Анна!"

items = [1, 2]
items += [3, 4]  # [1, 2, 3, 4]

f-строки

F-строка (formatted string) — самый удобный способ вставить значения переменных в текст. Перед кавычкой ставится буква f, а в фигурных скобках пишется выражение:

name = "Анна"
age = 28
print(f"Меня зовут {name}, мне {age} лет.")
# Меня зовут Анна, мне 28 лет.

Внутри скобок можно писать любые выражения:

price = 199.5
quantity = 3
print(f"Итого: {price * quantity} руб.")   # Итого: 598.5 руб.

Форматирование чисел

После значения через двоеточие идут спецификаторы формата:

pi = 3.14159265

print(f"{pi:.2f}")       # 3.14 — два знака после запятой
print(f"{pi:.4f}")       # 3.1416
print(f"{1000:,}")       # 1,000 — разделитель разрядов
print(f"{42:05d}")       # 00042 — число с лидирующими нулями
print(f"{0.15:.0%}")     # 15% — как проценты

Выравнивание

name = "Анна"
print(f"|{name:10}|")    # |Анна      | — ширина 10, по левому краю
print(f"|{name:>10}|")   # |      Анна| — по правому
print(f"|{name:^10}|")   # |   Анна   | — по центру

Старые способы (для распознавания в чужом коде)

До f-строк (Python 3.6) пользовались методом .format() и оператором %. В новом коде они почти не нужны, но встречаются:

print("Мне {} лет".format(28))      # Мне 28 лет
print("Мне %d лет" % 28)             # Мне 28 лет (совсем старый способ)

Методы строк

У строк много готовых методов. Самые ходовые:

text = "  Привет, Мир!  "

print(text.strip())          # "Привет, Мир!" — убрать пробелы по краям
print(text.lower())          # "  привет, мир!  "
print(text.upper())          # "  ПРИВЕТ, МИР!  "
print(text.replace("Мир", "Python"))  # замена подстроки

words = "яблоко,банан,груша".split(",")
print(words)                 # ['яблоко', 'банан', 'груша']
print("-".join(words))       # яблоко-банан-груша

Проверки строк

print("123".isdigit())     # True — только цифры
print("abc".isalpha())     # True — только буквы
print("Hello".isupper())   # False
print("Hello".startswith("He"))  # True

Кейс из реального проекта: карточка товара

Представим вывод карточки товара для консольного магазина. Здесь одновременно работают f-строки, форматирование чисел и выравнивание:

title = "Ноутбук Pro 15"
price = 89990.5
discount = 10  # процентов

final_price = price * (1 - discount / 100)

print("=" * 40)
print(f"{title:^40}")              # заголовок по центру
print("-" * 40)
print(f"Цена:       {price:>12,.2f} руб.")
print(f"Скидка:     {discount:>11}%")
print(f"К оплате:   {final_price:>12,.2f} руб.")
print("=" * 40)

Вывод:

========================================
             Ноутбук Pro 15
----------------------------------------
Цена:          89,990.50 руб.
Скидка:              10%
К оплате:      80,991.45 руб.
========================================

Типичные ошибки

1. Забыли f перед строкой

name = "Анна"
# print("Привет, {name}")     # Привет, {name} — без подстановки
print(f"Привет, {name}")       # Привет, Анна

2. Использование + вместо f-строки

age = 28
# Плохо: длинно и нужно str()
print("Мне " + str(age) + " лет")
# Хорошо: коротко и читаемо
print(f"Мне {age} лет")

3. Путаница and/or и &/|

& и | — это побитовые операции, для логики используйте слова and/or:

# Правильно
if age > 18 and has_ticket:
    ...

# НЕправильно (сработает «случайно» только для конкретных значений)
if age > 18 & has_ticket:
    ...

Практика

  1. Дано число секунд. Переведите его в минуты и секунды через // и %.
  2. Проверьте, делится ли число 2024 на 4, на 100 и на 400 (признак високосного года).
  3. Напишите f-строку, которая выводит число 3.14159 с тремя знаками после запятой.
  4. Дана строка " Анна,Борис;Вера ". Очистите от пробелов и разбейте на список по запятой или точке с запятой.
  5. Сформируйте «чек» из 3 покупок с форматированием цен через запятую (разделитель тысяч).

Итог

Мы разобрали арифметические, сравнительные и логические операторы, приоритет операций, составное присваивание, f-строки и базовые методы строк. F-строки — главный инструмент форматирования в Python, к нему мы будем возвращаться во всех следующих главах. В следующей главе — управляющие конструкции: условия и циклы.

Комментарии 0

Для добавления комментариев необходимо войти или зарегистрироваться.

Пока нет комментариев. Станьте первым!