""" Урок 07. Summary session 2 — весь код примеров одним файлом. Источник: subjects/python-fundamentals/course/lessons/07-summary-session-2/examples.html Файл собран автоматически (tools/build_lesson_examples.py): правьте страницу урока. Запуск: python lesson-07.py """ # ==================================================================== # Пример 1. Арифметические операции и приоритет # ==================================================================== print("Сложение:", 3 + 5) # 8 print("Умножение:", 4 * 6.0) # 24.0 — float заражает результат print("Деление:", 8 / 2) # 4.0 — / всегда float print("Целочисленное деление:", 7 // 2.0) # 3.0 — // с float даёт float print("Остаток от деления:", 7 % 3) # 1 print("Возведение в степень:", 2 ** 3) # 8 print(2 + 3 * 4) # 14 — сначала умножение print((2 + 3) * 4) # 20 — скобки меняют порядок print(2 + 3 ** 2) # 11 — сначала степень # ==================================================================== # Пример 2. Переменная и неизменяемость чисел # ==================================================================== num = 5 num + 2 # результат вычислен и тут же забыт print(num) # 5 — переменная не изменилась num = num + 2 # а вот так — присвоили обратно print(num) # 7 # ==================================================================== # Пример 3. Составное присваивание # ==================================================================== score = 10 score += 5 # score = score + 5 print(score) # 15 score -= 3 # 12 print(score) score *= 2 # 24 print(score) score //= 4 # 6 print(score) # ==================================================================== # Пример 4. Множественное присваивание, общее значение и обмен # ==================================================================== a, b, c = 1, 2, 3 print(a, b, c) # 1 2 3 x = y = z = 0 # все три ссылаются на одно и то же число 0 x += 1 # но += создаёт новое значение только для x print(x, y, z) # 1 0 0 a, b = 5, 10 a, b = b, a # обмен значениями за один шаг print(a, b) # 10 5 # ==================================================================== # Пример 5. Преобразование строк в числа и ValueError # ==================================================================== num1 = "10" num2 = "5.0" result = int(num1) / float(num2) print(result) # 2.0 try: int("5.0") # int() не умеет читать точку внутри строки except ValueError as error: print("ValueError:", error) # invalid literal for int() with base 10: '5.0' print(int(float("5.0"))) # 5 — сначала float(), потом int() # ==================================================================== # Пример 6. int() отбрасывает дробную часть — это не округление # ==================================================================== print(int(5.99)) # 5 — просто отброшена дробная часть print(int(-5.99)) # -5 — отброшена в сторону нуля, а не вниз print(round(5.99)) # 6 — round() округляет по правилам математики print(round(5.49)) # 5 # ==================================================================== # Пример 7. bool() и таблица истинности значений # ==================================================================== values = [0, 1, -1, 0.0, "", "0", "None", None, [], [0]] for value in values: print(repr(value), "->", bool(value)) # 0 -> False 1 -> True -1 -> True # 0.0 -> False '' -> False '0' -> True # 'None' -> True None -> False [] -> False [0] -> True # ==================================================================== # Пример 8. Цепочки сравнений # ==================================================================== a = 5 b = 10 c = 10 print(a <= b <= c) # True — 5 <= 10 и 10 <= 10 print(a <= b and b <= c) # True — то же самое через and print(0 < a < 5) # False — 5 не строго меньше 5 # ==================================================================== # Пример 9. Приоритет not/and/or и короткое замыкание # ==================================================================== a = False b = True c = True print(not a or b and c) # True — сначала not a, затем b and c, потом or print(not (a or b) and c) # False — скобки меняют порядок целиком def probe(name, value): print(" проверяю", name) return value print(probe("left", True) or probe("right", True)) # проверяю left # True — правая часть даже не вызывалась print(probe("left", False) and probe("right", True)) # проверяю left # False — то же самое: and видит False слева и останавливается # ==================================================================== # Пример 10. Собираем вместе: две практические задачи из source # ==================================================================== bill = 150.0 tip_percent = 8.0 tip = bill * tip_percent / 100 print("Сумма чаевых:", tip) # 12.0 salary = 50000.0 tax_percent = 13.0 tax = salary * tax_percent / 100 net_salary = salary - tax print('Сумма "на руки":', net_salary) # 43500.0 # ==================================================================== # Пример 11. Разбор ДЗ: bool как множитель 0/1 # ==================================================================== used_mb = 650 base_price = 30 extra_mb = used_mb - 500 total_price = base_price + extra_mb * 0.2 * int(used_mb > 500) print("Общая стоимость:", total_price) # 60.0 — превышение было, доплата посчиталась used_mb2 = 300 extra_mb2 = used_mb2 - 500 # -200, отрицательное превышение total_price2 = base_price + extra_mb2 * 0.2 * int(used_mb2 > 500) print("Общая стоимость:", total_price2) # 30.0 — превышения не было, доплата обнулилась