Python · Синтаксис · Початковий рівень
ООП, словники, алгоритмічне мислення
Вправи з Python на ООП, словники та алгоритмічне мислення: класи для аналізу даних, підрахунок слів та символів, робота з оцінками, паролями, статистикою та перетворенням словників.
Короткий вступ до теми та пояснення перед вправами (вправи нижче):
Патерни реєстру, лічильника і агрегатора
#Швидкий довідник: словники, множини та патерни класів
#Вправи:
WordCounter для тексту.
#Створіть клас WordCounter , який приймає рядок тексту. Додайте метод count , який повертає словник, де: - ключ — слово - значення — скільки разів воно зустрічається в тексті
class WordCounter:
pass
Рішення
class WordCounter:
def __init__(self, text):
self.text = text
def count(self):
result = {}
words = self.text.split()
for w in words:
if w in result:
result[w] += 1
else:
result[w] = 1
return result
Журнал оцінок GradeBook.
#Створіть клас GradeBook . Метод add(name, grade) додає оцінку учню. Метод average(name) повертає середню оцінку учня.
class GradeBook:
pass
Рішення
class GradeBook:
def __init__(self):
self.data = {}
def add(self, name, grade):
if name not in self.data:
self.data[name] = []
self.data[name].append(grade)
def average(self, name):
grades = self.data.get(name, [])
if not grades:
return 0
return sum(grades) / len(grades)
Підрахунок кожної букви.
#Напишіть функцію, яка приймає рядок та повертає словник з кількістю кожної букви.
def letter_stats(text):
pass
Рішення
def letter_stats(text):
result = {}
for ch in text:
if ch.isalpha():
ch = ch.lower()
if ch in result:
result[ch] += 1
else:
result[ch] = 1
return result
Перевірка надійності пароля.
#Створіть клас PasswordChecker . Метод check повертає True , якщо пароль: - довжина ≥ 8 - є хоча б одна цифра
class PasswordChecker:
pass
Рішення
class PasswordChecker:
def check(self, password):
if len(password) < 8:
return False
has_digit = False
for ch in password:
if ch.isdigit():
has_digit = True
break
return has_digit
Інвентар товарів.
#Створіть клас Inventory . Метод add_item(name, count) додає товар. Метод total_items() повертає загальну кількість усіх товарів.
class Inventory:
pass
Рішення
class Inventory:
def __init__(self):
self.items = {}
def add_item(self, name, count):
if name in self.items:
self.items[name] += count
else:
self.items[name] = count
def total_items(self):
total = 0
for c in self.items.values():
total += c
return total
Групування слів за довжиною.
#Напишіть функцію, яка приймає список слів і повертає словник: - ключ — довжина слова - значення — скільки слів такої довжини
def length_groups(words):
pass
Рішення
def length_groups(words):
result = {}
for w in words:
l = len(w)
if l in result:
result[l] += 1
else:
result[l] = 1
return result
BankAccount без мінуса.
#Створіть клас BankAccount з методами: - deposit(amount) - withdraw(amount) — не дозволяє піти в мінус
class BankAccount:
pass
Рішення
class BankAccount:
def __init__(self, balance=0):
self.balance = balance
def deposit(self, amount):
self.balance += amount
def withdraw(self, amount):
if amount <= self.balance:
self.balance -= amount
return True
return False
Голосні та приголосні.
#Напишіть функцію, яка приймає рядок і повертає словник з кількістю голосних та приголосних букв.
def vowels_and_consonants(text):
pass
Рішення
def vowels_and_consonants(text):
vowels = "aeiouy"
result = {"vowels": 0, "consonants": 0}
for ch in text.lower():
if ch.isalpha():
if ch in vowels:
result["vowels"] += 1
else:
result["consonants"] += 1
return result
Реєстрація користувачів.
#Створіть клас UserRegistry . Метод register(username) : - повертає True , якщо користувача додано - False , якщо такий уже є
USERS = []
class UserRegistry:
pass
Рішення
USERS = []
class UserRegistry:
def register(self, username):
if username in USERS:
return False
USERS.append(username)
return True
Класифікація чисел.
#Напишіть функцію, яка приймає список чисел і повертає словник: - "positive" - "negative" - "zero"
def number_summary(nums):
pass
Рішення
def number_summary(nums):
result = {"positive": 0, "negative": 0, "zero": 0}
for n in nums:
if n > 0:
result["positive"] += 1
elif n < 0:
result["negative"] += 1
else:
result["zero"] += 1
return result
Кошик покупок.
#Створіть клас ShoppingCart . Метод add(product, price) додає товар. Метод total() повертає суму всіх цін.
class ShoppingCart:
pass
Рішення
class ShoppingCart:
def __init__(self):
self.items = {}
def add(self, product, price):
self.items[product] = price
def total(self):
total = 0
for p in self.items.values():
total += p
return total
Позиція першої появи символу.
#Напишіть функцію, яка приймає рядок і повертає словник, де ключ — символ, значення — позиція його першої появи в рядку.
def first_positions(text):
pass
Рішення
def first_positions(text):
result = {}
for i in range(len(text)):
if text[i] not in result:
result[text[i]] = i
return result
Таблиця очок гравців.
#Створіть клас ScoreTable . Метод add(name, points) додає очки гравцю. Метод top_player() повертає ім’я гравця з максимальним рахунком.
class ScoreTable:
pass
Рішення
class ScoreTable:
def __init__(self):
self.scores = {}
def add(self, name, points):
if name in self.scores:
self.scores[name] += points
else:
self.scores[name] = points
def top_player(self):
if not self.scores:
return None
top = None
max_score = -1
for name, score in self.scores.items():
if score > max_score:
max_score = score
top = name
return top
Обмін ключів і значень.
#Напишіть функцію, яка приймає словник і повертає новий словник, де ключі та значення поміняні місцями. Гарантується, що значення унікальні.
def swap_dict(d):
pass
Рішення
def swap_dict(d):
result = {}
for k, v in d.items():
result[v] = k
return result
Аналізатор тексту.
#Створіть клас TextAnalyzer . Метод analyze повертає словник: - "chars" — кількість символів - "words" — кількість слів - "lines" — кількість рядків
class TextAnalyzer:
pass
Рішення
class TextAnalyzer:
def __init__(self, text):
self.text = text
def analyze(self):
chars = len(self.text)
lines = self.text.count("\n") + 1 if self.text else 0
words = len(self.text.split())
return {
"chars": chars,
"words": words,
"lines": lines
}