Решены несколько задач пятого ранга на сайте Codewars с использованием Python.
Задача: First one repeating character
Условие: Написать функцию, принимающую строку и возвращающую первый символ, не встречающийся повторно. Регистр игнорируется, но возвращаемый символ должен сохранять исходный регистр. Если все символы повторяются, возвращается пустая строка. Пример: для строки «стресс» функция должна вернуть «Т».
Решение: Создаётся список, куда добавляются символы, встречающиеся в строке только один раз (с учётом регистра). Функция возвращает первый элемент списка, если он не пуст, иначе — пустую строку.
def first_non_repeating_char(s):
unique_chars = []
for char in s:
if s.lower().count(char.lower()) == 1:
unique_chars.append(char)
return unique_chars[0] if unique_chars else ""
Задача: Sort the weight
Условие: Член фитнес-клуба хочет изменить порядок сортировки списка участников по весу. Вес числа — сумма его цифр (например, вес 99 — 18, вес 100 — 1). Список должен быть отсортирован по возрастанию веса.
Решение: Используется функция sorted с ключом key, вычисляющим сумму цифр числа. Входные данные — строка, разделённая пробелами; результат преобразуется обратно в строку, разделённую пробелами.
def sum_digits(n):
digits = [int(d) for d in str(n)]
return sum(digits)
def sort_weight(weight):
weights = [int(w) for w in weight.split()]
sorted_weights = sorted(weights, key=sum_digits)
return " ".join(map(str, sorted_weights))
Задача: Extract main domain from a URL
Условие: Написать функцию, принимающую URL и возвращающую доменное имя (например, для https://www.github.com — github).
Решение: Удаляются протоколы (http://, https://) и www. из URL с помощью replace. Затем строка разделяется по точкам с помощью split, и возвращается первый элемент.
def extract_domain(url):
url = url.replace("http://", "").replace("https://", "").replace("www.", "")
return url.split(".")[0]
Задача: String incrementer
Условие: Написать функцию, увеличивающую число в конце строки на единицу. Если числа нет, добавить единицу. Учитываются ведущие нули.
Решение: Строка разделяется на буквенную и числовую части с помощью rsplit. Если числовой части нет, добавляется «1». Иначе число увеличивается на 1 и преобразуется обратно в строку с помощью zfill для сохранения количества цифр.
def increment_string(string):
letters, numbers = string.rsplit(' ', 1) if ' ' in string else (string, "")
if numbers == "":
return letters + "1"
else:
num = int(numbers) + 1
return letters + str(num).zfill(len(numbers))
Рассмотрены решения нескольких задач с Codewars, демонстрирующие приёмы работы со строками и числами в Python, такие как count, split, sorted, replace, rsplit, zfill.