• 1
    Entrada e saída
    • Tarefas
  • 2
    Condições
    • Tarefas
  • 3
    Loop for
    • Tarefas
  • 4
    Strings
    • Tarefas
  • 5
    Loop while
    • Tarefas
  • 6
    Listas
    • Tarefas
  • 7
    Matrizes 2D
    • Tarefas
  • 8
    Dicionários
    • Tarefas
  • 9
    Conjuntos
    • Tarefas
  • 10
    Funções e recursão
    • Tarefas
  • к

Lição 5. While cycle

Dificuldade:

Tarefa«Ordenar lista com método bolha»

💻 Python

Você trabalha como um especialista júnior no arquivo digital. Sua tarefa & mdash; Criar um programa assistente para a catalogação de artefatos antigos. Cada artefato possui um identificador numérico único (ID) e um nome.

O programa deve ser interativo e funcionar em ciclo, aguardando comandos seus.

Comandos do programa:

  1. add & nbsp; & mdash; aciona o processo de adicionar um novo artefato. O programa solicitará que você insira os dados no formato & nbsp; "id: nome" . Você deve garantir que o ID seja um número inteiro. Se o formato de entrada estiver incorreto (por exemplo, não houver dois pontos ou o ID não for um número), o programa deve relatar um erro e solicitar a entrada novamente até que os dados corretos sejam inseridos.
  2. list & nbsp; & mdash; Exibe na tela a lista atual de todos os artefatos adicionados na ordem em que foram adicionados.
  3. sort & nbsp; & mdash; Realiza a ordenação de todos os artefatos em ordem crescente de seus IDs. Para a ordenação, é necessário usar & nbsp; o algoritmo de ordenação bolha . Após a ordenação, o programa deve informar sobre o sucesso.
  4. exit & nbsp; & mdash; encerra a execução do programa.

Seu objetivo & mdash; Escrever um programa que processe corretamente todos os comandos, controle a lista de artefatos e implemente corretamente a ordenação bolha, para que o arquivista sênior possa navegar facilmente pelo catálogo.

Formato de entrada

O comando do usuário (linha). Pode ser um dos seguintes:   add,   list,   sort,   output.

Se o comando for   add, então a entrada de dados sobre o artefato (linha) no formato   id: nome. O ID deve ser informado na forma de um número inteiro.

Formato de saída

As respostas do programa aos comandos, mensagens de erro, uma lista ordenada ou não finalizada de artefatos (linhas).

Exemplo

Entrada

Adicionar
30: Escudo
Adicionar
10: Espada
Ordenar
Listar
Sair

Saída

O artefato foi adicionado com sucesso.
O artefato foi adicionado com sucesso.
O arquivo foi ordenado com sucesso por ID.
--- Catálogo de artefatos ---
id: 10, nome: sword
id: 30, nome
-------------------- Programas. Adeus!

Dica

There will be no clue here, decide for yourself!

main.py
Teste 1
Teste 2
Teste 3
Teste 4
Teste 5
Teste 6
Teste 7
Teste 8
Teste 9
Teste 10
Solução do desenvolvedor
# Создаем два пустых списка для хранения 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("Неизвестная команда. Пожалуйста, используйте одну из следующих: добавить, список, сортировать, выход.")

🎉 Parabéns! 🎉

Você resolveu a tarefa brilhantemente! Foi difícil, mas você encontrou a solução certa. Você está um passo mais perto de dominar a programação! Continue assim.

AD

Publicidade

red-snake blue-snake green-snake

Executando seu código...

Assistente de IA

Olá! Sou seu assistente de programação. Faça qualquer pergunta sobre Python — posso explicar funções, métodos e ajudá-lo com a tarefa atual!