Практические задания на работу с переменными в языке Python

Раздел: Основы Python -> Переменные и типы данных в 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

Задачи на переменные в Python - comments

En
переменные python задачи (python)