• 1
    إدخال وإخراج البيانات
    • المهام
  • 2
    الشروط
    • المهام
  • 3
    حلقة for
    • المهام
  • 4
    السلاسل النصية
    • المهام
  • 5
    حلقة while
    • المهام
  • 6
    القوائم
    • المهام
  • 7
    مصفوفات ثنائية الأبعاد
    • المهام
  • 8
    القواميس
    • المهام
  • 9
    المجموعات
    • المهام
  • 10
    الدوال والتكرار
    • المهام
  • к

درس 4. Lines

الصعوبة:

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

مسألة«تردد رموز السطر»

💻 Python

تخيل أنك تعمل كمنتج موسيقي في استوديو تسجيل. كل يوم تحصل على عشرات العينات الموسيقية القصيرة (الرسومات الإيقاعية). بعضها — مجرد فكرة قصيرة جدًا تتكرر عدة مرات، بينما البعض الآخر — ألحان أكثر تعقيدًا وفريدة. مهمتك — توفير الوقت وكتابة برنامج محلل يساعد في فصل العينات البسيطة المتكررة بسرعة عن المعقدة.

سيتم تمثيل العينة على شكل سطر حيث كل رمز — هو نغمة أو صوت قرع (على سبيل المثال، "Ababab" أو "Takadimitakadimi"). يجب على البرنامج تحديد ما إذا كان السطر بأكمله عبارة عن تكرار لجزء أولي أقصر منه.

على سبيل المثال:

  • العينة   "ababab"   هي تكرار للنغمة   "ab"   3 مرات. إذن هذه عينة بسيطة. النتيجة:   true
  • العينة   "abcabc"   هي تكرار للنغمة   "abc"   مرتين. النتيجة:   true
  • العينة   "abasde"   ليست تكرارًا لأي جزء أولي منها. النتيجة:   false
  • العينة   "aaaa"   هي تكرار   "a"   4 مرات. النتيجة:   true

تحتاج إلى كتابة برنامج يأخذ سطرًا واحدًا (العينة) كمدخل ويخرج   true إذا كان تكرارًا، و   false بخلاف ذلك.

تنسيق الإدخال

مثال موسيقي (النوع: سطر). هذا سطر واحد بدون فجوات يقوم المستخدم بإدخاله.

تنسيق الإخراج

نتيجة الفحص (النوع: قيمة مختصرة). إما الكلمة   true، أو الكلمة   false.

مثال

إدخال

انطلق انطلق انطلق

إخراج

صحيح

تلميح

There will be no clue here, decide for yourself!

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 — يمكنني شرح الدوال والطرق ومساعدتك في المهمة الحالية!