Faça um programa que receba do usuário um arquivo que contenha o nome e a nota de diversos alunos (da seguinte forma: NOME: JOÃO NOTA: 8), um aluno por linha. Mostre na tela o nome e a nota do aluno que possui a maior nota.

Passo 1

O problema pede um programa que leia um arquivo texto com linhas no formato “NOME: <nome> NOTA: <valor>” e exiba o aluno de maior nota. Vamos usar conceitos de leitura de arquivo, manipulação de strings e controle de fluxo para comparar valores.

Passo 2

Solicitar ao usuário o nome do arquivo e abri-lo em modo de leitura. Se o arquivo não existir, capturar a exceção e avisar o usuário.

Passo 3

Inicializar duas variáveis: uma para guardar o nome do aluno com maior nota (por exemplo, max_name) e outra para guardar a maior nota encontrada (por exemplo, max_grade), começando com nota muito baixa, como -1.

Passo 4

Percorrer o arquivo linha a linha. Para cada linha não vazia que contenha “NOME:” e “NOTA:”, usar split para separar nome e nota, limpar strings (strip) e converter a nota para número.
Comparar a nota extraída com max_grade. Se for maior, atualizar max_grade e max_name.

Passo 5

Após terminar de ler o arquivo, verificar se encontramos algum aluno. Se sim, imprimir nome e nota do aluno com maior nota; caso contrário, informar que não há dados válidos.

Resposta

def main():
    # Passo 2: pede o nome do arquivo
    arquivo = input("Digite o nome do arquivo: ")
    max_name = None
    max_grade = -1.0

    try:
        # Abre o arquivo em leitura
        with open(arquivo, 'r', encoding='utf-8') as f:
            for line in f:
                line = line.strip()
                if not line:
                    continue
                # Verifica se a linha está no formato esperado
                if "NOME:" in line and "NOTA:" in line:
                    # Separa em duas partes: antes e depois de "NOTA:"
                    nome_part, nota_part = line.split("NOTA:")
                    # Extrai e limpa o nome
                    nome = nome_part.replace("NOME:", "").strip()
                    # Extrai e converte a nota para float
                    nota = float(nota_part.strip())

                    # Atualiza máximo se for maior
                    if nota > max_grade:
                        max_grade = nota
                        max_name = nome
                else:
                    print(f"Linha no formato inválido: {line}")

        # Passo 6: exibe o resultado
        if max_name is not None:
            print(f"Aluno com maior nota: {max_name} - {max_grade}")
        else:
            print("Nenhum dado válido encontrado no arquivo.")

    except FileNotFoundError:
        print("Arquivo não encontrado. Verifique o nome e tente novamente.")

if __name__ == "__main__":
    main()

Exercícios relacionados