Python · Синтаксис · Початковий рівень
set, dict та обробка помилок
Практика Python з set, словниками та обробкою помилок: унікальні значення, загальні символи, 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