• 1
    Entrée et sortie
    • Tâches
  • 2
    Conditions
    • Tâches
  • 3
    Boucle for
    • Tâches
  • 4
    Chaînes
    • Tâches
  • 5
    Boucle while
    • Tâches
  • 6
    Listes
    • Tâches
  • 7
    Tableaux 2D
    • Tâches
  • 8
    Dictionnaires
    • Tâches
  • 9
    Ensembles
    • Tâches
  • 10
    Fonctions et récursion
    • Tâches
  • к

Leçon 4. Lines

Difficulté :

Exercice«Fréquence des symboles de ligne»

💻 Python

Imaginez que vous travaillez comme producteur musical dans un studio d'enregistrement. Chaque jour, vous recevez des dizaines de courts échantillons musicaux (motifs rythmiques). Certains d'entre eux — ne sont qu'un motif très court, répété plusieurs fois, tandis que d'autres — sont des mélodies plus complexes et uniques. Votre tâche — est de gagner du temps et d'écrire un programme d'analyse qui aidera à séparer rapidement les échantillons simples et répétitifs des complexes.

Vous recevrez un échantillon sous la forme d'une ligne où chaque symbole — représente une note ou un son de percussion (par exemple, "Ababab" ou "Takadimitakadimi"). Le programme doit déterminer si la ligne entière est une répétition d'une partie initiale plus courte.

Par exemple :

  • Échantillon   "ababab"   est une répétition du motif   "ab"   3 fois. C'est donc un échantillon simple. Résultat :   true
  • Échantillon   "abcabc"   est une répétition du motif   "abc"   2 fois. Résultat :   true
  • Échantillon   "abasde"   n'est pas une répétition d'une de ses parties initiales. Résultat :   false
  • Échantillon   "aaaa"   est une répétition de   "a"   4 fois. Résultat :   true

Vous devez écrire un programme qui prend une ligne (l'échantillon) en entrée et affiche   true s'il s'agit d'une répétition, et   false sinon.

Format d entrée

Échantillon musical (Type : Ligne). Il s'agit d'une seule ligne sans espaces que l'utilisateur saisit.

Format de sortie

Le résultat de la vérification (type : valeur brève). Il s'agit soit du mot   true, soit du mot   false.

Exemple

Entrée

gogogo

Sortie

vrai

Indice

There will be no clue here, decide for yourself!

main.py
Test 1
Test 2
Test 3
Test 4
Test 5
Test 6
Test 7
Test 8
Test 9
Test 10
Solution du développeur
# Получаем строку от пользователя
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)

🎉 Félicitations ! 🎉

Tu as brillamment résolu la tâche ! C était difficile, mais tu as trouvé la bonne solution. Tu es encore plus proche de maîtriser la programmation ! Continue ainsi.

AD

Publicité

red-snake blue-snake green-snake

Exécution de votre code...

Assistant IA

Bonjour ! Je suis ton assistant de programmation. Pose moi toutes tes questions sur Python — je peux t expliquer les fonctions, les méthodes et t aider avec la tâche en cours !