Практические задания на работу с переменными в языке Python
Основные задачи на переменные в Python
Самый простой способ освоить переменные — решать конкретные задачи. Рассмотрим классическую задачу: обмен значениями двух переменных.
Как поменять местами значения двух переменных без использования временной переменной?
В Python это делается одной строкой через кортежное присваивание.
a = 5
b = 10
a, b = b, a
print(a, b) # 10 5
переменные python задачи (задачи на переменные в python)
Пояснение: справа создается кортеж (b, a), который распаковывается в a и b. Этот способ элегантен и не требует временной переменной.
Типичная ошибка: новички пытаются сделать a = b; b = a, но после первого присваивания a теряет исходное значение. Результат будет b = b.
Решение: использовать кортежное присваивание или временную переменную.
Как решить ту же задачу с помощью временной переменной?
a = 5
b = 10
temp = a
a = b
b = temp
print(a, b) # 10 5
Этот вариант нагляднее для начинающих, но требует дополнительной памяти.
Как проверить, является ли переменная числом?
Иногда нужно убедиться, что значение переменной относится к числовому типу.
x = 42
if isinstance(x, (int, float, complex)):
print('Это число')
else:
print('Не число')
Проблема: type(x) == int не учитывает подтипы (например, bool является подклассом int). isinstance корректно обрабатывает иерархию.
Как узнать тип переменной и изменить его?
var = 100
print(type(var)) #
var = str(var)
print(type(var)) #
Приведение типов (кастинг) важно для работы с разными данными. Осторожно: при преобразовании строки в число может возникнуть ValueError.
Ошибка: int('abc') вызовет исключение. Всегда проверяйте содержимое или используйте try/except.
Как правильно скопировать список (изменяемый тип)?
original = [1, 2, 3]
copy = original[:] # вариант 1: срез
copy2 = original.copy() # вариант 2: метод copy
copy3 = list(original) # вариант 3: list()
Простое присваивание copy = original не создает новую копию; обе переменные будут ссылаться на один объект.
При изменении копии изменяется и оригинал. Для вложенных структур используйте copy.deepcopy().
Распространенные задачи с пояснениями
Ниже собраны типичные упражнения, которые помогают закрепить понимание переменных.
Как присвоить одно значение нескольким переменным?
a = b = c = 0
print(a, b, c) # 0 0 0
Все три переменные ссылаются на один объект (число 0). Для изменяемых типов это может привести к неожиданным эффектам.
Пример: x = y = []— обе переменные указывают на один список. Изменение через x.append(1) изменит и y. Решение: создавать отдельные объекты x = []; y = [].
Как извлечь элементы кортежа в отдельные переменные (распаковка)?
point = (3, 7)
x, y = point
print(f"x={x}, y={y}") # x=3, y=7
Распаковка работает с любым итерируемым объектом, но количество переменных должно совпадать с длиной.
Ошибка: a, b = [1, 2, 3] (ValueError: too many values to unpack). Используйте a, b, *rest = [1, 2, 3] (распаковка с *).
Как организовать константу в Python?
В Python нет встроенных констант, но по соглашению имена пишут заглавными буквами.
PI = 3.14159
GRAVITY = 9.8
Изменять такие переменные технически можно, но считается дурным тоном. Для строгой защиты используйте модуль enum или typing.Final (с версии 3.8).
Как проверить, что переменная определена?
try:
some_var
except NameError:
print('Переменная не определена')
else:
print('Переменная существует')
Либо использовать locals() или globals(): 'some_var' in locals().
Как использовать аннотации типов для переменных?
name: str = 'Алексей'
age: int = 25
Аннотации не влияют на выполнение, но помогают IDE и инструментам статического анализа.
Ошибка: присвоение строки после аннотации age: int = '30' не вызовет исключения во время выполнения, но нарушит ожидания.
Продвинутые примеры работы с переменными
Пример 1: Множественное присваивание и свопинг
# Одновременно обменять значения трех переменных
x, y, z = 1, 2, 3
x, y, z = z, y, x
print(x, y, z) # 3 2 1
3 2 1
Пример 2: Распаковка с звездочкой
first, *middle, last = [10, 20, 30, 40, 50]
print(first) # 10
print(middle) # [20, 30, 40]
print(last) # 50
10 [20, 30, 40] 50
Пример 3: Ссылочная модель и изменяемые объекты
list_a = [1, 2, 3]
list_b = list_a
list_b.append(4)
print(list_a) # [1, 2, 3, 4] (изменился и "оригинал")
[1, 2, 3, 4]
Пример 4: Копирование с помощью среза и copy.deepcopy для вложенных списков
import copy
original = [[1, 2], [3, 4]]
shallow = original[:]
shallow[0][0] = 99
print(original) # [[99, 2], [3, 4]] (вложенный объект общий)
deep = copy.deepcopy(original)
deep[0][0] = 100
print(original) # [[99, 2], [3, 4]] (не изменился)
[[99, 2], [3, 4]] [[99, 2], [3, 4]]
Пример 5: Область видимости переменных (global и nonlocal)
a = 10
def outer():
b = 20
def inner():
nonlocal b
b += 5
global a
a += 1
inner()
print(b) # 25
outer()
print(a) # 11
25 11
Пример 6: Использование _ для игнорирования значений
coordinates = (12.5, 45.2, 78.9)
x, _, z = coordinates # игнорируем второе значение
print(x, z) # 12.5 78.9
12.5 78.9
Пример 7: Динамическая типизация и смена типа
var = 42
print(type(var)) # int
var = 'теперь строка'
print(type(var)) # str
var = [1, 2, 3]
print(type(var)) # list
<class 'int'> <class 'str'> <class 'list'>
Пример 8: Константы с помощью Final (Python 3.8+)
from typing import Final
MAX_SIZE: Final = 100
# MAX_SIZE = 200 # mypy выдаст ошибку, но на самом деле выполнится
(без вывода, работает как обычное присваивание)
Пример 9: Проверка существования переменной с помощью globals()
if 'my_var' in globals():
print('my_var существует')
else:
print('my_var не определена')
my_var не определена
Пример 10: Преобразование типов с обработкой ошибок
def safe_int(value):
try:
return int(value)
except (ValueError, TypeError):
return None
print(safe_int('123')) # 123
print(safe_int('abc')) # None
print(safe_int(None)) # None
123 None None