Python · Синтаксис · Начальный уровень
Множества, словари, обработка ошибок
Практика Python с множествами, словарями и обработкой ошибок: уникальные значения, общие символы, try/except, безопасная обработка данных, группировка слов и анализ строк.
Краткое введение в тему и пояснения перед упражнениями (упражнения ниже):
Паттерны словарей — группировка и фильтрация
#Обработка ошибок с помощью try/except
#Быстрый справочник: множества, словари и исключения
#Упражнения:
Уникальные положительные значения.
#Напишите функцию, которая принимает список чисел и возвращает множество уникальных положительных значений.
def unique_positive(nums):
pass
Решение
def unique_positive(nums):
result = set()
for n in nums:
if n > 0:
result.add(n)
return result
Общие символы двух строк.
#Напишите функцию, которая принимает две строки и возвращает множество общих символов.
def common_chars(a, b):
pass
Решение
def common_chars(a, b):
return set(a) & set(b)
Средняя цена товаров.
#Напишите функцию, которая принимает словарь с ценами товаров и возвращает среднюю цену. Если словарь пустой — вернуть 0.
def average_price(prices):
pass
Решение
def average_price(prices):
if not prices:
return 0
total = 0
for p in prices.values():
total += p
return total / len(prices)
Сумма чисел из строки.
#Напишите функцию, которая принимает строку с числами, разделёнными пробелами, и возвращает сумму этих чисел. Если встречается не число — пропускайте его.
def safe_sum(text):
pass
Решение
def safe_sum(text):
total = 0
for part in text.split():
try:
total += int(part)
except ValueError:
pass
return total
Группировка по первой букве.
#Напишите функцию, которая принимает список слов и возвращает словарь, где: - ключ — первая буква слова - значение — количество слов, начинающихся с этой буквы
def first_letter_stats(words):
pass
Решение
def first_letter_stats(words):
result = {}
for w in words:
if not w:
continue
key = w[0]
if key in result:
result[key] += 1
else:
result[key] = 1
return result
# или так можно через setdefault
words = ["apple", "ant", "banana", "book"]
result = {}
for word in words:
first = word[0]
result.setdefault(first, []).append(word)
print(result)
Пересечение и разность множеств.
#Напишите функцию, которая принимает два множества и возвращает: - их пересечение - их разность (первое минус второе)
def set_operations(a, b):
pass
Решение
def set_operations(a, b):
return {
"intersection": a & b,
"difference": a - b
}
Фильтр старше 18.
#Напишите функцию, которая принимает словарь {имя: возраст} и возвращает словарь только с теми, кто старше 18.
def adults_only(data):
pass
Решение
def adults_only(data):
result = {}
for name, age in data.items():
if age > 18:
result[name] = age
return result
Множество типов значений.
#Напишите функцию, которая принимает список значений и возвращает множество их типов.
def value_types(values):
pass
Решение
def value_types(values):
result = set()
for v in values:
result.add(type(v))
return result
Лучший ученик по баллам.
#Напишите функцию, которая принимает словарь с баллами учеников и возвращает имя ученика с максимальным баллом. Если словарь пустой — вернуть None .
def best_student(scores):
pass
Решение
def best_student(scores):
if not scores:
return None
best = None
max_score = -1
for name, score in scores.items():
if score > max_score:
max_score = score
best = name
return best
Подсчёт слов.
#Напишите функцию, которая принимает строку и возвращает словарь с количеством каждого слова.
def word_frequency(text):
pass
Решение
def word_frequency(text):
result = {}
for w in text.split():
w = w.lower()
if w in result:
result[w] += 1
else:
result[w] = 1
return result
Чётные и нечётные в словаре.
#Напишите функцию, которая принимает список чисел и возвращает словарь: - "even" — количество чётных - "odd" — количество нечётных
def even_odd_stats(nums):
pass
Решение
def even_odd_stats(nums):
result = {"even": 0, "odd": 0}
for n in nums:
if n % 2 == 0:
result["even"] += 1
else:
result["odd"] += 1
return result
Удаление значений None.
#Напишите функцию, которая принимает словарь и возвращает новый словарь без пар где значение равно None .
def remove_none(d):
pass
Решение
def remove_none(d):
result = {}
for k, v in d.items():
if v is not None:
result[k] = v
return result
Уникальные слова из строк.
#Напишите функцию, которая принимает список строк и возвращает множество всех уникальных слов.
def unique_words(lines):
pass
Решение
def unique_words(lines):
result = set()
for line in lines:
for w in line.split():
result.add(w.lower())
return result
Цифры, буквы и прочие символы.
#Напишите функцию, которая принимает строку и возвращает словарь: - "digits" — количество цифр - "letters" — количество букв - "others" — количество остальных символов
def char_stats(text):
pass
Решение
def char_stats(text):
result = {"digits": 0, "letters": 0, "others": 0}
for ch in text:
if ch.isdigit():
result["digits"] += 1
elif ch.isalpha():
result["letters"] += 1
else:
result["others"] += 1
return result
Множества слов по длине.
#Напишите функцию, которая принимает список слов и возвращает словарь, где: - ключ — длина слова - значение — множество слов такой длины
def group_by_length(words):
pass
Решение
def group_by_length(words):
result = {}
for w in words:
l = len(w)
if l not in result:
result[l] = set()
result[l].add(w)
return result