🎉 恭喜! 🎉
你出色地完成了任务!这是一个不小的挑战,但你找到了正确答案。你离编程大师又近了一步!继续保持,每一步都让你更强大。
你是一名数字档案馆的初级专家。你的任务——创建一个用于古代文物编目的辅助程序。每件文物都有一个唯一的数字标识符(ID)和名称。
该程序应为交互式,并在循环中运行,等待你输入命令。
程序命令:
add — 触发添加新文物的流程。程序将要求你按 "id: name" 格式输入数据。你必须确保 ID 是一个整数。如果输入格式不正确(例如,缺少冒号或 ID 不是数字),程序必须报告错误并重新要求输入,直到输入正确的数据为止。 list — 在屏幕上显示当前所有已添加文物的列表,顺序为它们被添加的顺序。 sort — 对所有文物按其 ID 升序进行排序。排序必须使用 冒泡排序算法。排序完成后,程序应提示排序成功。 exit — 结束程序运行。 你的目标 — 编写一个程序,能够正确处理所有命令,管理文物列表,并正确实现冒泡排序,以便高级档案管理员能够轻松浏览目录。
用户团队(行)。它可以是以下之一: add, list, sort, output。
如果命令是 add,则输入关于工件(行)的数据,格式为 id: name。ID 应以整数的形式表示。
程序对命令的响应、错误消息、已排序或未完成的工件列表(行)。
添加
30: 盾牌
添加
10: 剑
排序
列表
退出
工件已成功添加。
工件已成功添加。
档案已按ID成功排序。
--- 工件目录 ---
id: 10, name: sword
id: 30, name
-------------------- 程序。再见!
# Создаем два пустых списка для хранения 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
广告
正在运行代码...