🐍 Python: Практические задания

Тема: Практика кода и отладка

📊 Прогресс:

0/0

🟢 Уровень 1: Соглашения и базовые ошибки

Задача 1.1: Имена переменных
В коде ниже переменной присвоено неверное имя, исправьте его согласно PEP8.
UserName = "Alice"
print(UserName)
💡 Подсказка:
Имена переменных должны быть в нижнем регистре с подчёркиваниями.
✅ Решение:
user_name = "Alice"
print(user_name)
Задача 1.2: Типы данных
В коде есть ошибка с типами: пытаемся сложить число и строку. Исправьте.
age = 25
message = "Возраст: " + age
print(message)
💡 Подсказка:
Приведите число к строке с помощью str() перед сложением.
✅ Решение:
age = 25
message = "Возраст: " + str(age)
print(message)
Задача 1.3: Форматирование строк
Исправьте код, чтобы при вводе имени и возраста программа корректно выводила фразу:
Привет, <имя>. Тебе <возраст> лет.
name = input("Введите имя: ")
age = input("Введите возраст: ")
print("Привет, " + name + ". Тебе " + age + " лет.")
💡 Подсказка:
В коде нет ошибки, но добавьте форматирование через f-строку.
✅ Решение:
name = input("Введите имя: ")
age = input("Введите возраст: ")
print(f"Привет, {name}. Тебе {age} лет.")

🟡 Уровень 2: Ошибки со списками

Задача 2.1: Метод append
Найдите ошибку в использовании метода .append() в списке.
numbers = [1, 2, 3]
numbers.append(4, 5)
print(numbers)
💡 Подсказка:
Метод .append() принимает один аргумент.
✅ Решение:
numbers = [1, 2, 3]
numbers.append(4)
numbers.append(5)
print(numbers)
Задача 2.2: Индексация
В коде используется индекс за пределами списка. Исправьте ошибку.
letters = ['a', 'b', 'c']
print(letters[3])
💡 Подсказка:
Индексы начинаются с 0, максимальный индекс — длина списка минус 1.
✅ Решение:
letters = ['a', 'b', 'c']
print(letters[2])
Задача 2.3: Сумма элементов
В коде для подсчёта суммы элементов списка используется неправильная операция.
nums = [1, 2, 3]
total = 0
for num in nums:
    total = total * num
print(total)
💡 Подсказка:
Для сложения нужно использовать +, а не *.
✅ Решение:
nums = [1, 2, 3]
total = nums[0] + nums[1] + nums[2]
print(total)
# Или использовать встроенную функцию sum()
total = sum(nums)
print(total)

🟠 Уровень 3: Преобразования и типы

Задача 3.1: Объединение строк
В коде для объединения строк используется знак +, но не добавляется пробел между словами.
words = ["Hello", "world"]
sentence = words[0] + words[1]
print(sentence)
💡 Подсказка:
Добавьте пробел между словами.
✅ Решение:
words = ["Hello", "world"]
sentence = words[0] + " " + words[1]
print(sentence)
Задача 3.2: Проверка типов
В коде выводится неверный тип данных. Исправьте тип и проверьте через type().
value = 10
print(type(str(value)))
💡 Подсказка:
Код преобразует число в строку и выводит тип строки. Нужно вывести тип исходной переменной.
✅ Решение:
value = 10
print(type(value))
Задача 3.3: Преобразование типов
В коде используется некорректное преобразование типов.
num_str = "123.45"
num = int(num_str)
print(num)
💡 Подсказка:
Строку с десятичной точкой нельзя напрямую конвертировать в int, сначала нужно преобразовать в float.
✅ Решение:
num_str = "123.45"
num = int(float(num_str))
print(num)

🔴 Уровень 4: Структуры данных

Задача 4.1: Сравнение множеств
В коде используется неправильное сравнение множеств.
set1 = {1, 2, 3}
set2 = {3, 2, 1}
print(set1 == set2)
💡 Подсказка:
Множества не зависят от порядка, это корректное сравнение. Проверьте, правильно ли использован оператор.
✅ Решение:
set1 = {1, 2, 3}
set2 = {3, 2, 1}
print(set1 == set2)  # Выведет True
Задача 4.2: Безопасный доступ к словарю
В коде создается словарь, но обращение к несуществующему ключу приводит к ошибке.
profile = {'name': 'John', 'age': 30}
print(profile['city'])
💡 Подсказка:
Используйте .get() чтобы избежать ошибки.
✅ Решение:
profile = {'name': 'John', 'age': 30}
print(profile.get('city', 'Город не указан'))
Задача 4.3: Изменение кортежа
В коде пытаются изменить элемент кортежа, что приводит к ошибке.
coords = (10, 20)
coords[0] = 5
print(coords)
💡 Подсказка:
Кортежи неизменяемы, создайте новый кортеж с нужными значениями.
✅ Решение:
coords = (10, 20)
coords = (5, coords[1])
print(coords)

🟣 Уровень 5: Работа с библиотеками

Задача 5.1: Модуль random
В коде неправильно используется модуль random для получения случайного элемента из списка.
import random
items = ['a', 'b', 'c']
print(random.randint(items))
💡 Подсказка:
Для выбора случайного элемента используется random.choice().
✅ Решение:
import random
items = ['a', 'b', 'c']
print(random.choice(items))
Задача 5.2: Импорт Faker
В коде создается пользовательский профиль с использованием библиотеки faker, но не импортирован нужный класс.
fake = Faker()
print(fake.name())
💡 Подсказка:
Импортируйте Faker из пакета faker.
✅ Решение:
from faker import Faker
fake = Faker()
print(fake.name())
Задача 5.3: Оптимизация кода
Оптимизируйте следующий код, чтобы избежать многократного вызова print() и сделать вывод более читаемым.
name = "Anna"
age = 28
city = "Moscow"
print("Имя: " + name)
print("Возраст: " + str(age))
print("Город: " + city)
💡 Подсказка:
Используйте многострочный f-строковый литерал.
✅ Решение:
name = "Anna"
age = 28
city = "Moscow"
print(f"""Имя: {name}
Возраст: {age}
Город: {city}""")

💡 Полезные советы по отладке