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

درس 5. While cycle

الصعوبة:

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

مسألة«فرز القائمة بالفقاعات»

💻 Python

أنت تعمل كأخصائي مبتدئ في الأرشيف الرقمي. مهمتك & mdash; إنشاء برنامج مساعد لفهرسة القطع الأثرية القديمة. كل قطعة أثرية لها معرف رقمي فريد (ID) واسم.

يجب أن يكون البرنامج تفاعليًا ويعمل في حلقة، منتظرًا الأوامر منك.

أوامر البرنامج:

  • add & nbsp; & mdash; يؤدي إلى عملية إضافة قطعة أثرية جديدة. سيطلب منك البرنامج إدخال البيانات بتنسيق & nbsp; "id: name" . يجب عليك التأكد من أن المعرف (ID) هو عدد صحيح. إذا كان تنسيق الإدخال غير صحيح (على سبيل المثال، لا يوجد نقطتان أو المعرف ليس رقمًا)، يجب على البرنامج الإبلاغ عن خطأ وطلب الإدخال مرة أخرى حتى يتم إدخال البيانات الصحيحة.
  • list & nbsp; & mdash; يعرض على الشاشة القائمة الحالية لجميع القطع الأثرية المضافة بالترتيب الذي تمت إضافتها به.
  • sort & nbsp; & mdash; يقوم بفرز جميع القطع الأثرية تصاعديًا حسب معرفاتها (ID). للفرز، يجب استخدام & nbsp; خوارزمية الفرز الفقاعي . بعد الفرز، يجب على البرنامج الإبلاغ عن النجاح.
  • exit & nbsp; & mdash; ينهي عمل البرنامج.
  • هدفك & mdash; كتابة برنامج يعالج جميع الأوامر بشكل صحيح، ويدير قائمة القطع الأثرية، وينفذ الفرز الفقاعي بشكل صحيح حتى يتمكن كبير أمناء الأرشيف من التنقل بسهولة في الكتالوج.

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

    فريق المستخدم (سطر). يمكن أن يكون أحد:   add ،   list ،   sort ،   output .

    إذا كان الأمر   add ، فسيتم إدخال بيانات القطعة الأثرية (سطر) بتنسيق   id: name . يجب أن يكون المعرف على شكل عدد صحيح.

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

    إجابات البرنامج على الأوامر، رسائل الخطأ، قائمة مرتبة أو غير مكتملة من القطع الأثرية (الأسطر).

    مثال

    إدخال

    أضف
    30: درع
    أضف
    10: سيف
    ترتيب
    قائمة
    خروج

    إخراج

    تمت إضافة القطعة الأثرية بنجاح.
    تمت إضافة القطعة الأثرية بنجاح.
    تم ترتيب الأرشيف بنجاح حسب المعرف.
    --- كتالوج القطع الأثرية ---
    id: 10, name: sword
    id: 30, name
    -------------------- البرامج. وداعًا!

    تلميح

    There will be no clue here, decide for yourself!

    main.py
    اختبار 1
    اختبار 2
    اختبار 3
    اختبار 4
    اختبار 5
    اختبار 6
    اختبار 7
    اختبار 8
    اختبار 9
    اختبار 10
    حل المطور
    # Создаем два пустых списка для хранения ID и названий артефактов.
    # Мы используем два списка, чтобы ID и названия с одинаковыми индексами соответствовали друг другу.
    artifact_ids = []
    artifact_names = []
    
    # Запускаем бесконечный цикл, который будет работать, пока пользователь не введет команду "выход".
    while True:
        # Запрашиваем у пользователя ввод команды.
        command = input()
    
        # Условие для обработки команды "добавить".
        if command == "добавить":
            # Внутренний цикл для проверки корректности ввода данных об артефакте.
            while True:
                # Запрашиваем данные в формате "ID:Название".
                data_input = input()
                
                # Проверяем, есть ли в строке разделитель ':'.
                if ':' in data_input:
                    # Разделяем строку на две части по первому вхождению ':'.
                    parts = data_input.split(':', 1)
                    id_str = parts[0]
                    name_str = parts[1]
                    
                    # Проверяем, состоит ли часть с ID только из цифр (и возможно знака минус).
                    if id_str.strip().isdigit():
                        # Если все проверки пройдены, преобразуем ID в целое число.
                        new_id = int(id_str)
                        # Добавляем ID и название в соответствующие списки.
                        artifact_ids.append(new_id)
                        artifact_names.append(name_str)
                        print("Артефакт успешно добавлен.")
                        # Прерываем внутренний цикл проверки, так как данные корректны.
                        break
                    else:
                        # Сообщение об ошибке, если ID не является числом.
                        print("Ошибка: ID должен быть целым числом. Попробуйте снова.")
                else:
                    # Сообщение об ошибке, если формат ввода неверный.
                    print("Ошибка: неверный формат. Используйте ID:Название. Попробуйте снова.")
    
        # Условие для обработки команды "список".
        elif command == "список":
            print("--- Каталог артефактов ---")
            # Проверяем, есть ли артефакты в каталоге.
            if not artifact_ids:
                print("Архив пуст.")
            else:
                # Используем цикл for для перебора всех артефактов и их вывода.
                # range(len(artifact_ids)) генерирует последовательность индексов от 0 до N-1.
                for i in range(len(artifact_ids)):
                    print(f"ID: {artifact_ids[i]}, Название: {artifact_names[i]}")
            print("--------------------------")
        
        # Условие для обработки команды "сортировать".
        elif command == "сортировать":
            # Получаем количество элементов для сортировки.
            n = len(artifact_ids)
            # Внешний цикл пузырьковой сортировки.
            for i in range(n):
                # Внутренний цикл, который сравнивает и меняет местами соседние элементы.
                # С каждым проходом внешнего цикла самый большой элемент "всплывает" в конец,
                # поэтому внутренний цикл можно сокращать на 'i'.
                for j in range(0, n-i-1):
                    # Если текущий ID больше следующего, меняем их местами.
                    if artifact_ids[j] > artifact_ids[j+1]:
                        # Меняем местами ID.
                        artifact_ids[j], artifact_ids[j+1] = artifact_ids[j+1], artifact_ids[j]
                        # ВАЖНО: одновременно меняем местами и названия, чтобы сохранить соответствие.
                        artifact_names[j], artifact_names[j+1] = artifact_names[j+1], artifact_names[j]
            print("Архив успешно отсортирован по ID.")
    
        # Условие для обработки команды "выход".
        elif command == "выход":
            print("Завершение работы программы. До свидания!")
            # Прерываем главный цикл while, что приводит к завершению программы.
            break
    
        # Если введена неизвестная команда.
        else:
            print("Неизвестная команда. Пожалуйста, используйте одну из следующих: добавить, список, сортировать, выход.")

    🎉 تهانينا! 🎉

    لقد حللت المهمة ببراعة! كان صعبًا لكنك وجدت الحل الصحيح. أنت خطوة أقرب إلى الاحتراف! استمر، كل مرحلة تجعلك أقوى.

    AD

    إعلان

    red-snake blue-snake green-snake

    جارٍ تشغيل الكود...

    مساعد الذكاء الاصطناعي

    مرحباً! أنا مساعدك في البرمجة. اسألني أي شيء عن Python — يمكنني شرح الدوال والطرق ومساعدتك في المهمة الحالية!