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.
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()