• 1
    Entrada e saída
    • Tarefas
  • 2
    Condições
    • Tarefas
  • 3
    Loop for
    • Tarefas
  • 4
    Strings
    • Tarefas
  • 5
    Loop while
    • Tarefas
  • 6
    Listas
    • Tarefas
  • 7
    Matrizes 2D
    • Tarefas
  • 8
    Dicionários
    • Tarefas
  • 9
    Conjuntos
    • Tarefas
  • 10
    Funções e recursão
    • Tarefas
  • к

Lição 4. Lines

Dificuldade:

Tarefa«Frequência dos símbolos da linha»

💻 Python

Imagine que você está trabalhando como produtor musical em um estúdio de gravação. Todos os dias você recebe dezenas de pequenas amostras musicais (padrões rítmicos). Algumas delas — são apenas um motivo muito curto, repetido várias vezes, enquanto outras — são melodias mais complexas e únicas. Sua tarefa — é economizar tempo e escrever um programa analisador que ajude a separar rapidamente amostras simples e repetitivas das complexas.

Você representará uma amostra na forma de uma linha onde cada símbolo — é uma nota ou som de percussão (por exemplo, "Ababab" ou "Takadimitakadimi"). O programa deve determinar se toda a linha é uma repetição de alguma parte inicial mais curta dela.

Por exemplo:

  • Amostra   " ababab "   é uma repetição da melodia   " ab "   3 vezes. Portanto, é uma amostra simples. Resultado:   true
  • Amostra   " abcabc "   é uma repetição da melodia   " abc "   2 vezes. Resultado:   true
  • Amostra   " abasde "   não é uma repetição de nenhuma de suas partes iniciais. Resultado:   false
  • Amostra   " aaaa "   é uma repetição   " a "   4 vezes. Resultado:   true

Você precisa escrever um programa que recebe uma linha (amostra) como entrada e exibe   true , se for uma repetição, e   false caso contrário.

Formato de entrada

Amostra Musical (Tipo: Linha). Esta é uma linha sem lacunas que o usuário insere.

Formato de saída

O resultado da verificação (tipo: valor breve). Isto é ou a palavra   true, ou a palavra   false.

Exemplo

Entrada

gogogo

Saída

verdadeiro

Dica

There will be no clue here, decide for yourself!

main.py
Teste 1
Teste 2
Teste 3
Teste 4
Teste 5
Teste 6
Teste 7
Teste 8
Teste 9
Teste 10
Solução do desenvolvedor
# Получаем строку от пользователя
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)

🎉 Parabéns! 🎉

Você resolveu a tarefa brilhantemente! Foi difícil, mas você encontrou a solução certa. Você está um passo mais perto de dominar a programação! Continue assim.

AD

Publicidade

red-snake blue-snake green-snake

Executando seu código...

Assistente de IA

Olá! Sou seu assistente de programação. Faça qualquer pergunta sobre Python — posso explicar funções, métodos e ajudá-lo com a tarefa atual!