• 1
    Ввод и вывод данных
    • Задачи
  • 2
    Условия
    • Задачи
  • 3
    Цикл for
    • Задачи
  • 4
    Строки
    • Задачи
  • 5
    Цикл while
    • Задачи
  • 6
    Списки
    • Задачи
  • 7
    Двумерные массивы
    • Задачи
  • 8
    Словари
    • Задачи
  • 9
    Множества
    • Задачи
  • 10
    Функции и рекурсия
    • Задачи
  • к

Занятие 4. строки

Уровень сложности:

иконка человека красный иконка человека белая иконка человека зеленая Pythonlib

Задача«Частота символов строки»

Представьте, что вы работаете музыкальным продюсером на студии звукозаписи. Каждый день вы получаете десятки коротких музыкальных семплов (ритмических рисунков). Некоторые из них — это просто очень короткий мотив, зацикленный несколько раз, а другие — более сложные и уникальные мелодии. Ваша задача — сэкономить время и написать программу-анализатор, которая поможет быстро отделить простые повторяющиеся семплы от сложных.

Вы будете представлять семпл в виде строки, где каждый символ — это нота или ударный звук (например, "ababab" или "takadimitakadimi"). Программа должна определить, является ли вся строка повторением какой-то её более короткой начальной части.

Например:

  • Семпл "ababab" является повторением подстроки "ab" 3 раза. Значит, это простой луп. Результат: True.
  • Семпл "abcabc" является повторением подстроки "abc" 2 раза. Результат: True.
  • Семпл "abaсde" не является повторением какого-либо своего начального куска. Результат: False.
  • Семпл "aaaa" является повторением "a" 4 раза. Результат: True.

Вам нужно написать программу, которая принимает на вход одну строку (семпл) и выводит True, если она является повторением, и False в противном случае.

Формат ввода

Музыкальный семпл (тип: строка). Это одна строка без пробелов, которую вводит пользователь.

Формат Вывода

Результат проверки (тип: булево значение). Это либо слово True, либо слово False.

Пример

Ввод

gogogo

Вывод

True

Подсказка

Тут подсказки не будет, решай сам!

main.py
Тест 1
Тест 2
Тест 3
Тест 4
Тест 5
Тест 6
Тест 7
Тест 8
Тест 9
Тест 10
Решение разработчика
# Получаем строку от пользователя
input_string = input()

# Получаем длину введенной строки
n = len(input_string)

# Создаем флаг, который покажет, нашли ли мы подходящий шаблон. Изначально считаем, что не нашли.
found_pattern = False

# Начинаем цикл для проверки всех возможных длин подшаблона.
# Длина подшаблона (i) может быть от 1 до половины длины всей строки.
# Длиннее половины быть не может, так как шаблон должен повториться хотя бы дважды.
for i in range(1, n // 2 + 1):
    # Проверяем, делится ли длина всей строки нацело на длину предполагаемого шаблона.
    # Если нет, то из такого шаблона целую строку составить нельзя.
    if n % i == 0:
        # Если делится, то у нас есть кандидат в шаблоны.
        # Это начальная часть строки длиной i.
        pattern = input_string[:i]
        
        # Вычисляем, сколько раз наш кандидат-шаблон должен повториться, чтобы получить строку нужной длины.
        num_repeats = n // i
        
        # Создаем тестовую строку, повторяя наш кандидат-шаблон нужное количество раз.
        test_string = pattern * num_repeats
        
        # Сравниваем созданную тестовую строку с оригинальной.
        if test_string == input_string:
            # Если они совпали, значит, мы нашли повторяющийся шаблон.
            found_pattern = True
            # Прерываем цикл, так как дальнейшие проверки не нужны.
            break

# После завершения цикла выводим значение флага.
# Если мы нашли шаблон, он будет True, если нет - останется False.
print(found_pattern)

🎉 Поздравляем! 🎉

Ты отлично справился с задачей! Это был непростой вызов, но ты нашёл правильное решение. Ты на шаг ближе к мастерству в программировании! Продолжай в том же духе, ведь каждый пройденный этап делает тебя ещё сильнее.

AD

Реклама

red-snake blue-snake green-snake

Запускаем ваш код...

Помощник ИИ

Привет! Я твой помощник по программированию. Задавай любые вопросы по Python, я могу рассказать о функциях, методах, обьяснить то, что тебе не понятно, а так же о текущей задаче!