Implementar um programa de gerenciamento de high scores. O programa deve:
posicionar os dados do usuário na tabela de highest scores (max. 5) e regravar no arquivo.

Passo 1

Beleza, o que o enunciado pede é criar um programa que mantenha um “ranking” (top 5) de pontuações (“high scores”), colocando o usuário na posição correta e salvando tudo de volta num arquivo.
Conteúdo: manipulação de arquivo, listas/vetores, ordenação (inserção num ranking).
O que vamos precisar:
  • Ler o arquivo que armazena até 5 pares (nome, pontuação).
  • Inserir o novo par (nome, pontuação) nessa lista.
  • Ordenar a lista em ordem decrescente de pontuação.
  • Manter só os 5 maiores.
  • Reescrever o arquivo com o ranking atualizado.

Passo 2

Lendo e parseando o arquivo:
  1. Abrir o arquivo em modo de leitura.
  2. Para cada linha, separar o nome da pontuação (por exemplo, “João 250”).
  3. Guardar isso numa lista de tuplas: scores = [(“João”,250), (“Maria”,300), …].
    Teoria: a gente precisa converter a string da pontuação para número inteiro usando int(), assim dá pra comparar números corretamente.

Passo 3

Inserindo o novo usuário e ordenando:
  1. Recebo do usuário algo como novo = (“Você”, 275).
  2. Faço scores.append(novo).
  3. Uso um método de ordenação que compara o segundo item da tupla (a pontuação): scoressort(key=lambda x: x[1], reverse=True)
    Teoria: o key=lambda x: x[1] diz “compare pelo elemento índice 1 da tupla” e reverse=True inverte pra ordem decrescente.

Passo 4

Mantendo só o top 5 e salvando:
  1. Faço top5 = scores[:5] — isso pega os cinco primeiros elementos da lista já ordenada.
  2. Abro o arquivo em modo de escrita (isso apaga o que tinha antes).
  3. Para cada (nome,pontos) em top5, gravo uma linha "nome pontos\n".
    Teoria: ao abrir em modo "w", garantimos que o arquivo só terá o ranking atualizado.

Resposta

Segue o esqueleto em Python estilo “amigo explicando”:
def atualiza_highscores(arquivo, novo_nome, nova_pontuacao):
    # Lê o arquivo
    with open(arquivo, "r") as f:
        lines = f.readlines()

    # Parseia em lista de tuplas
    scores = []
    for line in lines:
        nome, pts = line.split()
        scores.append((nome, int(pts)))

    # Adiciona novo e ordena decrescente
    scores.append((novo_nome, nova_pontuacao))
    scores.sort(key=lambda x: x[1], reverse=True)

    # Mantém só top 5
    top5 = scores[:5]

    # Regrava no arquivo
    with open(arquivo, "w") as f:
        for nome, pts in top5:
            f.write(f"{nome} {pts}\n")

# Exemplo de uso:
# atualiza_highscores("highscores.txt", "Você", 275)
Essa função lê o ranking, insere o novo score, ordena, mantém só cinco e reescreve o arquivo.

Exercícios relacionados