• 1
    数据输入输出
    • 任务
  • 2
    条件语句
    • 任务
  • 3
    for循环
    • 任务
  • 4
    字符串
    • 任务
  • 5
    while循环
    • 任务
  • 6
    列表
    • 任务
  • 7
    二维数组
    • 任务
  • 8
    字典
    • 任务
  • 9
    集合
    • 任务
  • 10
    函数与递归
    • 任务
  • к

课程 5. While cycle

难度:

任务«使用冒泡方法对列表进行排序»

💻 Python

你是一名数字档案馆的初级专家。你的任务——创建一个用于古代文物编目的辅助程序。每件文物都有一个唯一的数字标识符(ID)和名称。

该程序应为交互式,并在循环中运行,等待你输入命令。

程序命令:

  1. add   — 触发添加新文物的流程。程序将要求你按 "id: name" 格式输入数据。你必须确保 ID 是一个整数。如果输入格式不正确(例如,缺少冒号或 ID 不是数字),程序必须报告错误并重新要求输入,直到输入正确的数据为止。
  2. list   — 在屏幕上显示当前所有已添加文物的列表,顺序为它们被添加的顺序。
  3. sort   — 对所有文物按其 ID 升序进行排序。排序必须使用 冒泡排序算法。排序完成后,程序应提示排序成功。
  4. exit   — 结束程序运行。

你的目标 — 编写一个程序,能够正确处理所有命令,管理文物列表,并正确实现冒泡排序,以便高级档案管理员能够轻松浏览目录。

输入格式

用户团队(行)。它可以是以下之一: add, list, sort, output。

如果命令是 add,则输入关于工件(行)的数据,格式为 id: name。ID 应以整数的形式表示。

输出格式

程序对命令的响应、错误消息、已排序或未完成的工件列表(行)。

示例

输入

添加
30: 盾牌
添加
10: 剑
排序
列表
退出

输出

工件已成功添加。
工件已成功添加。
档案已按ID成功排序。
--- 工件目录 ---
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

正在运行代码...

AI助手

你好!我是你的编程助手。随时向我提问关于 Python 的问题——我可以解释函数、方法,并帮助你完成当前任务!